ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文
SQLServer の 同一マシン上における DB コピー
日時: 2007/06/04 17:44
名前: lightbox



strTargetFile1、strTargetFile2 は環境によって変化します。
strTarget にコピー先の DB の名前を指定します。

拡張子:
Set Cn = CreateObject( "ADODB.Connection" )

strServer = "sv5963\msde2000"
strDatabase = "MyDB"
strUser = "sa"
strPass = "password"

strTarget = "MyDB2"
strTargetFile1 = "C:\mssql2000\MSSQL$MSDE2000\Data\" & strTarget & ".mdf"
strTargetFile2 = "C:\mssql2000\MSSQL$MSDE2000\Data\" & strTarget & "_log.LDF"

' ********************************************************
' バックアップファイル
' ********************************************************
strPath = "C:\Temp\backup_001.dat"

ConnectionString = _
	"Provider=SQLOLEDB;" & _
	"Data Source=" & strServer & ";" & _
	"Initial Catalog=" & strDatabase & ";" & _
	"User ID=" & strUser & ";" & _
	"Password=" & strPass & ";"

Cn.ConnectionTimeout = 0
Cn.CommandTimeout = 0

Cn.Open ConnectionString

' ********************************************************
' バックアップファイル削除
' ********************************************************
Query = "master.dbo.xp_cmdshell 'del " & strPath & "'"
on error resume next
Cn.Execute Query
on error goto 0

' ********************************************************
' バックアップ( 外部ファイル直接指定 )
' ********************************************************
Query = "BACKUP DATABASE " & strDatabase & " TO DISK = '" & strPath & "'"
Cn.Execute Query

' ********************************************************
' バックアップファイル内の論理ファイル名を使用して、
' 新しい DB を自動的に作成させる為にいったん削除
' ********************************************************
Query = "DROP DATABASE " & strTarget
on error resume next
Cn.Execute Query
on error goto 0

' ********************************************************
' リストア
' ********************************************************
Query = "RESTORE DATABASE " & strTarget
Query = Query & " FROM DISK = '" & strPath & "'"
Query = Query & " WITH"
Query = Query & " MOVE '" & strDatabase & "' TO '" & strTargetFile1 & "',"
Query = Query & " MOVE '" & strDatabase & "_log' TO '" & strTargetFile2 & "'"
Cn.Execute Query

' ********************************************************
' DB単位で、論理ファイル名が物理ファイルに存在する。
' RESTORE 時に、前の DB の論理ファイル名が引き継がれる
' ので変更
' ********************************************************
Query = "ALTER DATABASE " & strTarget
Query = Query & " MODIFY FILE(NAME = " & strDatabase & ", NEWNAME = " & strTarget & ")"
Cn.Execute Query

Query = "ALTER DATABASE " & strTarget
Query = Query & " MODIFY FILE(NAME = " & strDatabase & "_log, NEWNAME = " & strTarget & "_log)"
Cn.Execute Query

' ********************************************************
' バックアップファイル削除
' ********************************************************
Query = "master.dbo.xp_cmdshell 'del " & strPath & "'"
on error resume next
Cn.Execute Query
on error goto 0

Cn.Close

MsgBox("処理が終了しました   ")
メンテナンス


日時: 2007/06/04 17:44
名前: lightbox