Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 5
Cập nhật lúc 11h29' ngày 17/03/2008

Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 1
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 2
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 3
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 4

The MAK

Phần I và phần II của loạt bài này chúng tôi đã hướng dẫn cho các bạn về cài đặt PowerShell và các cmdlet SMO cũng như WMI đơn giản. Trong phần III chúng tôi đã giới thiệu cách lập kịch bản PowerShell và kết nối SQL Server. Trong phần IV, chúng tôi giới thiệu về cách sử dụng kịch bản PowerShell để lặp trong toàn nội dung của file và kết nối đến các máy chủ khác.

Trong phần V này, chúng tôi sẽ tiếp tục giới thiệu đến các bạn cách sử dụng PowerShell và kịch bản PowerShell trong việc tạo cơ sở dữ liệu và một số vấn đề khác

Phương pháp 1

Chúng ta thừa nhận rằng sẽ tạo một cơ sở dữ liệu ‘MyDatabase’, trên máy chủ ‘HOME’ với các tính năng mặc định.

Thực thi lệnh dưới đây:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") 

$Server = new-object ('Microsoft.SqlServer.Management.Smo.Server') 'HOME'
$DataBase = new-object ('Microsoft.SqlServer.Management.Smo.Database') 
            ($Server, "MyDataBase")
$DataBaseDataFile = new-object ('Microsoft.SqlServer.Management.Smo.DataFile') 
            ($FileGrowth, "MyDatabase_Data")
$DataBaseDataFile.FileName = "D:\MyDatabase_Data.mdf"
$DataBaseLogFile = new-object ('Microsoft.SqlServer.Management.Smo.LogFile') 
            ($DataBase, "MyDatabase_Log")
$DataBaseLogFile.FileName = "D:\NewDB_Log.ldf"
$DataBase.Create()


Hình 1.0

Lệnh ở trên đã tạo một cơ sở dữ liệu có tên ‘MyDatabase’ trên máy chủ ‘HOME’, bằng cách sử dụng các giá trị và đường dẫn mặc định.


Hình 1.1


Hình 1.2

Phương pháp 2

Giả dụ rằng chúng ta phải tạp một cơ sở dữ liệu mới có tên ‘MyDatabase1’ trên máy chủ ‘HOME’. Hãy giả dụ rằng file dữ liệu sẽ là 25MB với file Data và file bản ghi nằm trên ổ D.

Thực thi lệnh dưới đây trong PowerShell:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO")

$Server = new-object ('Microsoft.SqlServer.Management.Smo.Server') 'HOME'
$DataBase = new-object ('Microsoft.SqlServer.Management.Smo.Database') 
            ($Server, "MyDataBase1")
$FileGrowth = new-object ('Microsoft.SqlServer.Management.Smo.FileGroup') 
            ($DataBase, "PRIMARY")
$DataBase.FileGroups.Add($FileGrowth)

$DataBaseDataFile = new-object ('Microsoft.SqlServer.Management.Smo.DataFile') 
            ($FileGrowth, "MyDatabas1e_Data")
$FileGrowth.Files.Add($DataBaseDataFile)

$DataBaseDataFile.FileName = "D:\MyDatabase1_Data.mdf"
$DataBaseDataFile.Size = [double](25.0 * 1024.0)
$DataBaseDataFile.GrowthType = "Percent"
$DataBaseDataFile.Growth = 25.0
$DataBaseDataFile.MaxSize = [double](100.0 * 1024.0)


$DataBaseLogFile = new-object ('Microsoft.SqlServer.Management.Smo.LogFile') ($DataBase, "MyDatabase1_Log")

$DataBaseLogFile.FileName = "D:\MyDatabase1_Log.ldf"
$DataBase.Create()

Cmdlet ở trên tạo một cơ sở dữ liệu ‘Mydatabase1’ trên máy chủ ‘HOME’ với file dữ liệu 25MB, cả file Data và file bản ghi Log đều được tạo trên ổ D (hình 1.3 và 1.4)


Hình 1.3


Hình 1.4

Phương pháp 3

Tạo một kịch bản cho phép chúng ta có thể tạo bất kỳ cơ sở dữ liệu nào trên bất kỳ máy chủ nào cũng như với bất kỳ kích cỡ và đường dẫn nào mà chúng ta thích.

Tạo file dưới đây như thể hiện bên dưới và lưu nó với tên file createdb.ps1. (hình 1.5)

param (
[string] $ServerName,
[string] $DatabaseName,
[Double] $DataSize ,
[string] $DataPath,
[string] $LogPath
)
echo "Creating Database....." echo "----------------------" echo "Input..." echo "Server Name : $ServerName" echo "Database Name : $DatabaseName" echo "Data Size : $DataSize" echo "Data File Path : $DataPath" echo "Log File Path : $LogPath"
$LogicalDataFile=$DatabaseName + "_Data" $LogicalLogFIle=$DatabaseName + "_Log" $datapath1=$DataPath + "\" + $DatabaseName + "_Data.mdf" $Logpath1=$LogPath + "\" + $DatabaseName + "_Log.ldf" $DataSize1=[double]($DataSize * 1024.0)
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO")
$Server = new-object ('Microsoft.SqlServer.Management.Smo.Server') $ServerName $DataBase = new-object ('Microsoft.SqlServer.Management.Smo.Database') ($Server, $DatabaseName) $FileGrowth = new-object ('Microsoft.SqlServer.Management.Smo.FileGroup') ($DataBase, "PRIMARY") $DataBase.FileGroups.Add($FileGrowth)






$DataBaseDataFile = new-object ('Microsoft.SqlServer.Management.Smo.DataFile') ($FileGrowth, $LogicalDataFile) $FileGrowth.Files.Add($DataBaseDataFile)

$DataBaseDataFile.FileName = $datapath1
$DataBaseDataFile.Size = [double]( $DataSize1 ) $DataBaseDataFile.GrowthType = "Percent" $DataBaseDataFile.Growth = 25.0 $DataBaseDataFile.MaxSize = [double](100.0 * 1024.0)

$DataBaseLogFile = new-object ('Microsoft.SqlServer.Management.Smo.LogFile') ($DataBase, $LogicalLogFIle) $DataBaseLogFile.FileName = $Logpath1
$DataBase.Create() echo "Output...." echo "Logical name of Data is $LogicalDataFile" echo "Logical name of Log is $LogicalLogFile" echo "Data File Path is $datapath1" echo "Log file path is $LogPath1" echo "Size of the file is $DataSize1"


Hình 1.5

Lúc này thực thi file kịch bản PowerShell như thể hiện trong hình bên dưới (hình 1.6)

./createdb.ps1 HOME MyDatabase2 30 D: D:

Lưu ý:

  • HOME là tên máy chủ
  • MyDatabase2 là tên cơ sở dữ liệu
  • 30 là kích thước dữ liệu tính theo MB
  • D: là vị trí của đường dẫn dữ liệu
  • D: là vị trí của đường dẫn bản ghi

Đầu ra

PS C:\ps> ./createdb.ps1 HOME MyDatabase2 30 D: D:
Creating Database.....
----------------------
Input...
Server Name : HOME
Database Name : MyDatabase2
Data Size  :  30
Data File Path :  D:
Log File Path : D:
GAC Version Location --- ------- -------- True v2.0.50727 C:\WINDOWS\assembly\GAC_MSIL\Microsoft.SqlServer.SMO\9.0.242.0__89845dcd8080cc91\Microsoft.Sql. Output.... Logical name of Data is MyDatabase2_Data Logical name of Log is MyDatabase2_Log Data File Path is D:\MyDatabase2_Data.mdf Log file path is D:\MyDatabase2_Log.ldf Size of the file is 30720


Hình 1.6

Đoạn mã dưới đây tạo đầu ra mong muốn.

Mã lệnh

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO")

Đầu ra

GAC    Version        Location
---    -------        --------
True   v2.0.50727     C:\WINDOWS\assembly\GAC_MSIL\Microsoft.SqlServer.SMO\9.0.242.0__89845dcd8080cc91\Microsoft.Sql...

Điều này có thể tránh bằng cách chuyển hướng đầu ra thành NULL.

param (
[string] $ServerName,
[string] $DatabaseName,
[Double] $DataSize ,
[string] $DataPath,
[string] $LogPath
)
echo "Creating Database....." echo "----------------------" echo "Input..." echo "Server Name : $ServerName" echo "Database Name : $DatabaseName" echo "Data Size : $DataSize" echo "Data File Path : $DataPath" echo "Log File Path : $LogPath"
$LogicalDataFile=$DatabaseName + "_Data" $LogicalLogFIle=$DatabaseName + "_Log" $datapath1=$DataPath + "\" + $DatabaseName + "_Data.mdf" $Logpath1=$LogPath + "\" + $DatabaseName + "_Log.ldf" $DataSize1=[double]($DataSize * 1024.0)
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | out-null
$Server = new-object ('Microsoft.SqlServer.Management.Smo.Server') $ServerName $DataBase = new-object ('Microsoft.SqlServer.Management.Smo.Database') ($Server, $DatabaseName) $FileGrowth = new-object ('Microsoft.SqlServer.Management.Smo.FileGroup') ($DataBase, "PRIMARY") $DataBase.FileGroups.Add($FileGrowth)

$DataBaseDataFile = new-object ('Microsoft.SqlServer.Management.Smo.DataFile') ($FileGrowth, $LogicalDataFile) $FileGrowth.Files.Add($DataBaseDataFile)

$DataBaseDataFile.FileName = $datapath1
$DataBaseDataFile.Size = [double]( $DataSize1 ) $DataBaseDataFile.GrowthType = "Percent" $DataBaseDataFile.Growth = 25.0 $DataBaseDataFile.MaxSize = [double](100.0 * 1024.0)

$DataBaseLogFile = new-object ('Microsoft.SqlServer.Management.Smo.LogFile') ($DataBase, $LogicalLogFIle) $DataBaseLogFile.FileName = $Logpath1
$DataBase.Create() echo "Output...." echo "Logical name of Data is $LogicalDataFile" echo "Logical name of Log is $LogicalLogFile" echo "Data File Path is $datapath1" echo "Log file path is $LogPath1" echo "Size of the file is $DataSize1"

Thực thi file kịch bản PowerShell như hình bên dưới (Hình 1.7)

./createdb.ps1 HOME MyDatabase2 30 D: D:


Hình 1.7

Đầu ra

PS C:\ps> ./createdb.ps1 HOME MyDatabase2 30 D: D:
Creating Database.....
----------------------
Input...
Server Name : HOME
Database Name : MyDatabase2
Data Size : 30
Data File Path : D:
Log File Path : D:
Output....
Logical name of Data is MyDatabase2_Data
Logical name of Log is MyDatabase2_Log
Data File Path is D:\MyDatabase2_Data.mdf
Log file path is D:\MyDatabase2_Log.ldf
Size of the file is 30720

Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 6
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 7
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 8
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 9
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 10
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 11

Văn Linh (Theo Databasejournal)
Đánh giá(?):
WinRAR 3.71
Phát hành: RARLAB
Download:302114
Dung lượng: 1.15 MB
Tìm thêm:winrar, rarlab, phần mềm nén, giải nén
 
Foxit Reader 2.3 Build 3309
Phát hành: Foxit Software
Download:34521
Dung lượng: 2.57 MB
Tìm thêm:foxit software, pdf, adobe acrobat reader, adobe, multimedia, miễn phí
 
WinZip 11.2
Phát hành: WinZip Computing
Download:26711
Dung lượng: 13.03 MB
Tìm thêm:winzip computing, trình nén, giải nén
 
WinRAR 3.80 beta 5
Phát hành: RARLAB
Download:26078
Dung lượng: 1.18 MB
Tìm thêm:winrar, rarlab, phần mềm nén, giải nén
 
Auslogics Disk Defrag 1.4.16
Phát hành: AusLogics
Download:13989
Dung lượng: 1.36 MB
Tìm thêm:auslogics, defrag, chống phân mảnh, ổ cứng, hard disk
Những chuyện kỳ bí