前提
- Windows 10 Proの環境上で掲題の操作を行います。
- サーバ上のユーザは
VIEW DEFINITION
という権限を持っている必要があります。固定ロールでいうと、db_securityadmin
というロールに含まれます。- see: データベース レベルのロール
前準備
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
※暗号化された接続を行わない場合は/SourceEncryptConnection
へFalse
を与える
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
※暗号化された接続を行わない場合は/TargetEncryptConnection
へFalse
を与える
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:VerifyExtraction
へFalse
を与える
なお、得られたdacpacファイルをクリックすると展開できるはずです。各スキーマのDDLがSQL文として得られます。