前回の記事では、SQLServer照合の基本について説明しました。最初にその記事を読むことをお勧めします(まだ読んでいない場合)。ここでは、既存のSQLServerインスタンスのサーバーレベルの照合またはSQLServerインスタンスレベルの照合を変更する方法を説明します。
SQL Serverのサーバーレベルの照合とは何ですか?
照合は、データの並べ替え規則、大文字と小文字、およびアクセントのプロパティを決定します。これはデータベース内のデータに影響を与える可能性のある重要な設定であるため、頻繁に変更することはお勧めしません。
照合はSQLServerの4つのレイヤーで構成できます:
- サーバーレベル
- データベースレベル
- 列レベル
- 表現レベル
注: SQL Server Express Editionを使用している場合、照合を SQL_Latin1_General_CP1_CI_ASから変更することはできません。 。
既存のSQLServerインスタンスのサーバーレベルの照合を変更する
このセクションでは、サーバーレベルの照合を変更するための前提条件とプロセスについて説明します。新しい照合名でシステムデータベースを再構築することで変更されます。
前提条件
以下のポイントに従って、本番インスタンスの照合変更を実行します。
- すべてのデータベースの完全バックアップを実行します。可能であれば、この手順を開始する前にVMスナップショットを作成してください。
- ユーザーデータベースまたはテーブル、ログイン、ユーザー、ジョブなどのデータベースオブジェクトを作成するためのすべてのスクリプトがあることを確認してください。照合の変更後にすべてのデータベースオブジェクトを作成します。
- bcpを使用してすべてのデータをエクスポートします またはサードパーティのツール。
- サーバーレベルの構成値と、インスタンスに適用された修正プログラムを含むSQLServerインスタンスのビルド番号を記録します。
- すべてのシステムデータベースファイルの場所を記録します。これは、システムデータベースファイルを別の場所に移動した場合に必要になることがあります。
システムの詳細をキャプチャするのに役立ついくつかのスクリプトを見てみましょう。これらの出力をメモ帳またはExcelファイルにコピーするか、スクリーンショットを撮り、後で参照できるように保存します。
以下のコマンドを実行して、すべてのサーバーレベルの構成を取得します。
--Get all server level configurations
SELECT * FROM sys.configurations;
以下のクエリを実行して、SQLServerビルドバージョンをキャプチャします。
--Fetch SQL Server build version
SELECT @@VERSION
GO
SELECT
SERVERPROPERTY('ProductVersion ') AS ProductVersion,
SERVERPROPERTY('ProductLevel') AS ProductLevel,
SERVERPROPERTY('ResourceVersion') AS ResourceVersion,
同様に、以下のT-SQLステートメントを実行して、システムデータベースファイルの場所を取得する必要があります。
SELECT name, physical_name AS Database_file_location
FROM sys.master_files
WHERE database_id IN (DB_ID('master'), DB_ID('model'), DB_ID('msdb'), DB_ID('tempdb'));
次に、以下のT-SQLスクリプトを実行して、SQLServerインスタンスとすべてのデータベースの照合情報を一度に収集します。
--Get existing collation of SQL Server Instance and all databases
SELECT name, collation_name
FROM sys.databases
GO
--Get existing server level collation
SELECT SERVERPROPERTY('Collation') As [Instance Level Collation]
このスクリプトの詳細については、以前の記事をお読みください。
次に、スクリプトの作成を生成します 将来の参照と検証のためにSQLServerインスタンスで作成されたすべてのログインとジョブ。また、以下のスクリプトを実行して、SQLServerインスタンスからすべてのログインとジョブのリストを取得できます。
--Get list of logins
Use master
Go
Select * from syslogins
--Get list of Jobs
USE msdb
Go
Select * from sysjobs
インスタンスの再構築
前提条件のセクションに記載されている手順を完了したら、次の手順は照合の変更のプロセスを開始することです。バックアップを作成するか、ユーザーデータベースからすべてのデータをエクスポートしたため、SQLServerインスタンスからすべてのユーザーデータベースを切り離す必要があります。エクスポートされたデータを新しいデータベースにインポートする場合は、それらを削除することもできます。照合の変更後にそれらを添付できるように、データベースの1つの安全なコピーを保持するためにそれらを切り離すことをお勧めします。
サーバーレベルの照合を変更するプロセスでは、システムデータベースを再構築する必要があります。システムデータベースを再構築するときに、新しい照合名を渡す必要があります。システムデータベース操作を再構築するには、SQLServerのインストールセットアップが必要です。システムデータベースの再構築操作を開始して、サーバーレベルの照合を変更しましょう。
照合を変更するターゲットシステムにログインします。 WindowsコマンドプロンプトまたはPowerShellターミナルウィンドウを開きます。 PowerShellを開き、 cmdと入力します 次の図に示すように、Windowsコマンドプロンプトユーティリティを使用します。 SQLServerインストールセットアップファイルを配置したディレクトリの場所を変更します。
--Open Windows Command prompt
Cmd
--Change directory where you have placed SQL Server setup files
Cd <Full path>
--My location was C:\Manvendra\SQL2019\Developer_ENU so i executed below cmd
cd C:\Manvendra\SQL2019\Developer_ENU
これで、SQLServerインストールファイルが保存されている場所にいます。
次に、以下のコマンドを実行して、すべてのシステムデータベースを再構築します。さらに、このSQL Serverインスタンスとすべてのシステムデータベースで変更するには、新しい照合パラメーターを指定して以下のコマンドを実行する必要があります。
--Rebuild system databases with new collation. Replace all values in <> with your desired value.
Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=<InstanceName>
/SQLSYSADMINACCOUNTS=<accounts> / SAPWD= <StrongPassword>
/SQLCOLLATION=<CollationName>
--I replaced all values and executed the below command with collation SQL_Latin1_General_CP1_CS_AS
Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS=WIN-AFNHJ3L1D6E\Administrator /[email protected] /SQLCOLLATION=SQL_Latin1_General_CP1_CS_AS
以下のスクリーンショットでその出力を見ることができます。画面はそのままにして、作業ディレクトリが表示されるまで画面を続行する必要があります。
ここに、プロンプトが表示されます。これは、システムデータベースがこのSQLServerインスタンスの新しい照合で再構築されたことを意味します。確認しましょう。
SQL Serverが実行されており、そのサービスが起動していることを確認してください。次に、SQL ServerManagementStudioまたはsqlcmdを起動します。 SQLServerインスタンスに接続します。ご覧のとおり、上記の手順で再構築されたSQLServerインスタンスに正常に接続しました。下の画像にはシステムデータベースのみが表示されています。
以下のT-SQLステートメントを実行して、データベースレベルとサーバーレベルの照合の詳細を収集します。この手順では、サーバーとシステムデータベースの照合の変更を検証します。
--Get collation of the SQL Server Instance and all databases
SELECT name, collation_name
FROM sys.databases
GO
--Get an existing server-level collation
SELECT SERVERPROPERTY('Collation') As [Instance Level Collation]
すべてのシステムデータベースのサーバーレベルおよびデータベースレベルの照合では、 SQL_Latin1_General_CP1_CS_ASを使用します。 下のスクリーンショットで。この手順では、このSQLServerインスタンスで新しい照合が構成されたことを検証します。
サーバーレベルの照合が新しい照合に変更されました。次のステップは、システムデータベースを再構築する前に切り離されたすべてのユーザーデータベースを接続することです。アタッチまたは復元される既存のデータベースはすべて、バックアップまたはデタッチされたときと同じ照合を行うことを忘れないでください。サーバーレベルの照合を変更した後、手動で変更する必要があります。ただし、新しく作成されたすべてのデータベースには、デフォルトで新しい照合があります。
下の画像に示すように、ユーザーデータベースを添付しました。
データベースが接続されると、これらのデータベースの照合を再度確認できます。これらのデータベースの照合を変更したい場合は、以前の記事を読んでこれを行うことができます。
結論
データベースからデータをエクスポートした場合は、データベースオブジェクトを作成するための前提条件の間に生成されたすべてのスクリプトを実行できます。次に、エクスポートされたデータをこれらの新しく作成されたデータベースおよびオブジェクトにインポートできます。前提条件のセクションで取得した詳細に従って、サーバーレベルの構成を検証および変更できます。
システムデータベースを再構築するとデフォルトの場所に作成されるため、システムデータベースファイルを特定の場所に保持する場合は、システムデータベースファイルを移動することもできます。以前に生成されたスクリプトを使用して、スクリプトを実行してログインとジョブを作成することもできます。システムデータベースを復元しないでください。新しく構成された照合が、そのデータベースの古い照合に変更されます。
改善できるように、この記事を共有してフィードバックをお寄せください。