ワンタッチでデータベースrubyスクリプトをリストア


生産環境は1時間ごとにデータベースを自動的にバックアップし、圧縮して会社のftpサーバーにアップロードし、ftpサーバーは社内ネットワークに配置される.そのため、私は生成環境データベースを使用して開発するたびにftpサーバ共有フォルダにアクセスし、最新のバックアップファイルを見つけ、7 zで開き、必要なデータベースバックアップファイルを見つけ、SQL Serverエンタープライズマネージャを使用してデータベースを復元する必要があります.
何十回もこのような操作を経験した後、私はプログラムを書いて私を助けることにしました.最初にbatスクリプトを使用するつもりでしたが、最新の作成ファイルを検索する際に困難に遭遇し、c#を使用してProcessを使用します.Startメソッドはパラメータ値にスペースがあり、二重引用符で包む必要がある)困難に直面し、最後にrubyで実現し、思考、実践の過程全体に1日半かかりました.
コードは次のとおりです.

#     saas0   , 10              ,      saas0       ,       
#               c:/~one-click-resotre-temp
require 'find'
require 'FileUtils'

#       
`net use \\\\192.168.99.10\\ipc$ "  " /user:"administrator"`

#          
latestFile = nil
Find.find('\\\\192.168.99.10\\d$\\FTP') {|file| latestFile = file if file =~ /all_.*\.7z/ && (latestFile.nil? || File.mtime(latestFile) < File.mtime(file))}

#          
tempDir = "c:/~one-click-resotre-temp"
Dir.mkdir(tempDir) unless File.exists?(tempDir)

#        
system "7z x \"#{latestFile}\" -o#{tempDir}"

#   sql server  
`net stop mssqlserver`
`net start mssqlserver`

#   saas0   
dbname = "saas0"
bakfile = Dir.glob(File.join(tempDir, 'saas*.bak')).first.to_s
system "isql /localhost /U sa /P /Q \"restore database #{dbname} from disk = '#{bakfile}' WITH MOVE '#{dbname}_Data' TO 'D:\\Data\\SQL Server\\#{dbname}_Data.mdf',MOVE '#{dbname}_Log' TO 'D:\\Data\\SQL Server\\#{dbname}_Log.ldf', REPLACE\""
#     
system "isql /localhost /U sa /P /Q \"update #{dbname}..MEM_User set HashedPassword = null\""

#        
FileUtils.rmtree(tempDir) if File.exists?(tempDir)
puts "\r
done."

上記コードをone-click-resotreとして保存する.rb、batをもう一つ書いて終わります.

ruby one-click-resotre.rb
pause