ファイルパスが間違っているため、バックアップ時にSQL Server 2017がクラッシュする


25

データベースを復元しようとしていて、SQL Serverがクラッシュし続けました。SSMSで、ネットワークトランスポートエラーが発生したというメッセージが表示されます(接続がクラッシュしてクラッシュしました)。ログを確認したところ、SQL Serverが予期せず閉じられただけです。次に、サービスを再起動する必要があります。

GUIが実行しようとしているスクリプトに問題を絞り込みました。問題は、ログの末尾のバックアップを取るときに、バックアップファイルへのパスが間違っていることです。そのはずD:\mapbenefits\...

BACKUP LOG [mapbenefits]
TO  DISK = N'D:mapbenefits_LogBackup_2019-02-21_13-58-24.bak'
WITH NOFORMAT, NOINIT,  NAME = N'mapbenefits_LogBackup_2019-02-21_13-58-24',
    NOSKIP, NOREWIND, NOUNLOAD,  NORECOVERY ,  STATS = 5

2つの質問があります。

  1. このパスを修正するにはどうすればよいですか?サーバー設定にアクセスしようとしましたが、バックアップパスはD:スラッシュなしです。スラッシュを追加すると、GUIによって削除されます。これはSSMS v17.9.1です。私は選ぶことができD:\mapbenefits\、それはうまくいきますが、私は欲しいですD:\DATABASE\...

  2. これはバグですか?パスが正しく入力されていないという理由だけで、SQLサーバーがクラッシュする必要がありますか?ファイルパスを修正したら、問題はありません。ファイルパスを改造するだけでいつでも再現できます。

バージョンを確認するクエリを実行するとCU13が取得されますが、設定に入るとバージョン14.0.1000.169が表示されます。

これはバグのようで、再現可能であるため、ここに投稿しました:https : //feedback.azure.com/forums/908035-sql-server/suggestions/36920542-incorrect-filepath-with-backup-log-command-原因

回答:


25

これを再現できました。

2016年に、そのような無効なパスを配置すると、次のメッセージが表示されます。

バックアップデバイス 'D:mapbenefits_LogBackup_2019-02-21_13-58-24.bak'を開けません。オペレーティングシステムエラー3(指定されたパスが見つかりません。)

2017 CU 13(14.0.3048.4)では、サービスがクラッシュします。最新のホットフィックス(14.0.3049.1)で、サービスはクラッシュしませんが、セッションは強制終了されます。

同じ正確な動作が適用さRESTORE DATABASEれることも確認しました-「D:Backups」(バックスラッシュがない)または「D :: \ Backups」(余分なコロン)などのパスを渡すと、SQL Serverインスタンスがクラッシュします(Michael K Campbellに感謝します)これを持ち出すために)。

存在しない「有効な」パスを配置すると、2017年に正しい動作(「指定されたパスが見つかりません」)になります。

これはバグです-CU 13とホットフィックスビルドの両方で。BACKUPまたはRESTOREコマンドに誤ったパラメーターを渡しても、サービスがクラッシュしたり、セッションが終了したりすることはありません。フィードバックサイトで報告できます

注:このバグのサービスクラッシュバージョンは、SQL Server 2019のパブリックプレビューバージョンで再現できます(CTP2.2- これを指摘してくれたDenis Rubashkinに感謝します)


これをデバッガーで見ると、パス検証コードが単純に壊れているようです。sqlmin!CheckFileStreamReserved提供されたパスの通常の(そして非常に広範な)チェックが意味をなさない場合に再帰的に呼び出すことにより、スタックオーバーフローを引き起こします。スタックオーバーフローはビルド3048でサービスを停止します。スタックオーバーフローを処理しようとすると、サーバー全体を停止するのではなく、接続を切断する一連のアクセス違反を除いて、3049でも同じことが発生します。


このバグの修正は、SQL Server 2017 CU 15でリリースされました。

修正:データベースマスターをディスクにバックアップしようとすると、スタックオーバーフローが原因でSQL Server 2017がクラッシュする

この問題は、SQL Server 2019 CTP 3.0でも解決されています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.