テーブルバックアップ時にエラーが発生する原因は?

このQ&Aのポイント
  • SQL Server2008 Standardを使用してAAAテーブルをバックアップする際に、たまにエラーが発生します。エラーメッセージにはトランザクションログの拡張に関する内容が表示されますが、数分後に再度バックアップを実行すると問題は発生しないことがあります。この問題の原因として考えられることについて教えてください。
  • SQL Server2008 Standardを使用してAAAテーブルのバックアップを手動で行っていると、たまにエラーが発生します。エラーメッセージにはトランザクションログの拡張に関する内容が表示されますが、数分後に再度バックアップを実行すると問題は発生しないことがあります。このエラーの原因として考えられることについて教えてください。
  • SQL Server2008 Standardを使用してAAAテーブルのバックアップを手動で行っていると、たまにエラーが発生します。エラーメッセージにはトランザクションログの拡張に関する内容が表示されますが、数分後に再度バックアップを実行すると問題は発生しないことがあります。このエラーの原因について教えてください。
回答を見る
  • ベストアンサー

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

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

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

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

バックアップ(と言ってもテーブル間の行コピーだよね?)を実行する前に「backup log DB名 to disk N'NUL'」を実行するようにしてみたらどうでしょう。それで毎回うまくいくようになるとしたら、やっぱりトランザクションログの拡張が原因です。 それでもなるようなら・・・・僕には分からない。 あ、もちろんbackup logを実行するのはデータベース管理者とよく相談してからにして下さい。トランザクションログをNULに吐くというのは実質切り捨てなのでデータベース全体がクラッシュしてそれを復旧する時に一部直せない箇所が出てくる可能性があります。

naoto0216
質問者

お礼

anmochi様 ご回答ありがとうございます。 また、返信が遅くなり申し訳ございません。 ・・・トランザクションログの拡張が原因ってこともあり得るんですね。。 今回質問させて頂いたバックアップ(別テーブルへのコピー)とは別に メンテナンスプランにて30分毎にDBを丸々バックアップをとるようにしてます。 で、何かあった場合、このバックアップからリストアしているのですが、 その場合は >データベース全体がクラッシュしてそれを復旧する時に一部直せない >箇所が出てくる可能性があります。 は関係ない・・・という認識でよろしいでしょうか。

関連するQ&A

  • SQLServer2000SP4のトランザクションログ削除方法

    DBをバックアップする際にトランザクションログを削除したいのですが、「データベースの保守計画」では、そのような設定はありません。そこで、「データベースの保守計画」後にトランザクションログを削除するSQLを流そうと考えているのですが、どのようなSQLかが分かりません。当サイトの過去ログを確認したところ BACKUP LOG [データベース名] WITH NO_LOG で削除可能とのことですが、全くトランザクションログは削除されません。削除方法を知っている方がおりましたら、教えてください。

  • オンラインREDOログ障害からの復旧方法について

    現在、Oracle11g Release2 11.2.0.3(ASM使用) の環境で、オンラインREDOログファイルが全て消失した場合を想定して、以下の手順で復旧の方法をテストしています。 ----- 1.sqlコマンドでテーブルに1件データを挿入する。 2.フルバックアップ(バックアップセット)を取得する。 3.sqlコマンドでテーブルに1件データを挿入する。 4.累積増分バックアップを取得する。 5.sqlコマンドでテーブルに1件データを挿入する。 6.DBをシャットダウンする。 (RMAN> shutdown immediate;) 7.オンラインREDOログファイルを全て削除する。 8.DBをマウントする。 (RMAN> startup mount;) 9.リストアをする。 (RMAN> restore database;) 10.バックアップの際に除外している表領域をオフラインにする。 (SQL> Alter database datafile '+DATA/orcl/DATAFILE/hoge2' offline drop;) 11.リカバリをする。 (SQL> recover database using backup controlfile until cancel;) (ログの指定は AUTO) 12.DBをオープンする。 (RMAN> alter database open resetlogs;) 13.sqlコマンドでテーブルの中を確認する。 (SQL> select * from HOGEHOGE;) (データが1件) ----- 上記の手順でDBをオープンにするところまで上手くいったのですが、 私の考えでは、13でテーブルを確認するとデータが2件はいっていると思ったのですが、 結果は、1件だけでした。 累積増分バックアップを取得した時点(データが2件入った状態)まで戻したいのですが、 解決の手がかりになる情報などがございましたらご教示いただけますでしょうか。 よろしくお願いします。

  • SQL Sever ログの拡張?

    サーバーのシスログに下記メッセージが出て アプリケーションがDBにアクセスできないという現象が発生しました。 この時の対策として考えられることを教えていただけますでしょうか。 データベース 'XXX' のファイル 'XXX_log' の自動拡張をユーザーがキャンセルしたか、30109 ミリ秒でタイムアウトしました。ALTER DATABASE を使用して、このファイルの FILEGROWTH の値の設定を小さくするか、または新しいファイル サイズを明示的に設定してください。

  • 既存のAccessのテーブルに空の領域を作成する

    既存のAccess2000のテーブルに空の領域を作成する プログラムを作っているのですが(下記参照)、 「データベースの形式 <ファイル名> を認識できません。(Error 3343)」の エラーが出ます。 【状況説明】 ・パスの内容、パス名、DB名はあっています。 ・編集前のDB前に戻して(テーブル内に空白データが無い状態)、  再実行してもダメでした。 ・参照設定「DAO 3.51 Object Libraly」はチェックしています。  「DAO 3.6 Object Libraly」にチェックすると、  「この名前は既にあるモジュール、プロジェクト、オブジェクト  ライブラリで使われています。」のメッセージが出て、チェック出来ません。 解決方法がありましたら、記入をお願い致します。 【作成プログラム】 'DB関連設定  Dim DBName As String(iniファイルから取得したDB名)  Dim SQL As String (SQL文領域)  Dim DB名  As DAO.Database 'データベース接続 Set DB = OpenDatabase(iniファイルから取得したパス & "\" &               DBName) '領域作成 Do While 数値 > 0 SQL名 = "" SQL名 = SQL名 & "INSERT INTO テーブル (A, B, C) " SQL名 = SQL名 & "VALUES ("", "", ""); " db.Execute (SQL) 数値 = 数値 - 1 Loop db.Close

  • SQLServer2005メンテナンスプランについて

    SQLServer2005メンテナンスプランについての質問です。 メンテナンスプラン・ウィザードでメンテナンスプランを作成し、 「データベースの圧縮」と「履歴のクリーンアップ」の間に 「T-SQLステートメントの実行タスク」をツールボックスより マニュアル追加しステートメントに  USE ["Db名"]  GO  DBCC SHRINKFILE(N'"Db名"_log' , 0, TRUNCATEONLY) を記述し上記前後タスクと接続(完了)しました。  1「データベースの整合性」  2「データベースのバックアップ(完全)」  3「データベースのバックアップ(トランザクションログ)」  4「データベースの圧縮」  5「T-SQLステートメントの実行タスク」※トランザクションログの圧縮、マニュアル追加  6「履歴のクリンーアップ」  7「メンテナンスクリーンアップタスク」※マニュアル追加 メンテナンスプランの実行履歴を確認すると5と7の履歴が存在しません。 また、Windowsの「コンピュータの管理」より  「システムツール」→「イベントビューア」→「アプリケーション」 でログを確認すると5以降は実行された結果が残っていません。 実際には、トランザクションログ・ファイルは「バックアアップ」されて「圧縮」が されているようです。 なぜログが残らないのでしょうか? まだ、設定が足らないのでしょうか? 宜しくご教授願います。 以上

  • テーブル名を[]でくくらないとエラーになってしまう

    テーブル名を[]でくくらないとエラーになってしまいます sqlserver 2008 express edition を利用しているのですが テーブル名 やカラム名に[]でくくってSQL文を実行しないと エラーが出てしまいます 例えば select * from [table]  の様にしないといけません これを select * from table で実行できるようにしたいのです どうしたらいいのでしょうか 会社ではsqlserver2005を利用しているので 2008からは[]でくくる必要になったのでしょうか それとも初期設定で何かしないといけないのでしょうか 設定方法を教えて下さい sqlserver management studio2008もインストール済みです

  • cronでバックアップsh

    現在、hetemlというレンタルサーバでバックアップ用のシェルをcron登録しているのですが、 権限エラーが出てしまいます。何の権限エラーなのか解らないのですが、 どなたかご存知ないでしょうか? [エラーメッセージ] /bin/sh: /home/sites/heteml/users/xxx/db_bakkup.sh: Permission denied [シェル] #!/bin/sh # ---------- 設定 ---------- # バックアップ元のデータベース db_host=xx db_name=xx db_user=xx db_pass=xx # バックアップ先のディレクトリ・ファイル bk_file=/xx/bak.sql # ---------- ファイル名を設定 ---------- # ファイル名を設定 file_temp=$bk_file.sql # ---------- バックアップ処理 ---------- # バックアップ先のディレクトリに移動 cd $bk_dir if [ $? != 0 ]; then echo "Backup directory does not exist." exit 1 fi # データベースをダンプ mysqldump -h$db_host $db_name -u$db_name -p$db_pass --opt > $bk_file if [ $? != 0 -o ! -e $file_temp ]; then echo "Cannot dump database." exit 1 fi exit 0 ------------------------------------ 有識者の方、ご教授お願い致します。

  • ARCHIVEを利用したバックアップサーバへのデータ反映について

    毎晩オンラインバックアップを行い、 バックアップサーバ(待機環境)へリストアしております。 (この処理は、バックアップファイルを復旧後に  Recover Database命令を使用しております。) この環境に対し、1時間おきに メインサーバのArchiveLogをコピーして 差分をバックアップサーバに反映したいのですが、 この場合、どの様な処理を実施したらよいのでしょうか? 夜間に行っている処理を実行してもAchiveが反映してくれません。 何か良い方法があればご教示をお願い致します。 現在、以下の環境で行っております。 OS:Windows 2003 Server DB:Oracle 10.1.0.4 (メイン・バックアップサーバ共に同じ) ・夜間に行っている処理  (1)DBシャットダウン  (2)バックアップファイルのリストア  (3)コントロールファイルの再設定  (4)DBのマウント  (5)最新までのArchiveLogを取得  (6)Recover Database Using Backup Controlfile Until Cancel;  (7)Alter Database Open Resetlogs;  終了

  • バックアップについて

    データベースのバックアップについて質問です。 クエリファイル(.sql)からバックアップを取りたいのですが、バッチファイルなどを使用せずに、クエリファイルを実行するだけでバックアップを取る方法はないのでしょうか? 現在、クエリファイルには BACKUP DATABASE データベース名 TO DISK = 'バックアップ先' WITH INIT と記述しております。 このファイルをただ実行しても、マネージメントスタジオが起動し、ログインを求められ、実行ボタンを押さないと実行はされないと思います。 バッチファイルを併用、またはバッチファイルのみでバックアップを取ることは成功しているのですが、バッチファイルを使わずに、クエリファイルのみでこれを実行する方法はないものかと悩んでおります。 方法がございましたら、ご教授願います。

  • PHPからMySQLのバックアップをとるには?

    レンタルサーバのLinux+PHP4.2.1+MySQL3.23.42の環境で行っております。 HTML(PHP)フォームから、「バックアップ」ボタンが押されたときに、 MySQLのバックアップをとる(mysqldump)するプログラムを作りたいのですが、 mysqldumpコマンドは、SQLとしてクエリ送信できるのでしょうか? 例えば、 $strSQL = "mysqldump -u **** -p**** DB名 テーブル名 > dumptest.bak"; mysql_db_query($strSQL); のような感じでは、成功しませんでした。 mysql("DB名","mysqldump -u **** -p**** DB名 テーブル名 > dumptest.bak"; さらに、このような方法もあるみたいですが、 エラーも起こらないしdumpもされませんでした。 phpMyAdminなどは、どうやって実行しているんでしょうね。。。 知っている方がいましたら、是非ご教授くださいませ。

    • ベストアンサー
    • PHP