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ファイルをより下のバージョンのインスタンスにアタッチしようとするとエラーとなり、アタッチできません。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.
<作業の流れ>
- MSSQL2017をインストールします。
- このとき同一OS上にMSSQL2019の既定のインスタンスがあったためMSSQL2017は名前付きインスタンスで作成しました。
- MSSQL2017でスクリプトを実行します。
- このときMSSQL2019のみでしか使えないオプションのところではエラーとなります。その場合は必要に応じてスクリプトを修正します。
- 「SQL Server インポートおよびエクスポート ウィザード」でデータをMSSQL2019からMSSQL2017へ移行します。
(おわり)
PowersShell で ファイル名を一括変換する方法
> Get-ChildItem | Rename-Item -NewName { $_.Name -replace 'userInterests','userInterest'}
Powershell でcsvファイルの文字コードをUTF16からUTF8に変換する方法
> Get-ChildItem -Recurse *.csv | ForEach-Object {Get-Content $_ | Set-Content -Encoding UTF8 ($_.FullName -replace 'csv','csv_')}
MySQLのLOAD DATA INFILEコマンドでは ucs2、utf16、utf16le、または utf32 文字セットを使用するデータファイルはロードできません。
注記
ucs2
、utf16
、utf16le
、またはutf32
文字セットを使用するデータファイルはロードできません。
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 の 受信 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 ツール」と呼ぶようになりました。
画像を張り付けるテストです。
画像を張り付けてみます。
こんな感じになりました。
ソースコードを貼り付けるテスト
SELECT * FROM Sample ;