SQLの窓

2018年10月09日


C# : VB.net : SQLExpress(SQLServer) : SQL-DMO と同等の SMO によるバックアップ

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 )



【SQLExpressの最新記事】
posted by lightbox at 2018-10-09 15:40 | SQLExpress | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり