コメント |
strTargetFile1、strTargetFile2 は環境によって変化します。
strTarget にコピー先の DB の名前を指定します。
@DIV
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("処理が終了しました ")
@END
|