SQL Server 2019 から SQL Server 2017 へのDB移行

週末に SQL Server 2019(MSSQL2019) から SQL Server 2017(MSSQL2017) へDBを移行する作業をしました。

SQL Server 2017 のインスタンスSQL Server 2019 の mdf ファイルをアッタッチすることができないため、
データの移行は「SQL Server インポートおよびエクスポート ウィザード」を使って行いました。

<背景>
MSSQL2019の試用版を使っていたが、以前購入したMSSQL2017のランセンスがあったため
MSSQL2019の試用期間180日を前にMSSQL2017へ移行することにしました。

<メモ>
新しいバージョンのMSSQLのmdfファイルをより下のバージョンのインスタンスにアタッチしようとするとエラーとなり、アタッチできません。

f:id:togashimanabu:20220228184248p:plain
エラーメッセージ
SQL Serverログを見るとこんなメッセージが表示されています。
ダウングレードのインスタンスにはアタッチできないようです。

メッセージ
The database 'testdb' cannot be opened because it is version 904. This server supports version 869 and earlier. A downgrade path is not supported.

<作業の流れ>

  1. MSSQL2019のスクリプトの生成ツールでMSSQL2017で流すスクリプトを生成します。(DBを右クリックー>タスクー>スクリプトの生成)

f:id:togashimanabu:20220228184703p:plain

  1. MSSQL2017をインストールします。
  2. このとき同一OS上にMSSQL2019の既定のインスタンスがあったためMSSQL2017は名前付きインスタンスで作成しました。
  3. MSSQL2017でスクリプトを実行します。
  4. このときMSSQL2019のみでしか使えないオプションのところではエラーとなります。その場合は必要に応じてスクリプトを修正します。
  5. SQL Server インポートおよびエクスポート ウィザード」でデータをMSSQL2019からMSSQL2017へ移行します。

f:id:togashimanabu:20220228184831p:plain

(おわり)

MySQLのLOAD DATA INFILEコマンドでは ucs2、utf16、utf16le、または utf32 文字セットを使用するデータファイルはロードできません。

 
注記

ucs2utf16utf16le、または utf32 文字セットを使用するデータファイルはロードできません。

 

PowerShell 文字列操作

拡張子csvのファイルをマージする。
特定の文字を含む行を削除する。
バーティカルバーをタブに置換する。
カンマをタブに置換する。
を一回でやる方法

> Get-Content *.csv | Select-String -NotMatch "^SourceSystem", "^FileName", "^PreparedDatetime", "^TotalRecords", "^ConsumerId" | % { $_ -replace "\|", "`t" } | % { $_ -replace ";", "`t" } > merge.tsv

SQL Server でファイルをテーブルに取り込むには(bcpコマンド)

REM <Usage>
>bcp <テーブル名> in <ファイル名> -c -S <サーバ名> -U <ユーザ名> -P <パスワード>

REM <Sample>
REM ファイルはタブ区切り
bcp DB01.dbo.TBL01 in sample.tsv -c -S server01 -U user01 -P password01

PowerShell のスクリプトを実行するには

PowerShell管理者として実行後、ExecutionPolicy を RemoteSigned にするとスクリプトを実行できます。

> Get-Content .\sample.ps1 #★サンプルコード
$strMsg = "Hello World !"
write-host $strMsg

> .\sample.ps1 #★エラーになります
File C:\Users\user01\Desktop\log\sample.ps1 cannot be loaded because the execution of scripts is disabled on this syste
m. Please see "get-help about_signing" for more details.
At line:1 char:13
+ .\sample.ps1 <<<<
    + CategoryInfo          : NotSpecified: (:) [], PSSecurityException
    + FullyQualifiedErrorId : RuntimeException

> Get-ExecutionPolicy
Restricted
> Set-ExecutionPolicy RemoteSigned #★ポリシーを "RemoteSigned" にします

Execution Policy Change
The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose
you to the security risks described in the about_Execution_Policies help topic. Do you want to change the execution
policy?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): Yes
PS C:\Users\user01\Desktop\log> Get-ExecutionPolicy
RemoteSigned
> .\sample.ps1
Hello World ! #★実行できました
>

参考サイト
http://www.atmarkit.co.jp/fwin2k/win2ktips/1023ps1sec/ps1sec.html

SQL Server Management Studio から SQL Server に接続するには

■既定のインスタンスの場合(インスタンスIDが MSSQLSERVER の場合)

  • Windows Firewall の 受信 TCP 1433 の接続を許可します。

■名前付きインスタンの場合

  • Windows Firewall の 受信 UDP 1434 の接続を許可します。
  • Windows Firewall の 受信 プログラム Sqlserver.exe の接続を許可します。
  • サービス SQL Server Browser を起動します。

SQL Server のメモリサイズの反映タイミング -->すぐ
サーバーのプロパティで設定したメモリサイズは即座に反映されます。
インスタンスの再起動は不要です。

SQL Server のメモリ空間について
SQL Server は、起動時に、最小サーバーメモリのサイズを即座に確保するわけではありません。
クライアントの負荷が増加し、一度、メモリの使用量が最小サーバーメモリ値を超えると、それ以降、最小サーバーメモリのサイズを常に確保し続けます。

RDB は、基幹系処理を行うために理論化されたものであり、分析処理には向かない

SQL Server 2008 R2 自習書シリーズ
SQL Server 2008 R2 Analysis Services 入門
http://download.microsoft.com/download/D/1/D/D1D2FBEC-8D48-4325-B51C-FD63CC3DE835/SQL08_R2_SelfLearning12_SSAS.docx

P10 に書いてありました。

OLAP ~多次元分析~
Analysis Services とExcel のピボット テーブル機能のように、いろいろな角度からのデータ分析(多次元分析)が行える製品は「OLAP ツール」と呼ばれ、この中でも Analysis Services のようにサーバー機能を持った製品は「OLAP サーバー」と呼ばれます。OLAP(オーラップ)は、Online Analytical Processing の略で、直訳すると「オンライン分析処理」です。
OLAP は、RDB(リレーショナル データベース)の生みの親でもある E.F.Codd 博士が生み出した言葉で、博士はRDB は、基幹系処理を行うために理論化されたものであり、分析処理には向かない」と言って、分析処理に関する OLAP を提唱しました。このとき、データを多次元的に解析し、視覚化するためのルールとして「OLAP に関する 12 のルール」を作成しました。こうした背景から、(ルールをすべて満たしているかどうかは別として)多次元でのデータ分析が行えるツールのことを、「OLAP ツール」と呼ぶようになりました。