SQL Serverで改行コードを発見・置換

SELECT * FROM table
WHERE name LIKE '%' + CHAR(13) + '%';
SELECT * FROM table 
WHERE name LIKE '%' + CHAR(13) + CHAR(10) + '%';
SELECT * FROM table 
WHERE name LIKE '%' + NCHAR(13) + NCHAR(10) + '%'; 
UPDATE table SET 
name = REPLACE(name, CHAR(13), ' ');
UPDATE table SET 
name = REPLACE(name, CHAR(13) + CHAR(10), ' ');
UPDATE table SET 
name = REPLACE(name, NCHAR(13) + NCHAR(10), ' '); 

Docker内のSQL ServerにRESTORE DATABASE

dockerコマンドで、SQL Server のデータファイルを確認する。

docker exec -it docker-id /bin/bash
ls /var/opt/mssql/data/

docker内にバックアップファイルをコピーする。

docker cp xxx docker-id:/etc/xxx

バックアップファイルの確認

restore headeronly from DISK = '/etc/xxx';
restore filelistonly from DISK ='/etc/xxx' with file = 1;

上で出てきた要素に対してMOVEオプションを使って
SQL Server の、”異なる環境に’RESTORE DATABASE

restore database xxx from DISK ='/etc/xxx'
with move 'aaa' to '/var/opt/mssql/data/aaa.mdf',
move 'aaa_log' to '/var/opt/mssql/data/aaa.ldf';

SQL Serverでバックアップから復元後にログインできない

一つの原因として、
復元したデータベースのユーザーと、稼働しているサーバーのログインが、うまくマッピングできなくなることがあります。

これはSSMSのGUIからは対処不可で、ログインからユーザーマッピングしても「ユーザー、グループ、またはロールは現在のデータベースに既に存在します。」ということになります。

クエリを作って対応します。

Use [データベース名]
ALTER USER データベースのユーザー WITH LOGIN = ログインのユーザー

SQL Server ユーザー設定 コマンド

/* ログイン一覧 */
SELECT * FROM syslogins;

/* SQL Server 認証を使用する ログインの作成 */
CREATE LOGIN <login name> WITH PASSWORD = '<password>';

/* ユーザー一覧 */
USE <DB name>;
SELECT * FROM sysusers;

/* ログインに基づくユーザーの作成 */
USE <DB name>;
CREATE USER <login name>;

/* 固定サーバーロールにログインを追加する */
ALTER SERVER ROLE <role name> ADD MEMBER <login name> ;

/* 固定データベースロールにユーザーを追加する */
ALTER ROLE <role name> ADD MEMBER <login name> ;


Docker for Mac & SQL Server 2017 インストール

  1. docker for Macをダウンロード
    www.docker.com
  2. docker for Macをインストール
  3. docker for Macを起動し、メモリ割り当て変更。メモリは 4GBにする。
  4. SQL Server on Linux のイメージを Docker Hub からダウンロード
    docker pull microsoft/mssql-server-linux
    

    ダウンロード元のサイト

  5. コンテナを起動
    docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<*password*>' \
    -p 1433:1433 --name mssql \
    -d microsoft/mssql-server-linux:latest
    
  6. 動作確認
    sudo docker ps
    

    見えないときは ps -a で停止しているコンテナを表示

    docker ps -a
    

    [STATUS] 列が [Up]:正常、[STATUS] 列が [Exited]:エラー

  7. エラー時はログを確認
    docker logs XXXXXXXX
    
  8. ストップと再起動
    docker stop mssql
    docker rm mssql
    
  9. 手動でコンテナをスタート
    docker start **コンテナID**