sql >> データベース >  >> RDS >> Sqlserver

SQLServerマスターデータベースの復元

    はじめに

    マスターデータベースには、現在のインスタンスと他のすべてのデータベースの両方の構造/構成のレコードが含まれています。 sp_configureを実行する場合 、マスターデータベースにデータを書き込んでいます。また、インスタンスを監視するために必要なほとんどの動的管理ビューも含まれています。

    マスターデータベースの重要性は非常に重要です。まず、他のすべてのデータベースを開くために必要な情報があり、最初に開く必要があります。次に、現在のインスタンスのすべてのインスタンスレベルのプリンシパルが含まれます。

    マスターデータベースを毎日バックアップすることが重要です。同様に重要なのは、マスターデータベースをインスタンスに復元する方法を知ることです。最も頻繁なケースは、データベースのクラッシュ、またはソースインスタンスを使用しなくなったときにマスターデータベースを別のインスタンスに復元する必要があることです。この記事では、マスターデータベースを別のインスタンスに移動する特定のケースについて説明します。

    アプリケーションサービスのステータスを確認する

    マスターデータベースを別のインスタンスに復元するには、シングルユーザーモードでインスタンスを起動する必要があります。したがって、アクティブなセッションがインスタンスを制御する唯一のセッションであることを確認することが不可欠です。

    そのためには、特にそのようなアプリケーションが特権アクセスを持っている場合は、すべてのアプリケーションサービスがインスタンスにアクセスするのを停止します。アプリケーションがすでにセッションを確立しているときにシングルユーザーモードでインスタンスを起動すると、問題が発生する可能性があります。この場合、SQL ServerManagementStudioからインタラクティブセッションを続行することはできません。

    SQLサーバーサービスを停止する

    SQLServer構成マネージャーを使用してすべてのSQLServerサービスを停止します。各サービスを右クリックして[停止]を選択します。 コンテキストメニューから(図2を参照)。

    シングルユーザーモードでSQLサーバーを起動する

    マスターデータベースを復元するには、シングルユーザーモードのSQLServerインスタンスが必要です。次の手順を実行します。

    1. CMDプロンプトを開く
    2. C:\ Program Files \ Microsoft SQL Server \ MSSQL.1 \ MSSQL\Binnに移動します
    3. sqlservr –mを発行するか、ネットでMSSQLServer / c / m/T3604を起動します

    または

    手順2はビンを参照していることに注意してください ディレクトリの場所。インストールによって異なる場合があります。

    必要なディレクトリを見つけるには、SQLServer構成マネージャーのSQLServerサービスプロパティの[サービス]タブを確認します(図4を参照)。

    マスターの復元

    あるインスタンスから別のインスタンスにマスターを復元すると、システムカタログに、インスタンス名やtempdbの場所などの値を含む新しいプリンシパルと新しい値が取得されます。

    マスターを復元する前に、移行元サーバーで定義されているように、移行先サーバーのパスがTempDBファイルで使用可能であることを確認してください。そうしないと、復元の完了後に新しいインスタンスが正常に起動しません。

    1. SQL ServerManagementStudioを開きます
    2. SQL ServerManagementStudioでリスト1のコードを実行します
    -- Listing 1: Restore Master Database
    restore database master from disk ='<full_path_of_backup>' with replace;

    注意: 復元が完了すると、インスタンスはシャットダウンします。

    サービスアカウントの変更

    復元の完了後にSQLServerを起動するには、次の手順を実行します。

    1. SQLServerサービスアカウントを現在ログオンしているアカウントに変更します。
    2. [スタート]を開く>[すべてのプログラム]>[MicrosoftSQLServer2005]>[構成ツール]>[SQLServer構成マネージャー]
    3. 各サービスを右クリックして、プロパティを選択します
    4. ログオン タブで、目的のアカウント名と対応するパスワードを入力します。

    サーバー名

    マスターデータベースには、それが配置されているインスタンスの名前が含まれています。このシナリオで復元されたバックアップは別のインスタンスからのものであるため、リスト2に示すように、ストアドプロシージャを使用してサーバー名を更新する必要があります。

    -- Listing 2: Change the Instance Name for a SQL Server Instance
    -- Check the current server name
    
    select @@SERVERNAME
    
    -- Change the server name as seen by the database
    
    sp_dropserver 'EUK-POSTSVR-01'--Present Server name goes here
    go 
    sp_addserver 'EUK-POSTBKP-01','local'--New Server name goes here 
    go

    名前の変更を有効にするには、SQLServer構成マネージャーからSQLServerを再起動します。

    サービスログイン

    マスターデータベースには、ソースインスタンスに関連付けられているすべてのログインも記録されます。新しいインスタンスでは、不要なログインをクリーンアップする必要があります。その後、ローカルのデフォルトのSQLServerグループを現在のインスタンスに追加できます。

    -- Listing 3: Remove Unnecessary Logins
    drop login [EUK-POSTSVR-01\SQLServer2005MSSQLUser$EUK-POSTSVR-01$MSSQLSERVER]
    drop login [EUK-POSTSVR-01\SQLServer2005MSFTEUser$EUK-POSTSVR-01$MSSQLSERVER]
    drop login [EUK-POSTSVR-01\SQLServer2005SQLAgentUser$EUK-POSTSVR-01$MSSQLSERVER]
    
    -- Listing 4: Add local default SQL Server Groups
    create login [EUK-POSTBKP-01\SQLServer2005MSSQLUser$EUK-POSTBKP-02$MSSQLSERVER] from windows;
    create login [EUK-POSTBKP-01\SQLServer2005SQLAgentUser$EUK-POSTBKP-02$MSSQLSERVER] from windows;
    create login [EUK-POSTBKP-01\SQLServer2005MSFTEUser$EUK-POSTBKP-02$MSSQLSERVER] from windows;

    NB: サーバーとエージェントのサービスアカウントがOSレベルでそれぞれのグループに属していること、およびこれらのOSグループに必要なアクセス許可があることを確認してください。表1に、SQLServerサービスアカウントのアクセス許可を示します。

    S / No 特権 必須
    1。 サービスとしてログオン SQLServerサービスアカウントSQLエージェントサービスアカウント統合サービスアカウント
    2。 オペレーティングシステムの一部として機能する SQLServerサービスアカウントSQLエージェントサービスアカウント
    3 バッチジョブとしてログオン SQLServerサービスアカウントSQLエージェントサービスアカウント
    4。 プロセスレベルのトークンを置き換えます SQLServerサービスアカウントSQLエージェントサービスアカウント
    5。 トラバースチェックをバイパスする SQLServerサービスアカウントSQLエージェントサービスアカウント統合サービスアカウント
    6。 プロセスのメモリクォータを調整する SQLServerサービスアカウントSQLエージェントサービスアカウント
    7。 グローバルオブジェクトを作成する 統合サービスアカウント
    8。 メモリ内のページをロックする(AWE) SQLServerサービスアカウント

    データベースレベルでのハウスキーピングが完了したら、通常のサービスアカウントに戻ります。 SQLServer構成マネージャーからインスタンスをもう一度再起動します。

    この時点で、アプリケーションサービスを開始できます。

    結論

    上記のシナリオの実行中に、エラーが発生する可能性があります。以下に、これらのエラーに関する情報を示します。

    問題のトラブルシューティングを行う場合は、SysInternalのProcMonなどのツールを使用できます。これらは、SQL Serverの起動時にファイル権限の問題を切り分けます(図7を参照)。

    S / N エラー 原因/解決策
    1。 SQLServerAgentを開始できませんでした(理由:サーバー「(ローカル)」に接続できません。SQLServerAgentを開始できません)。 すべてのローカルサービスアカウントのログインを作成する
    2。 サーバーローカル接続プロバイダーが[\\。\pipe\ SQLLocal\MSSQLSERVER]をリッスンできませんでした。エラー:0x5 TDSSNIClientの初期化がエラー0x5、ステータスコード0x40で失敗しました。 TDSSNIClientの初期化は、エラー0x5、ステータスコード0x1で失敗しました。 SQLServerはFRunCMスレッドを生成できませんでした。考えられる関連する問題については、SQLServerエラーログとWindowsイベントログを確認してください。ネットワークライブラリの内部エラーのため、ネットワークライブラリを起動できませんでした。原因を特定するには、エラーログでこの直前のエラーを確認してください。 SQL Serverは以前に別のサービスアカウントで起動され、強制的に終了されました。これは、マスターデータベースの復元中に発生します。これを修正するには、手順3で使用したサービスアカウントを使用してインスタンスを起動してから、サービスを正常に停止します。その後、通常のサービスアカウントから始めることができます。
    3。 SQLServerAgentを開始できませんでした(理由:新しいセッションの作成中にエラーが発生しました)。 SQLエージェントアカウントに適切な権限を付与する

    参考資料

    マスターデータベース


    1. 列のすべての行を新しい値に更新します

    2. OBJECTPROPERTY()を使用して、SQLServerでテーブルにDEFAULT制約があるかどうかを確認します。

    3. SQL Server(T-SQL)でデータベースの照合を設定する方法

    4. SQLDeveloper4.0がリリースされました