データベースの復元におけるエラーについて

このQ&Aのポイント
  • データベースの復元時に発生するエラーとその解決策について
  • 復元するDBのサイズが大きい場合に発生するタイムアウトエラーへの対処方法
  • タイムアウトエラーが発生した後のDBの復元で起こる別のエラーについて
回答を見る
  • ベストアンサー

データベースの復元におけるエラーについて

初歩的なことで悩んでおり、2点程質問があります。 (1)DBの復元時に「タイムアウトに達しました。操作が完了する前にタイムアウト期間が過ぎたか、またはサーバーが応答していません。」というエラーが発生する時があります。これが発生するのは復元するDBのサイズが大きいときであり、タイムアウト値を長くすることで解決は出来たのですが、これ以外での解決策は無いのでしょうか?(復元するDBのサイズは運用形態により変わる為、固定値にするのは危険?) (2)(1)のエラーが発生した後、再度DBの復元を行おうとすると(厳密にはDBのオープン時)、「Database 'DB名' cannot be opened. It is in the middle of a restore.」というエラーが発生します(Enterprise Managerでは:「読込んでいます」と表記)。このエラーの修復方法が分からず悩んでいます。出来れば(1)のエラーが発生したときに(2)の状態にならないのが理想です。 以下に復元時の主な流れを明記します。 1.DBオープン(server=(local);uid=sa;pwd='パスワード';database='DB名';Connect Timeout= 500) 2.シングルユーザ設定(ALTER DATABASE 'DB名' SET SINGLE_USER WITH ROLLBACK IMMEDIATE) 3.DBの復元(RESTORE DATABASE 'DB名'" FROM DISK = 'バックアップDB' WITH RECOVERY) 4.マルチユーザ設定 長々と申し訳ありませんが宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.2

なるほど、VBを使用する場合ですか・・・それですと、タイムアウトを大きくする以外にはなさそうですね。 逆に、タイムアウトは大きくせず(通常のトランザクションを流すのと同じ程度に設定し)、タイムアウトが発生したらある程度の時間間隔を置いて再接続を試みるという方法もあります。 2.の現象が発生している原因が判明し、その原因を取り除くことができるようであれば、この方法でも良いのではないかと思います。

i-miyo
質問者

補足

度々有難うございます。 やっぱりタイムアウトを大きくするしかないですか。 一応、リストアの時だけ、タイムアウトを通常より大きくして対応しようかなと考えています。 2.については、リストアを失敗すると、必ず「リストア中」のまま保持されるようなので、発生しても別のDBをリストアできるように対応します。(テスト的に試したらできそうだったので・・・) 本当に助かりました。

その他の回答 (1)

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.1

1. タイムアウトを設定する以上はどうしようもないかと思います。別の方法として、クエリアナライザからSQLを発行する方法があります。 2. エラー発生後、再度のコマンド発行時にまだリストアを行っている途中であれば、そのエラーメッセージが表示されるのは自然です。そうではない場合、 http://support.microsoft.com/kb/319701/en-us/http://support.microsoft.com/kb/822852/en-us/ に記述された現象が発生しているのかもしれません。

i-miyo
質問者

補足

早速のご回答ありがとうございます。 2.については掲示のHPの内容にて修復できました。 1.の「クエリアナライザからSQLの発行」とありますが、これと同じことをVB.netから出来るのでしょうか? 初心者なもので、見当違いな質問をしていたらすみません。

関連するQ&A

  • データベース改名

    MySQL 5.0.x でデータベース db_with_old_name を db_with_new_name という名へ変更しようとした結果です: mysql> RENAME DATABASE db_with_old_name TO db_with_new_name; エラ 1064 (42000): ご使用の SQL 構文中にエラがあります; ご使用の MySQL サーバ バージョンに該当するマニュアルで、1 行目の「DATABASE db_old TO db_new」付近で使用すべき正しい構文を調べてください このデータベースに対し全権を持ったユーザでログインしていますし、「DATABASE」を「SCHEMA」にしたり省略したり、データベース名に括弧をつけたり、いろいろやりましたが、すべて同じエラとなります。 ありえない入力などのアホな間違いは 10 年ほど前には卒業したと信じているのでこんな短い文でそれはないと思うのですが、そもそも MySQL 5.0.x でこの構文は使えないのでしょうか。

  • パラメーターエラーで復元できません

    SQLSERVER2005でwindows2003serverで運用しています。 マネージメントスタジオの復元機能で行いました。 どこに間違いがあるのでしょうか? RESTORE DATABASE [test] FROM DISK = N'C:\~.bak' WITH FILE = 1, NOUNLOAD, STATS = 10 GO メッセージ 5133、レベル 16、状態 1、行 1 オペレーティング システム エラー 87(パラメータが間違っています。) により、ファイル "E:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\~.mdf" のディレクトリ参照に失敗しました。 メッセージ 3156、レベル 16、状態 3、行 1 ファイル '~' を 'E:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\~.mdf' に復元できません。WITH MOVE を使用して、そのファイルにとって有効な場所を特定してください。 メッセージ 5133、レベル 16、状態 1、行 1 オペレーティング システム エラー 87(パラメータが間違っています。) により、ファイル "E:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\~.ldf" のディレクトリ参照に失敗しました。 メッセージ 3156、レベル 16、状態 3、行 1 ファイル '~_log' を 'E:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\~_log.ldf' に復元できません。WITH MOVE を使用して、そのファイルにとって有効な場所を特定してください。 メッセージ 3119、レベル 16、状態 1、行 1 RESTORE ステートメントのプランを作成中に問題が検出されました。詳細については、以前のメッセージを参照してください。 メッセージ 3013、レベル 16、状態 1、行 1 RESTORE DATABASE が異常終了しています。

  • SQL Server7.0でバックアップしたデータの復元

    VBからSQL Server7.0(SP1)のデータをバックアップしたデータの 復元処理をしようとしたのですが、次のエラーで復元できません。 「データベースは使用中です。システム管理者は復元操作を実行するために、 データベースを排他的に使用する必要があります。」 MicrosoftのHPからこのエラーを調べたところ、 「model データベースの使用中には復元ができない」バグがあるということです (http://support.microsoft.com/default.aspx?scid=kb;ja;199216) が、sp_whoストアドプロシージャで調べたところ、Modelデータベースは使用していないようです。 Enterprise Managerからデータベース復元を行うと、 復元ができました。 ちなみに、VBからのバックアップのSQLは BACKUP DATABASE データベース名 TO DISK = '保存先' WITH INIT 復元のSQLは RESTORE DATABASE データベース名 FROM DISK = '復元元' WITH RECOVERY です。

  • MYSQLに新しいデータベースの追加

    こんにちは。PHPを使用し、MYSQLに接続、新しいデータベースを追加したいのですが、CREATE DATABASE データベース名で実行をすると Access denied for user ''@'%' to database 'phptest' というエラーが出てしまい、新規データベースを作成することができません。このエラーのよくわからないのところは、localhostにDBの作成時のエラーは'ユーザー名'@'localhost'という感じで出るのに、それ以外で作成しようとすると''@'%'と意味のわからないエラーになってしまいます。これが作成できない理由だと思うのですが、なにかユーザーの追加時等にやらなくてはいけない必要なことが抜けているのでしょうか?お分かりの方おりましたら、ご教授くださいますようお願いいたします。

  • テーブルバックアップ時にエラー

    お世話になります。 SQL Server2008 Standard Scriptを実行し手動でAAAテーブルをバックアップしております。 ※バックアップ用テーブルがあり、その全レコードを削除し  AAAテーブルの内容をコピーしてます。 基本的には問題なくバックアップ出来ているのですが、たまに エラーになるときがあります。 エラーになったときのSQLログに、  「'DB名' のファイル 'DB名_log' の自動拡張をユーザーが取り消したか、  xxxミリ秒でタイムアウトしました。ALTER DATABASE を使用して、  このファイルの FILEGROWTH の値の設定を小さくするか、または  新しいファイル サイズを明示的に設定してください。」 と出ます。 上記メッセージで調べると、トランザクションログの何たら・・・ とありますが、エラーだったとしても、数分後に実行すると 問題無かったりします。 なので、トランザクションログサイズの拡張?とかは関係が 無いように思えるのですが。。 どのようなことが考えられますでしょうか。 ご教示の程、宜しくお願い致します。

  • データベースリンクについて

    サーバーAからサーバーBにDB_LINKを作成し、サーバーBのテーブル(参照権限付与済)を参照しにいったところ、『ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。』となってしまいました。 またサーバーCにDB_LINKを作成したら何のエラーも発生しませんでした。 ちなみにSQLPLUSからサーバーBにログインは可能で、前述のテーブルも参照できました。しかしSQLPLUSからDBLINKを介しての参照は同じエラーになってしまいます。 ちなみに固定ユーザーでプライベート接続でリンクを作成しました。 相手サーバーにユーザーもIDも登録済みです。 いろいろ調べてみたのですが、全然わかりません。 ご存知の方がいらっしゃったら教えて下さい。 宜しくお願いします。

  • db2のデータベース作成エラーについて

    はじめまして。 以前、以下のような質問がされていると思います。 「WebSphereでDB2をデータベースとして行っているのですけど、今日起動してDB2にconnectしようと思ったら COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] SQL1032N start database manager コマンドが発行されていません。 SQLSTATE=57019 というエラーメッセージが出てきてconnectできなくなってしまいました。どなたか改善方法知っている方いらっしゃいましたら教えてください。よろしくお願いします。」 その原因が「原因はユーザーのpassを変更した際、DB2のユーザーを変えなかったのが原因でした。」ということなのですが、現在同じエラーが出て困っています。どのような対処をすればよいか教えていただけないでしょうか。よろしくお願いいます。

  • GAEで409エラーが出ます

    GAEで409エラーが出ます GAEランチャーでアプリケーションをデプロイしたところ失敗したようで、 以下のエラーメッセージが出ます。 Password for メールアドレス: Error 409: --- begin server output --- Another transaction by user ユーザー名 is already in progress for this app and major version. That user can undo the transaction with appcfg.py's "rollback" command. 解決するにはrollbackをすればいいとあったので、コマンドプロンプトで appcfg.py rollback アプリケーションのパス と入力したのですが、appcfg.pyがtxt形式で開くだけで何も起こりません。 pyファイルをプロパティでメモ帳で開くようにしてしまったのですが、それが原因でしょうか? 問題を解決するにはどうしたら良いでしょうか。 よろしくお願いします。

  • SQLServer2000:データベース復元失敗

    SQLServer2000を使用しております。 別環境のデータベースのバックアップファイルを当該環境へ復元させたいと考えているのですが、 バックアップデータファイルを指定して復元を行ったところ、以下のダイアログが表示され、復元に失敗します。 "物理ファイルを拡張しようとした時に MODIFY FILEでオペレーティングエラー112(ディスクに十分な空き容量がありません。)が"発生しました RESTORE DATABASEが以上終了しました" 別環境のデータファイルは230M、トランザクションログファイルは11Gでした。 復元先のドライブの空き容量は17Gです。 十分に空き容量があると思われるのですが、なぜ上記のようなダイアログが出るのでしょうか。また、データファイルのみの復元ということは不可能なのでしょうか。 ※ トランザクションログファイルが肥大化している件につきましては、   ログの切捨て、ファイルの最大サイズの指定、及び復旧モデルも"シンプル"と修正する様対応する予定です。 上記の件につきまして、原因、または対応方法がお分かりになる方がいらっしゃいましたら、 ご教示のほど、何卒よろしくお願いいたします。

  • SQL Server 2005 でのSSMSで4064エラー

    SQLServerの障害検証のため、サービス停止後、複数あるユーザーデータファイルの1つを消去。 サービス起動してSQL Server Management Studio(SSMS)を起動し、DBへWindows認証にて接続しようとすると以下のエラーメッセージが表示される現象が発生します。 対処方法というよりは、なぜLOGINすらできないのかお教えいただけないでしょうか?確かに物理データファイルが消されているので状態としては異常ですがSSMSは起動して作業ができるものと認識していたのですが。。。 <<エラーメッセージ>> Cannot open user default database. Login failed. Login failed for user '[User Name]'. (Microsoft SQL Server, Error: 4064) よろしくお願いします。