(.Net,SQL)プログラムからSQL Serverデータベースのバックアップを行う
.Net アプリケーションから SQL Server 2005 のバックアップを行う方法です。
最初は .Net からバッチかDOSコマンドで sqlcmd を使おうと思ってたのですが、よく考えたら ADO.Net 使ってやった方が簡単だということに気付いたんで、その方法でやることにしました。
SQL ServerでのバックアップSQL文は BACKUP DATABASE(ログの場合は BACKUP LOG)で可能なようです。
手で書くのも面倒だったので、ManagementStudioのバックアップである程度指定して、スクリプトボタンからSQL文をゲットしました。
BACKUP コマンドの詳細はMSDN:BACKUP (Transact-SQL)にあります。
あと、TechScrawlさんのバックアップコマンドやプログラミング徹底解説→SQL Server バックアップ コマンドで簡単に BACKUP コマンドの説明がわかりやすくされてます。
ADO.Netを使って接続するわけですが、接続文字列にはデータベースの指定(Initial Catalog)はいらないみたいです。
まあ、特定のデータベースの中に対してクエリを発行するわけじゃないので当然と言えば当然ですが。。
で、試しに作ってみたコードがこんな感じです。
'コネクションオブジェクト作成Dim conn As New SqlConnection()
'接続文字列に Initial Catalog(データベース) は指定しなくてもよい
conn.ConnectionString = "Persist Security Info=False;User ID=sa;Password=testtest;Server=(local)\SQLEXPRESS"
conn.Open()
'コマンドオブジェクト生成
Dim cmd As New SqlCommand()
cmd.Connection = conn
'バックアップするクエリ
cmd.CommandText = "BACKUP DATABASE [test] TO DISK = N'D:\test.bak' WITH NOFORMAT, INIT, NAME = N'test-完全 データベース バックアップ', SKIP, NOREWIND, NOUNLOAD, STATS = 10"
'バックアップクエリ実行
cmd.ExecuteNonQuery()
conn.Close()
今回は接続型(TableAdapterを使わない)でコネクションを張り、クエリを発行してます。
つまり、コマンドが違うだけで、方法は通常の接続型と同じでいけるようです。