Скриптуем объекты БД (PoSh)

by Alexey Knyazev 7. апреля 2009 18:29

Продолжая тему "полезные скрипты", предлагаю вариант скриптования объектов Базы Данных на PowerShell.

Для доступа к серверу БД использую набор объектов SMO (http://msdn.microsoft.com/ru-ru/library/ms162169.aspx). Скриптование объектов с помощью консольного приложения я писал больше года назад (SQLDMOScripter / SQLSMOScripter).

Теперь нечто подобное, но уже в виде скрипта на PoSh. Указал не все объекты, но вы всегда сможете этот код дополнить.

#Входные пар-ы:
$ServerName=Read-Host "Укажите имя сервера БД"
$DatabaseName=Read-Host "Имя БД" 
$ObjectType=Read-Host "Тип объектов для скриптования" 
$OutFileName=Read-Host "Вывести результат в файл"

 #Используем SMO (http://msdn.microsoft.com/ru-ru/library/ms162557.aspx)
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null
$server=new-object("Microsoft.SqlServer.Management.Smo.Server") $ServerName

#Имя БД, с которой работаем
$db = $server.Databases[$DatabaseName]

#Скриптуем Таблицы

if ($ObjectType -eq “TABLES”)
{

      foreach ($tbl in $db.Tables)

      {

      $s =$s+"–Table ["+$tbl.name+"]"+[char]13+[char]10

      $sc = $tbl.Script()

      $se = $sc.GetEnumerator()

            while ($se.MoveNext())

            {

            $s =$s+$se.Current+[char]13+[char]10 

            }

            

            #Скриптуем триггеры текущей таблицы

            foreach ($tr in $tbl.Triggers)

            {

            $s =$s+"–Trigger ["+$tr.name+"]"+[char]13+[char]10

            $sc = $tr.Script()

            $se = $sc.GetEnumerator()

                  while ($se.MoveNext())

                  {

                  $s =$s+$se.Current+[char]13+[char]10 

                  }

            }

 

            #Скриптуем индексы текущей таблицы

            foreach ($in in $tbl.Indexes)

            {

            $s =$s+"–Index ["+$in.name+"]"+[char]13+[char]10

            $sc = $in.Script()

            $se = $sc.GetEnumerator()

                  while ($se.MoveNext())

                  {

                  $s =$s+$se.Current+[char]13+[char]10 

                  }

            }

 

            #Скриптуем правила текущей таблицы

            foreach ($ch in $tbl.Checks)

            {

            $s =$s+"–Check ["+$ch.name+"]"+[char]13+[char]10

            $sc = $ch.Script()

            $se = $sc.GetEnumerator()

                  while ($se.MoveNext())

                  {

                  $s =$s+$se.Current+[char]13+[char]10 

                  }

            }

 

            #Скриптуем ключи текущей таблицы

            foreach ($fk in $tbl.ForeignKeys)

            {

            $s =$s+"–ForeignKey ["+$fk.name+"]"+[char]13+[char]10

            $sc = $fk.Script()

            $se = $sc.GetEnumerator()

                  while ($se.MoveNext())

                  {

                  $s =$s+$se.Current+[char]13+[char]10 

                  }

            }

      

      }

}

 

#Скриптуем синонимы

if ($ObjectType -eq "SYNONYMS")

{

      foreach ($syn in $db.Synonyms)

      {

      $s =$s+"–Synonym ["+$syn.name+"]"+[char]13+[char]10

      $sc = $syn.Script()

      $se = $sc.GetEnumerator()

            while ($se.MoveNext())

            {

            $s =$s+$se.Current+[char]13+[char]10 

            }

      }

}

 

#Скриптуем представления

if ($ObjectType -eq "VIEWS")

{

      foreach ($v in $db.Views)

      {

      $s =$s+"–View ["+$v.name+"]"+[char]13+[char]10

      $sc = $v.Script()

      $se = $sc.GetEnumerator()

            while ($se.MoveNext())

            {

            $s =$s+$se.Current+[char]13+[char]10 

            }

            #Скриптуем триггеры текущего представления

            foreach ($tr in $v.Triggers)

            {

            $s =$s+"–Trigger ["+$tr.name+"]"+[char]13+[char]10

            $sc = $tr.Script()

            $se = $sc.GetEnumerator()

                  while ($se.MoveNext())

                  {

                  $s =$s+$se.Current+[char]13+[char]10 

                  }

            }

 

            #Скриптуем индексы текущего представления

            foreach ($in in $v.Indexes)

            {

            $s =$s+"–Index ["+$in.name+"]"+[char]13+[char]10

            $sc = $in.Script()

            $se = $sc.GetEnumerator()

                  while ($se.MoveNext())

                  {

                  $s =$s+$se.Current+[char]13+[char]10 

                  }

            }

 

      }

}

 

#Скриптуем процедуры

if ($ObjectType -eq "SP")

{

      foreach ($sp in $db.StoredProcedures)

      {

      $s =$s+"–StoredProcedure ["+$sp.name+"]"+[char]13+[char]10

      $sc = $sp.Script()

      $se = $sc.GetEnumerator()

            while ($se.MoveNext())

            {

            $s =$s+$se.Current+[char]13+[char]10 

            }

      }

}

 

#Скриптуем пользовательские функции

if ($ObjectType -eq "UDF")

{

      foreach ($udf in $db.UserDefinedFunctions)

      {

      $s =$s+"–UserDefinedFunction ["+$udf.name+"]"+[char]13+[char]10

      $sc = $udf.Script()

      $se = $sc.GetEnumerator()

            while ($se.MoveNext())

            {

            $s =$s+$se.Current+[char]13+[char]10 

            }

      }

}

 

#Скриптуем схемы

if ($ObjectType -eq "SCH")

{

      foreach ($sch in $db.Schemas)

      {

      $s =$s+"–Schema ["+$sch.name+"]"+[char]13+[char]10

      $sc = $sch.Script()

      $se = $sc.GetEnumerator()

            while ($se.MoveNext())

            {

            $s =$s+$se.Current+[char]13+[char]10 

            }

      }

}

 

#Скриптуем пользователей

if ($ObjectType -eq "US")

{

      foreach ($us in $db.Users)

      {

      $s =$s+"–User ["+$us.name+"]"+[char]13+[char]10

      $sc = $us.Script()

      $se = $sc.GetEnumerator()

            while ($se.MoveNext())

            {

            $s =$s+$se.Current+[char]13+[char]10 

            }

      }

}

 

#Скриптуем DDL-триггера

if ($ObjectType -eq "TR")

{

      foreach ($tr in $db.Triggers)

      {

      $s =$s+"–Trigger ["+$tr.name+"]"+[char]13+[char]10

      $sc = $tr.Script()

      $se = $sc.GetEnumerator()

            while ($se.MoveNext())

            {

            $s =$s+$se.Current+[char]13+[char]10 

            }

      }

}

 

#Скриптуем сборки

if ($ObjectType -eq "ASM")

{

      foreach ($asm in $db.Assemblies)

      {

      $s =$s+"–Assemblie ["+$asm.name+"]"+[char]13+[char]10

      $sc = $asm.Script()

      $se = $sc.GetEnumerator()

            while ($se.MoveNext())

            {

            $s =$s+$se.Current+[char]13+[char]10 

            }

      }

}

 

#Скриптуем расширенные процедуры

if ($ObjectType -eq "XP")

{

      foreach ($xp in $db.ExtendedStoredProcedures)

      {

      $s =$s+"–ExtendedStoredProcedure ["+$xp.name+"]"+[char]13+[char]10

      $sc = $xp.Script()

      $se = $sc.GetEnumerator()

            while ($se.MoveNext())

            {

            $s =$s+$se.Current+[char]13+[char]10 

            }

      }

}

 

#Выводим результат в файл
$s | Out-File $OutFileName

 

 

ScriptObjects.ps1 (скачать)

Tags: , , ,

PowerShell | SQL Server

Добавить комментарий

  Country flag

biuquote
  • Комментарий
  • Предпросмотр
Loading