LoginSignup
0
1

More than 5 years have passed since last update.

sqlpackageを用いたリモートのSQL Serverのバックアップ・リストア・スキーマ取り出し

Last updated at Posted at 2018-04-24

前提

  • Windows 10 Proの環境上で掲題の操作を行います。
  • サーバ上のユーザはVIEW DEFINITIONという権限を持っている必要があります。固定ロールでいうと、db_securityadminというロールに含まれます。

前準備

SQL Server Management Studio(SSMS)を導入する必要があります。(もう少し軽量なツールキットはないのか...)

2018/07/11追記

いつの間にかsqlpackageのみが配布されています。中身もインストール先もSSMSと違いはあまりないようなので、こちらを使うとよいです。

導入した後、"C:\Program Files (x86)\Microsoft SQL Server\140\DAC\bin\sqlpackage"が配置されるので、これを使います。これはPATHが通ってないので注意。

sqlpackageコマンドのドキュメントは https://msdn.microsoft.com/library/hh550080.aspx をお読みください。

環境変数

また、コピペしやすさを考慮して以下のような変数を定義し、使うようにします。適宜置き換えてください。

set DB_HOST=sqlserver-host.example.local,1433
set DB_NAME=database-name
set DB_USER=sa
set DB_PASSWORD=****

※DB_HOSTの1433はポート番号です。適宜置き換えてください。

各種操作

Export: スキーマ情報とデータを取り出す

要するに「エクスポート」や「バックアップ」と呼ばれる作業です。

/Action:Exportを使って、bacpacファイルという独自フォーマットのファイルを得ます。

"C:\Program Files (x86)\Microsoft SQL Server\140\DAC\bin\sqlpackage" ^
  /Action:Export ^
  /SourceServerName:%DB_HOST% ^
  /SourceDatabaseName:%DB_NAME% ^
  /SourceUser:%DB_USER% ^
  /SourcePassword:%DB_PASSWORD% ^
  /SourceEncryptConnection:True ^
  /TargetFile:dump.bacpac

※暗号化された接続を行わない場合は/SourceEncryptConnectionFalseを与える

Import: 作成したbacpacファイルを取り込む

要するに「インポート」とか「リストア」と呼ぶ作業です。

/Action:Importを使って、bacpacファイルからデータ投入を行います。

"C:\Program Files (x86)\Microsoft SQL Server\140\DAC\bin\sqlpackage" ^
  /Action:Import ^
  /TargetServerName:%DB_HOST% ^
  /TargetDatabaseName:%DB_NAME% ^
  /TargetUser:%DB_USER% ^
  /TargetPassword:%DB_PASSWORD% ^
  /TargetEncryptConnection:True ^
  /SourceFile:dump.bacpac

※暗号化された接続を行わない場合は/TargetEncryptConnectionFalseを与える

Extract: スキーマを取り出す

定義は欲しいけどデータはいらないよ、というとき。

/Action:Extractを使って、dacpacファイルを得ます。(bacpacファイルではないです。)

"C:\Program Files (x86)\Microsoft SQL Server\140\DAC\bin\sqlpackage" ^
  /Action:Extract ^
  /SourceServerName:%DB_HOST% ^
  /SourceDatabaseName:%DB_NAME% ^
  /SourceUser:%DB_USER% ^
  /SourcePassword:%DB_PASSWORD% ^
  /p:VerifyExtraction=True ^
  /TargetFile:dump.dacpac

※暗号化された接続を行わない場合は/p:VerifyExtractionFalseを与える

なお、得られたdacpacファイルをクリックすると展開できるはずです。各スキーマのDDLがSQL文として得られます。

0
1
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
0
1