1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SQLServerのDB復元バッチ作った

Last updated at Posted at 2021-01-19

がいよう

業務でたくさんやるから、バッチ化したんだけど俺しか使わないから、ここに書くわ。。。
僕のこと見てくんないっ!ひどい!😠

やっていること

基本的にコマンドを叩いているだけだからそんなエッセンスはないんだけど、一応、ポイントがある

  • リストア前にオフラインしている
  • デタッチはコマンドでやるとうまくいかない😤データベースが使用中なんだってさ
これだけは注意!!

対象のデータベース用の.bakを置いていないと危険だよっ
空のデータベースをぶっこんで空っぽのデータベースになるから!
一応これを流す前にバックアップをしよう!!自己責任だぞ🤧
バックアップバッチも作ってんだけど、めんどくさいから他の人のサイトを見てねーー

Windowsバッチとかで書いとけばできるお

@set /P SERVER_NAME="input the database server name>>>>"
@set /P LOGIN_USER="input a login user>>>>"
@set /P PASSWERD="input a passwerd>>>>"
@set /P RESTORE_BAK="input the path .bak file for restore"
@set LOG_PATH=.\restore.log

@echo ---------------------
@echo 接続先:%SERVER_PATH%
@echo ログイン:%LOGIN_USER%
@echo パスワード:%PASSWERD%
@echo bakファイル元:%RESTORE_BAK%
@echo ---------------------
pause

@echo make a database offline...
sqlcmd -S %SERVER_PATH% -U %LOGIN_USER% -P %PASSWERD% -Q "alter database %SERVER_NAME% set offline with rollback immediate" >> %LOG_PATH%

@echo restore a database...
sqlcmd -S %SERVER_PATH% -U %LOGIN_USER% -P %PASSWERD% -Q "restore database %SERVER_NAME% from disk='%RESTORE_BAK%'" >> %LOG_PATH%

pause

排他アクセス制限

  • 排他アクセスでデータベースを復元できねえことがある
  • そういう場合は、オフラインかデタッチをする→復元
  • デタッチコマンドが上手くいかないからオフラインしているわけ

参考

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?