mssql: 複数のデータベースをrestore

import os,sys

def sql_detach(db):
  sql = """\
USE [master]
GO
IF  EXISTS (SELECT name FROM sys.databases WHERE name = N'MIGDB')
begin
  EXEC master.dbo.sp_detach_db @dbname = N'MIGDB', @keepfulltextindexfile=N'true'
end
"""
  return sql.replace('MIGDB',db)

def sql_restore(db):
  sql = """\
RESTORE DATABASE [MIGDB] 
FROM  DISK = N'c:\site\sites\sitedata\move\MIGDB' 
WITH  FILE = 1,  
MOVE N'MIGDB_Data' TO N'c:\site\sites\sitedata\MIGDB_Data.MDF',  
MOVE N'MIGDB_Log' TO N'c:\site\sites\sitedata\MIGDB_Log.LDF', 
NOUNLOAD,  STATS = 10
GO
use MIGDB
go
sp_change_users_login 'Auto_Fix',mailchirashi
go
"""
  return sql.replace('MIGDB',db)


def main():
  path ='C:\Site\sites\sitedata\Move'
  dbpath ='C:\Site\sites\sitedata'
  dbbackup = 'C:\Site\sites\sitedata\Backup'
  cmd=open('mig.cmd','w')
  cmd.write('@echo off\n\n')
  for db in os.listdir(path):
    fname = db+'.sql'
    f=open(fname,'w')
    f.write(sql_restore(db) )
    f.close()
    fname2 = 'detach.' + fname 
    f=open('detach.' + fname ,'w')
    f.write(sql_detach(db))
    f.close()
    cmd.write('echo %s\n' % (db))
    cmd.write('osql -E -i %s -o log.%s.txt\n' % (fname2,fname2))
    cmd.write('move /Y %s\%s* %s\n' % (dbpath,db,dbbackup) )
    cmd.write('osql -E -i %s -o log.%s.txt\n' % (fname,fname))
  cmd.close() 


if __name__ == '__main__':
  main()

 

mig.cmd を実行。

カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中