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

 

コマンドラインツールのインストール

sqlcmdbcpのインストール

 

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 DATABASEMOVE 句で指定されていな場合は、復元プロシージャは、元のサーバーと同じファイルパスに作成しようとします。

バックアップに含まれる、全てのファイルを一覧表示させるには:

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

 


 

 
カテゴリー: sqlserverubuntu

zaturendo

中小企業社内SE。

0件のコメント

コメントを残す

アバタープレースホルダー

メールアドレスが公開されることはありません。 が付いている欄は必須項目です