none
Microsoft SQL Server 2019 データベースエンジンに接続できなくなりました。 RRS feed

  • 質問

  • お世話になります。

    下記のトラブルが発生しており、復旧方法をご教示いただきたく存じます。


    【トラブルの内容】
    Microsoft SQL Server Management Studio 18を起動し、
    データベースエンジンに接続しようとすると下記のエラーが発生し接続できなくなりました。
    (「EC2AMAZ-3RU5FBR」はコンピューター名です。)

    (画像が添付できないので、分かりにくくて申し訳ありませんがテキストをコピーいたしました)

    TITLE: Connect to Server
    ------------------------------

    Cannot connect to EC2AMAZ-3RU5FBR.

    ------------------------------
    ADDITIONAL INFORMATION:

    A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server) (Microsoft SQL Server, Error: 2)

    For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=2&LinkId=20476

    ------------------------------

    The system cannot find the file specified

    ------------------------------



    【発生するまでの経緯】
    ・「Microsoft SQL Server Management Studio 18」を起動し、データベースエンジンに接続。

    ・「New Query」ボタンを押下し、以下クエリーを実施。
    保存先が「C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA」と確認。

    SELECT database_id,name,physical_name 
    FROM sys.master_files
    WHERE database_id=2


    ・新たに以下クエリーを実施し、保存場所を変更しました。
    ALTER DATABASE tempdb
    MODIFY FILE (name=tempdev,filename="G:\tempDb\Data\tempdb.mdf")
    GO

    ALTER DATABASE tempdb
    MODIFY FILE (name=templog,filename="G:\tempDb\Log\templog.ldf")
    GO



    ・端末を再起動し、同じくSSMSを起動。データベースエンジンに接続しようとするも冒頭に記載したエラーが発生します。
    接続すらできない為に先ほどの手順で設定を修正することもできなくなりました。


    【質問内容】
    データ保管場所を他の場所(Gドライブ)に設定した状態で、
    データベースエンジンに接続するためにはどのようにしたらよろしいでしょうか?



    長文で恐縮ですが、よろしくお願いいたします。

    2020年9月1日 5:59

回答

  • kd0901さん、こんにちは。フォーラムオペレーターのKumoです。
    ご返信いただきありがとうございます。

    シングル ユーザー モードで自動的に最小構成でSQLサーバーのインスタンスを起動します。

    以下のステップに従ってください。
    まず、SQLサーバー サービスをストップし、-f パラメーターを削除します。
    次、コマンド プロンプト(右クリック、「管理者として実行」を選択)を開き、次のコマンドラインを実行します。
    1、Net Start MSSQLServer -f /mSQLCMD
    2、sqlcmd -S . -E
    3、ALTER DATABASE tempdb
    MODIFY FILE (name=tempdev,filename="G:\tempDb\Data\tempdb.mdf")
    GO

    ALTER DATABASE tempdb
    MODIFY FILE (name=templog,filename="G:\tempDb\Log\templog.ldf")
    GO

    Exit

    4、Net Stop MSSQLServer

    最後に、SQLサーバー構成マネージャーで正常にSQLサーバーを起動します。


    どうぞよろしくお願いいたします。 

    MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    • 回答としてマーク kd0901 2020年9月4日 6:04
    2020年9月3日 6:42
    モデレータ

すべての返信

  • SQL Serverのインスタンス起動に失敗してるんでしょう。ERRORLOGはなんと言っていますか?
    G:ドライブの存在生/出現タイミングによっては、SQL Serverのサービスを自動ではなく手動で立ち上げると上がってくる可能性もあります。

    jzkey

    2020年9月1日 10:08
  • SQL Server エラーログ (既定: C:\Program Files\Microsoft SQL Server\MSSQL**.MSSQLSERVER\MSSQL\Log) を確認することで、SQL Server プロセスの起動に失敗しているのか、またその原因などが確認できると思います。

    TempDBの起動パスを Gドライブに変更後から SQL Server の master にも接続ができなくなっているようですので、SQL Server のサービス起動アカウントに指定しているアカウントが、G ドライブへの書き込み権限を持っていないのかもしれません。

    問題の切り分けとして、SQL Server の サービス起動アカウントを Local System に変更してみて、現象が解消するかを確認してみても良いかもしれません。

    2020年9月1日 18:36
  • jzkey様 NOBTA様

    レスありがとうございます。
    個別にレスさせて頂くよりも、まとめての方が分かりやすいかと存じますので、
    まとめてのレスにて失礼いたします。


    【エラーログについて】
    以下のファイルがそれに該当すると思いますが、ファイルが更新されておらずログもありません。
    C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log\ERRORLOG

    代わりにWindowsのアプリケーションログを見たところ、下記の通りGドライブのファイルへのアクセスできないとのことです。
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ログの名前:         Application
    ソース:           MSSQLSERVER
    日付:            2020/09/01 15:35:55
    イベント ID:       17204
    タスクのカテゴリ:      Server
    レベル:           エラー
    キーワード:         クラシック
    ユーザー:          N/A
    コンピューター:       EC2AMAZ-3RU5FBR
    説明:
    FCB::Open failed: Could not open file G:\tempDb\Data\tempdb.mdf for file number 1.  OS error: 5(Access is denied.).
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    【Gドライブについて】
    念のため「Everyone」にフルコントロール権限を付与し、内部のファイル・フォルダを全部削除しました。
    そして下記コマンドでフォルダのみを作り直しました。が、やはり接続不可です。

    md G:\data
    md G:\log
    md G:\tempDb
    md G:\tempDb\Data
    md G:\tempDb\Log


    【起動アカウントについて】
    WindowsはビルトインAdministratorで起動しています。ドメイン参加はしていません。
    データベースエンジン接続についても「Windows認証」を選択し、ビルトインAdministratorで接続を試しています。


    【SQL Server (MSSQLSERVER) サービスについて】

    サービスが停止していたので手動で開始しようとしたら下記の通り起動不可でした。
    ログオンを「ローカルシステムアカウント」に変更しても、「デスクトップとの対話をサービスに許可」チェックをつけても起動不可でした。

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ログの名前:         System
    ソース:           Service Control Manager
    日付:            2020/09/02 10:56:31
    イベント ID:       7024
    タスクのカテゴリ:      なし
    レベル:           エラー
    キーワード:         クラシック
    ユーザー:          N/A
    コンピューター:       EC2AMAZ-3RU5FBR
    説明:
    SQL Server (MSSQLSERVER) サービスは、次のサービス固有エラーで終了しました: 
    指定されたリソース名がイメージ ファイルに見つかりません。
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


    以上よろしくお願いいたします。
    2020年9月2日 2:11
  • 追記いたします。

    別のサーバー(EC2インスタンス)を作成し、
    データベースエンジンに接続後に以下のクエリを実行したら問題が起こりませんでした。


    【クエリ1】
    USE tempdb;
    EXEC sp_helpfile;

    【クエリ2】
    ALTER DATABASE tempdb MODIFY FILE ( NAME = tempdev , FILENAME = 'G:\tempDb\Data\tempdb.mdf' )
    ALTER DATABASE tempdb MODIFY FILE ( NAME = templog , FILENAME = 'G:\tempDb\Log\tempdb.ldf' )
    ALTER DATABASE tempdb MODIFY FILE ( NAME = temp2 , FILENAME = 'G:\tempDb\Data\tempdb_mssql_2.ndf' )
    2020年9月2日 4:01
  • シングル ユーザー モードで SQL Server プロセスで起動させることができるかを確認し、起動ができた場合は、一旦 TempDB のデータベースファイルのパスを元のパスに戻したうえで、正常に起動できるかを試してみると良いかと思います。

    そのうえで、ユーザーデータベースを G ドライブに配置することができるかを検証してみると良いかと思います。

    ユーザーデータベースが G ドライブで起動できるようになれば、TempDB も起動させることが出来るようになると思います。色々とファイルなどを削除されているため、必要なファイルまで削除されている可能性はありますが、「FCB::Open failed: Could not open file G:\tempDb\Data\tempdb.mdf for file number 1.  OS error: 5(Access is denied.)」 のエラーは、SQL Server サービス起動アカウントの権限で G ドライブの該当のパスに フルコントロール権限がない場合に発生するエラーかと思います。

    net start "SQL Server (MSSQLSERVER)" -m"Microsoft SQL Server Management Studio - Query"


    シングル ユーザー モードでの SQL Server の起動
    https://docs.microsoft.com/ja-jp/sql/database-engine/configure-windows/start-sql-server-in-single-user-mode?view=sql-server-ver15

    シングルユーザーモードで起動ができない場合は、メディアが必要になりますが、SQL Serverの修復インストールを試してみると良いかと思います。

    https://docs.microsoft.com/ja-jp/sql/database-engine/install-windows/repair-a-failed-sql-server-installation?view=sql-server-ver15

    2020年9月2日 14:24
  • kd0901さん、こんにちは。フォーラムオペレーターのKumoです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    Tempdb ファイルを手動で新しいロケーションに移動しましたか。

    移動した場合は、削除してください。SQLサーバーは再起動する際に新しいロケーションにTempdbを再度ビルドするので、古いファイルを削除すればいいと思います。

    移動しなかった場合は、コマンドラインまたは構成マネージャーから、最小構成マネージャーモード(parameter -fを使用)でSQLサーバーを起動して、ALTERコマンドを再度実行します。


    どうぞよろしくお願いいたします。 

    MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2020年9月3日 3:26
    モデレータ
  • NOBTA様

    ありがとうございます。

    まずご提示頂いたコマンドを実行してみました。
    1回目は「サービスは正常に開始されました。」と表示されたものの実際には開始されていませんでした。

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    C:\Users\Administrator>net start "SQL Server (MSSQLSERVER)" -m"Microsoft SQL Server Management Studio - Query"
    SQL Server (MSSQLSERVER) サービスを開始します.
    SQL Server (MSSQLSERVER) サービスは正常に開始されました。


    PS C:\Users\Administrator> get-service -DisplayName 'SQL Server (MSSQLSERVER)' | select-object displayname,status,starttype

    DisplayName               Status StartType
    -----------               ------ ---------
    SQL Server (MSSQLSERVER) Stopped Automatic

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    再度実行してみたところ「開始できません」となりました。
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    C:\Users\Administrator>net start "SQL Server (MSSQLSERVER)" -m"Microsoft SQL Server Management Studio - Query"
    SQL Server (MSSQLSERVER) サービスを開始します.
    SQL Server (MSSQLSERVER) サービスを開始できませんでした。

    サービス固有のエラーが発生しました: 1814

    NET HELPMSG 3547 と入力すると、より詳しい説明が得られます。
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    そして、次にご提示頂いた修復ですが、メディアが無いため試せません。
    AWSのSQLServerありのインスタンスを使っております。
    2020年9月3日 4:54
  • Kumo様

    ありがとうございます。

    下記ページを参考に起動時のオプションに「-f」を追加しました。
    https://docs.microsoft.com/ja-jp/sql/database-engine/configure-windows/scm-services-configure-server-startup-options?view=sql-server-ver15



    その結果「SQL Server (MSSQLSERVER)」サービスは起動でき、
    データベースエンジンに接続することはできました。
    しかし、クエリ画面を開いただけで下記エラーが発生し、クエリを実行することができません。

    「OK」ボタンをクリックすると下記接続画面が表示されます「Connect」をクリックすると上記エラーに戻ります。

    最小構成では起動できるが、ファイルにアクセスできずエンジンにも接続できない状況でしょうか・・・

    ※Microsoftアカウントが確認されたのでスクリーンショットが貼れるようになりました。

    2020年9月3日 5:20
  • kd0901さん、こんにちは。フォーラムオペレーターのKumoです。
    ご返信いただきありがとうございます。

    シングル ユーザー モードで自動的に最小構成でSQLサーバーのインスタンスを起動します。

    以下のステップに従ってください。
    まず、SQLサーバー サービスをストップし、-f パラメーターを削除します。
    次、コマンド プロンプト(右クリック、「管理者として実行」を選択)を開き、次のコマンドラインを実行します。
    1、Net Start MSSQLServer -f /mSQLCMD
    2、sqlcmd -S . -E
    3、ALTER DATABASE tempdb
    MODIFY FILE (name=tempdev,filename="G:\tempDb\Data\tempdb.mdf")
    GO

    ALTER DATABASE tempdb
    MODIFY FILE (name=templog,filename="G:\tempDb\Log\templog.ldf")
    GO

    Exit

    4、Net Stop MSSQLServer

    最後に、SQLサーバー構成マネージャーで正常にSQLサーバーを起動します。


    どうぞよろしくお願いいたします。 

    MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    • 回答としてマーク kd0901 2020年9月4日 6:04
    2020年9月3日 6:42
    モデレータ
  • Kumo様

    ありがとうございます。お陰様で無事接続できるようになりました。
    データもGドライブに移動されています。

    ※サーバーのタイムゾーンがUTCのままなのでファイルの作成時間が9時間前になっています

    2020年9月4日 6:04