SQL Server DeveloperエディションをUbuntu16.04にインストールしてみたので、その時のメモ。
参考URL: 「UbuntuにSQL Serverをインストールし、データベースを作成」
前提条件
- Ubuntu16.04
- メモリ2G以上
インストール
GPGキーのインポート
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
リポジトリ追加
sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/16.04/mssql-server-2017.list)"
「 Linux に SQL Server 用のリポジトリを構成する 」 も参照
インストール
sudo apt-get update
sudo apt-get install mssql-server
セットアップ
mssql-conf
コマンドを実行する。
エディションは、Developerか、Expressを選択。途中で、パスワードの設定や、ライセンス等に関する確認がある。
sudo /opt/mssql/bin/mssql-conf setup
Choose an edition of SQL Server:
1) Evaluation (free, no production use rights, 180-day limit)
2) Developer (free, no production use rights)
3) Express (free)
4) Web (PAID)
5) Standard (PAID)
6) Enterprise (PAID)
7) Enterprise Core (PAID)
8) I bought a license through a retail sales channel and have a product key to enter.
:
:
Setup has completed successfully. SQL Server is now starting.
$
サービスの確認
systemctl status
コマンドで、サービスの状態を確認する。
systemctl status mssql-server
コマンドラインツールのインストール
sqlcmd
とbcp
のインストール
GPGキーのインポート
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
リポジトリの追加
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list
インストール
sudo apt-get update
sudo apt-get install mssql-tools unixodbc-dev
コマンドラインツール実行パスの追加
ログインセッション用(必要に応じて)
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
Ubuntuでは、
~/.bashrc
はあるけれど~/.bash-profile
がないので、上記設定をすると~/.bashrc
が読まれないようになるので注意。~/.bash-profile
に~/.bashrc
を読み込むよう指定する記述も必要。
非ログインセッション用
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
ローカル接続のテスト
sqlcmd -S localhost -U SA -P '<YourPassword>'
1>
プロンプト(1>
)が出力されればOK。抜けるには、exit
。
照合順序の変更
このままだと、Sqlserverのインスタンスの照合順序(SQL_Latin1_General_CP1_CI_AS
)と、データベースの照合順序(Japanese_CI_AS
)が違っているため、いろいろ不具合が起きる。そのため、次のようにして照合順序を変更する。
$ sudo /opt/mssql/bin/mssql-conf set-collation
Enter the collation: Japanese_CI_AS
Configuring SQL Server...
すでに、データベースをバックアップファイルから復元してしまっている場合は、一旦デタッチしないと上記コマンドはエラーになる。
デタッチするには、
EXEC sp_detach_db 'TestDB', 'true';
GO
アタッチするには、
EXEC sp_attach_db TestDB, '/mnt/data/sqldata/TestDB.mdf', '/mnt/data/sqldata/TestDB_Log.ldf';
GO
既存のDBを移行
Windows環境のSQL Serverで稼働しているデータベースを、Linuxに移行させる。
大まかな流れ
- SSMSでbakファイル作成
- WinSCPなどで、ファイルを転送
- Linux上でバックアップファイルを復元
- クエリ発行して、復元を検証
すでに、BAKファイル作成済みで、Linuxにも転送済みとします。
バックアップファイルの復元
sqlcmd
を起動
sqlcmd -S localhost -U SA
SQLを発行
RESTORE DATABASE YourDB
FROM DISK = '/var/opt/mssql/backup/YourDB.bak'
WITH MOVE 'YourDB' TO '/var/opt/mssql/data/YourDB.mdf',
MOVE 'YourDB_Log' TO '/var/opt/mssql/data/YourDB_Log.ldf'
GO
次のようなエラーを吐いた場合
File 'YourDB_Product' cannot be restored to 'Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf'. Use WITH MOVE to identify a valid location for the file.
Msg 5133, Level 16, State 1, Server servername, Line 1
Directory lookup for the file "Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf" failed with the operating system error 2(The system cannot find the file specified.).
この場合は、データベースにはセカンダリファイルが含まれています。これらのファイルが、RESTORE DATABASE
の MOVE
句で指定されていな場合は、復元プロシージャは、元のサーバーと同じファイルパスに作成しようとします。
バックアップに含まれる、全てのファイルを一覧表示させるには:
RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/backup/YourDB.bak'
次のような結果を得ます。
LogicalName PhysicalName ..............
----------------------------------------------------------------------------------------------------------------------
YourDB Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB.mdf ..............
YourDB_Product Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf ..............
YourDB_Customer Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Customer.ndf ..............
YourDB_log Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Log.ldf ..............
この結果から、次のように
を実行します。RESTORE DATABASE
RESTORE DATABASE YourDB
FROM DISK = '/var/opt/mssql/backup/YourDB.bak'
WITH MOVE 'YourDB' TO '/var/opt/mssql/data/YourDB.mdf',
MOVE 'YourDB_Product' TO '/var/opt/mssql/data/YourDB_Product.ndf',
MOVE 'YourDB_Customer' TO '/var/opt/mssql/data/YourDB_Customer.ndf',
MOVE 'YourDB_Log' TO '/var/opt/mssql/data/YourDB_Log.ldf'
GO
復元の確認
SELECT Name FROM sys.Databases
GO
0件のコメント