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の最新記事】
- SQLServer の BCP で INT IDENTITY 列に csv からリストアする
- VBScript : ADO : ODBC接続 : SQLExpress(SQLServer) 接続と通常処理( 更新は SQL で行う )
- Microsoft SQLExpress : sa に空のパスワードを設定する方法
- SQLExpress バッチ DB バックアップ
- 各RDBMS の正規表現の実装状況 : MySQL, SQLServer, PostgreSQL, Oracle
- SQLServer の OPENDATASOURCE 関数による Excel の参照( Microsoft.Jet.OLEDB.4.0 と Microsoft.ACE.OLEDB.12.0 )
- SQLServer(SQLExpress) : SQL学習用販売管理データとインポート用スクリプト
- SQLExpress 2005( および 2008 ) の接続設定
- SQLExpress 内に存在する表の CREATE 文を取得する
- ファイルから直接データベースを別のPCでリストアする / SQLExpress
- 目的のDBが使用している物理ファイルのパスの確認 / SQLExpress
- ピンポイントですが、SQLServer 2008 は SQLServer 7.0 のデータをロード出来ないのです
- SQLExpress2005 で副問い合わせを含む VIEW が異常終了しました
- VBS : SQLServerよりExcel へエクスポート(Excel製品は必要ありません)
- SQLServer のドキュメント
- VBS : SQLExpress(SQLServer) テーブルの正しい CREATE 文を取得する
- PHP : SQLExpress(SQLserver) : COM による接続処理
- PHP : PDO : SQLExpress(SQLServer)の読み込みと同時更新
- ODBC 用 JDBC : 動的接続 / SQLExpress(SQLServer) / 読み込みながらの行更新
- VBScript : ADO : 純正接続 : SQLExpress(SQLServer) 接続と通常処理