DMOを利用したSQLServerのテーブルバックアップ
方法はテーブル名を指定して、そのテーブルのデータをテキスト形式のタブ区切りファイルへエクスポートします。私の場合は、VBを利用して画面(フォーム)のないEXE形式のプログラムを作成しました。それで、テーブルごとに日付のファイル名のバックアップファイルを作成して、1か月分バックアップするようにしました。自動実行は、Windowsのタスクに登録して毎日実行するようにしました。
リストアする場合は、日付(ファイル名)を選択して、一度そのテーブルのデータを削除します。それから、そのファイルからテーブルへデータをインポートします。
バックアップのプログラムは以下のように作りました。このブログで公開出来るように修正しました。リストアの時は、ExportDataがImportDataになります。
'定数の設定
Const SQLDMODataFile_TabDelimitedChar = 2
Const SQLDMOBCPDataFile_Char = 1
'バックアップファイルのディレクトリ
Const sBackupDir = "c:\backup\db\"
Sub Main()
On Error GoTo GotoErr
'バックアップルーチン
Dim oServer As Object 'SQLServerオブジェクト
Dim oDatabase As Object 'データベースオブジェクト
Dim oBCP As Object 'BCPオブジェクト
Dim nRows As Long '処理されたRow数
Set oServer = CreateObject("SQLDMO.SQLServer")
Set oBCP = CreateObject("SQLDMO.BulkCopy")
oServer.EnableBcp = True
'SQL-Serverへ接続
oServer.Connect "MySrv", "sa", "MyPassword"
'データベースへ接続
Set oDatabase = oServer.Databases("MyDB")
'テーブルごとのファイル名の作成
Dim sDayTable1 As String
Dim sDayTable2 As String
sDayTable1 = "emp" & Day(Date) & ".txt" '担当者テーブル
sDayTable2 = "dept" & Day(Date) & ".txt" '部署テーブル
'タブ区切りのテキストファイルへの設定等
oBCP.ColumnDelimiter = vbTab
oBCP.DataFileType = SQLDMODataFile_TabDelimitedChar
oBCP.ImportRowsPerBatch = 1000
oBCP.MaximumErrorsBeforeAbort = 1
oBCP.RowDelimiter = vbCrLf
oBCP.ServerBCPDataFileType = SQLDMOBCPDataFile_Char
oBCP.UseExistingConnection = True
'テーブル1
oBCP.DataFilePath = sBackupDir & sDayTable1
nRows = oDatabase.Tables("t担当者").ExportData(oBCP)
'テーブル2
oBCP.DataFilePath = sBackupDir & sDayTable2
nRows = oDatabase.Tables("t部署").ExportData(oBCP)
Exit Sub
GotoErr:
'エラーログ出力などのエラー処理が必要
End Sub
プロジェクトファイルを以下に置きました。プログラム全体はこちらを参照してください。
プロジェクトファイル一式
動作確認しましたが、エラー処理等、不十分ですので、動作は保証できません。このプログラムを利用しての不具合、不利益には一切の責任を負いかねます。ご了承ください。
参考サイト
データベースのためのスクリプト
一括インポートのバッチの管理
バックアップとリストア
Windowsプログラミング関連記事
Posted by nishida at 22:39:57


