SQL-DMO は、COM なので主に VBScript から使われていましたが、SMO は、SQL-DMO に取って代わる Framework ベースの API です。もともとが巨大なクラスの集合体なので、バックアップにしか通常使う事がありませんが、SQLServer の運用を行うなら知っておく必要はあります
バックアップは SQL からも出来、そちらのほうが簡単です。SQL-DMO や SMO は、テープによるデータのバックアップを想定しており、デバイスを作成しても実体は作成されません。ディスクファイルでも、追加でバックアップされます
バックアップ後の内容の確認は以下のようにして行います
RESTORE FILELISTONLY FROM DISK = 'C:\tmp\backup.dmp'
参照としては以下の5つを追加します
1) Microsoft.SqlServer.ConnectionInfo
2) Microsoft.SqlServer.Management.Sdk.Sfc
3) Microsoft.SqlServer.Smo
4) Microsoft.SqlServer.SmoExtended
5) Microsoft.SqlServer.SqlEnum
SMO ライブラリのダウンロードは nuget.exe が簡単です。
nuget.exe をダウンロードして専用のフォルダで実行します。
nuget install Microsoft.SqlServer.SqlManagementObjects -Version 140.17283.0
※ バージョン選択の参考ページ
nuget.exe と同じ場所に、Microsoft.SqlServer.SqlManagementObjects.140.17283.0 フォルダが作成されるので、lib\net40 内から dll を参照して使用します。
▼ C#
// サーバー
Server srv;
// インスタンス
srv = new Server();
// サーバーインスタンスの情報
srv.ConnectionContext.AutoDisconnectMode = AutoDisconnectMode.NoAutoDisconnect;
srv.ConnectionContext.LoginSecure = false;
srv.ConnectionContext.Login = "sa";
srv.ConnectionContext.Password = "パスワード";
// 接続
srv.ConnectionContext.Connect();
// バージョンの表示
Console.WriteLine(srv.Information.Version);
// デバイスオブジェクト
BackupDevice backup_dev = new BackupDevice();
// サーバーと関係付ける
backup_dev.Parent = srv;
// 論理名を設定
backup_dev.Name = "BACKUP";
// 装置のタイプ
backup_dev.BackupDeviceType = BackupDeviceType.Disk;
// 実際の場所( バックアップするまで作成されません )
backup_dev.PhysicalLocation = @"c:\tmp\backup.dmp";
// 処理サンプルとして一旦削除して作成する
if (srv.BackupDevices["BACKUP"].State == SqlSmoState.Existing)
{
srv.BackupDevices["BACKUP"].Drop();
backup_dev.Create();
}
// バックアップオブジェクト
Backup dbBackup = new Backup();
// デフォルトは Database
dbBackup.Action = BackupActionType.Database;
dbBackup.Database = "lightbox";
dbBackup.Devices.AddDevice("BACKUP", DeviceType.LogicalDevice);
dbBackup.BackupSetName = "BACKUP_lightbox";
// バックアップ開始
dbBackup.SqlBackup(srv);
// 接続解除
srv.ConnectionContext.Disconnect();
Console.WriteLine("バックアップが終了しました");
▼ VB.net
' サーバー
Dim srv As Server
' インスタンス
srv = New Server()
' サーバーインスタンスの情報
srv.ConnectionContext.AutoDisconnectMode = AutoDisconnectMode.NoAutoDisconnect
srv.ConnectionContext.LoginSecure = False
srv.ConnectionContext.Login = "sa"
srv.ConnectionContext.Password = "パスワード"
' 接続
srv.ConnectionContext.Connect()
' バージョンの表示
Console.WriteLine(srv.Information.Version)
' デバイスオブジェクト
Dim backup_dev As BackupDevice = New BackupDevice()
' サーバーと関係付ける
backup_dev.Parent = srv
' 論理名を設定
backup_dev.Name = "BACKUP"
' 装置のタイプ
backup_dev.BackupDeviceType = BackupDeviceType.Disk
' 実際の場所( バックアップするまで作成されません )
backup_dev.PhysicalLocation = "c:\tmp\backup.dmp"
Try
' 既に存在する場合はそのまま使う
backup_dev.Create()
Catch ex As Exception
End Try
' バックアップオブジェクト
Dim dbBackup As Backup = New Backup()
' デフォルトは Database
dbBackup.Action = BackupActionType.Database
dbBackup.Database = "lightbox"
dbBackup.Devices.AddDevice("BACKUP", DeviceType.LogicalDevice)
dbBackup.BackupSetName = "BACKUP_lightbox"
' バックアップ開始
dbBackup.SqlBackup(srv)
' 接続解除
srv.ConnectionContext.Disconnect()
Console.WriteLine("バックアップが終了しました")
関連する記事
SQLServer : SQLでバックアップ
SQL-DMO による VBScriptによるバックアップ
関連するMicrosoft のリンク
SMO クラス ライブラリ
SQL-DMO のインストール( SQLServer2005_BC.msi )