フォーラム forum
homechevron_rightフォーラム

GroupSessionについての自由な情報交換の場としてご利用ください

GroupSessionフォーラム:投稿一覧

 
フォーラム:99_その他フォーラム
DB破損しました。リカバリ方法を教えてください。
[ 7470 ] DB破損しました。リカバリ方法を教えてください。

お世話になっております。

【環境情報】
OS:WindowsServer2012R2
GroupSession Ver.4.8.1
IIS8.5
Tomcat:8.5.64
Java:1.8.0_181

日次バッチ処理でエラーやWebメールがゴミ箱から削除できないなどのエラーが頻発しており、DBが破損してしまったようです。

過去のフォーラムを参考にDBリカバリを実施してみました。
https://groupsession.jp/wbs/bulletin/bbs080.do?threadSid=1336

1. コマンドプロンプトを起動
2. cd Tomcatフォルダ/webapps/gsession3/WEB-INF/db/gs2db
3. java -cp ../../lib/h2_1.3.jar org.h2.tools.Recover -db gs2db
4. 上記3のコマンドで「gs2db.h2.sql」が作成された
5. 「gs2db.h2.db」を削除
6. java -cp ../../lib/h2_1.3.jar org.h2.tools.RunScript -url jdbc:h2:gs2db -script gs2db.h2.sql
上記6のコマンドで、DbExceptionが発生してエラーとなり、リカバリを完了できません。

まずは上記のリカバリ方法で合っているのか?
リカバリ中にエラーの場合の対処方法等をご存知の方、お手数ですが、お教えいただきたく、よろしくお願いいたします。

投稿者hata
最新書き込み2021/04/06 14:57:21
[ 7996 ] Re: DB破損しました。リカバリ方法を教えてください。

WindowsServer2016
apache-tomcat-9.0.87
IIS 10.0.14393.0
OpenJDK11U-jdk_x64_windows_hotspot_11.0.22_7
GroupSession Ver.5.1.3

いつもお世話になっております。

GroupSessionを10年以上運用しています。
その間、DBが破損し、バックアップから戻してみたりしましたが、結局DB破損から復旧できませんでした。

GroupSessionを再構築し直して、2~3年になりますが、最近またDBが肥大化し、画面も固まることが多くなってきており、いつDB破損するかわからない状況です。

1.事前にTomcatのサービスを止めておく

2.DBのある場所へディレクトリ移動
cd %Tomcatフォルダ%\webapps\gsession\WEB-INF\db\gs2db

3.DBからリカバリ用SQL作成
java -cp ../../lib/h2_1.3.jar org.h2.tools.Recover -db gs2db

4.DB(gs2db.h2.db)を削除または別の場所へ退避し、以下コマンド実行でDB再作成
java -cp ../../lib/h2_1.3.jar org.h2.tools.RunScript -url jdbc:h2:./gs2db -script gs2db.h2.sql

上記を実行すると、手順4.の実行中にエラーで止まってしまいます。
どこかのサイトで、エラーになった行を削除していけばよいというのをみたことがあったので、「SQLからエラー行削除⇒作成途中のDB削除⇒コマンド実行」を繰り返し実施しましたが、2時間以上頑張ってみましたが、SQLファイルの1/3も進まず断念しました。
おそらく、リカバリ方法が間違っているのではないかと思います。

有識者の方、リカバリを実施した経験者、リカバリ方法のわかる方、日本トータルシステム株式会社の開発者の方も含め、何か情報を持っている方いらっしゃいましたら、ご教示いただきたく、どうぞよろしくお願いいたします。

またDB破損で復旧できず、Webメールやショートメール、スケジュールなど全て参照できなくなって、また1からGS再構築は避けたく、どうぞよろしくお願いいたします。

投稿者hata
最新書き込み2024/04/26 09:43:10
[ 8000 ] Re: Re: DB破損しました。リカバリ方法を教えてください。

hataさん

> 有識者の方、リカバリを実施した経験者、リカバリ方法のわかる方、日本トータルシステム株式会社の開発者の方も含め、何か情報を持っている方いらっしゃいましたら、ご教示いただきたく、どうぞよろしくお願いいたします。

リカバリというか、アップデートの時と同じ考え方でいけるんじゃないかと思います。

【バックアップがzip圧縮の場合】
まずはTomcatサービスを停止します。
破損する前のバックアップデータ
> %Tomcatフォルダ%\webapps\gsession\WEB-INF\backup\gs_sys_backup_%yyyymmdd%.zip
を展開して出来る[db]フォルダを
> %Tomcat ファオルダ%\webapps\gsession\WEB-INF\
配下に上書きコピーします。
上書きコピーが終わったあとでTomcatサービスを再起動すれば、破損前のDB状態で再開可能です。

もし破損後のバックアップしか残ってないのであれば、上記の方法は使用できませんので注意してください。

投稿者nobody
最新書き込み2024/05/11 10:29:15
[ 8002 ] Re: Re: Re: DB破損しました。リカバリ方法を教えてください。

nobody様

返信ありがとうございます。
ご連絡が遅くなり、申し訳ございません。

以下の方法だと、DB破損後にバックアップで破損前のDBに戻すことになり、最新データでなくなるので、DBの復旧・リカバリを実施したいです。

> リカバリというか、アップデートの時と同じ考え方でいけるんじゃないかと思います。
>
> 【バックアップがzip圧縮の場合】
> まずはTomcatサービスを停止します。
> 破損する前のバックアップデータ
> > %Tomcatフォルダ%\webapps\gsession\WEB-INF\backup\gs_sys_backup_%yyyymmdd%.zip
> を展開して出来る[db]フォルダを
> > %Tomcat ファオルダ%\webapps\gsession\WEB-INF\
> 配下に上書きコピーします。
> 上書きコピーが終わったあとでTomcatサービスを再起動すれば、破損前のDB状態で再開可能です。
>
> もし破損後のバックアップしか残ってないのであれば、上記の方法は使用できませんので注意してください。

GroupSessionのh2 Databaseをリカバリしたことがある方、nobody様のようにこうやったらいいのでは!?というご意見等ございましたら、引き続き、よろしくお願いいたします。


投稿者hata
最新書き込み2024/05/21 11:31:29
[ 8005 ] Re: Re: Re: Re: DB破損しました。リカバリ方法を教えてください。

hataさん

> 以下の方法だと、DB破損後にバックアップで破損前のDBに戻すことになり、最新データでなくなるので、DBの復旧・リカバリを実施したいです。

リカバリの手順を私の方のテスト環境で実施してみましたが、特に問題なく終了してしまいました。
おそらく破損部分のSQL実行でエラーが出ているのではないかと思います。

リカバリの手順で何をやっているのかというと
 3. → 既存DBデータの中身を新しいDBへ書き込む為のSQL文を作成
 6. → 作成されたSQL文を実行
という処理なので、エラーが出ているということは
 その行のSQL文が間違っている=破損データを無理やり書き込もうとしている
のではないかと思います。
エラー行を削除→再実行を繰り返して2時間たっても終わらないということは、やはり作成された gs2db.h2.sql の中身が使い物にならないのではないかと思います。
最新gs2db.h2.dbと破損前のgs2db.h2.dbがあれば、双方に対して3.の処理を実行し
出来上がったgs2db.h2.sqlの中身をWinMerge等のテキスト比較ツールで比較してみるのもいいかもしれません。
どこで破損が発生しているのかが見えてくる可能性があります。

投稿者nobody
最新書き込み2024/05/25 18:21:05
[ 8014 ] Re: DB破損しました。リカバリ方法を教えてください。

nobody様

返信ありがとうございます。
nobody様の環境ではエラー無くDB再作成されるんですね。羨ましいです。

破損する前のバックアップデータが結構古いので、対応可能か調査が必要ですが、今回は難しそうと思われます。

ただ、今後どのようにしたら良いか、ヒントをいただけたので、対応できるかもしれません。いろいろとありがとうございます。

nobody様以外の他の方の意見も聞いてみたいところなので、もし私と同様の事象から解消できた方がいらっしゃいましたら、お教えいただきたく、よろしくお願いいたします。


投稿者hata
最新書き込み2024/06/06 11:09:05
[ 8015 ] Re: DB破損しました。リカバリ方法を教えてください。

GSを10年超運用しており、DBが先月破損してしまい、GSが全く動作しなくなってしまいました。結果2週間前のバージョンアップ時のDBに巻き戻ってしまい偉い目を見ました。

1)
https://qiita.com/yutaka-tanaka/items/86f9be2bcb8772ce9421
こちらの情報を元に、リカバリ用スクリプト生成(バックアップ)を生成したものの生成されるSQLにはエラーが含まれてしまい、全く同じような状況です。

2)
https://qiita.com/syany/items/fefb5d886f3a723036e1
https://kurukurupapa.hatenablog.com/entry/2013/10/05/130520
こちらの情報を元にA5Mk2を使用してDBにODBC接続し、テーブル単位にバックアップを行おうとしましたが、壊れているテーブルでフリーズしてしまい、結局取り出すことが出来ないテーブルがあり、断念しました。

3)
H2database Consoleではフリーズしないで中身を参照できるので、何とか1)の方法で生成されたSQLから秀丸でGrep置換を駆使して、エラーとなるパターンのレコードをSQLから排除し、一時作業用テーブルにデータを格納するところまでは進めました。
しかし、一時作業用テーブルから本番テーブルにインサートする部分で一意制約違反となってしまいました。
H2DatabaseのConsoleでリカバリ前のテーブルデータと、SQLで生成された一時作業用野テーブルデータを比較すると件数は一致しますが、テーブルの中身がほぼほぼ異なるものが生成されている状況です。

今ここです。

最終的には、Javaのプログラムを書いて、リカバリ前のテーブルからデータを抜き、新しいテーブルにデータを格納するしかないのかもしれません、、、。
Javaに明るくないため、ここでたちどまっている状態です。

参考にならなくてすいません。

投稿者とおりすがり
最新書き込み2024/06/06 18:15:37
[ 8016 ] Re: Re: DB破損しました。リカバリ方法を教えてください。

追記します。
> しかし、一時作業用テーブルから本番テーブルにインサートする部分で一意制約違反となってしまいました。

この部分ですが、information_schema.lob_mapが復元できないでいます。

過去ログの
https://groupsession.jp/wbs/bulletin/bbs080.do?threadSid=1336
でも問題になっているようで、とりあえずこれをバイパスして、復元してみています。

投稿者とおりすがり
最新書き込み2024/06/07 12:36:58
[ 8017 ] Re: DB破損しました。リカバリ方法を教えてください。

https://groupsession.jp/offer/gs_free_faq.html#free_faq02

正式に日本トータルシステム相談してみてはいかがですか?
壊れたデータは直せないにしても、有償サポート入って調査費用払えば見てもらえるみたいですよ。

投稿者ランス
最新書き込み2024/06/07 13:26:22
[ 8018 ] Re: Re: DB破損しました。リカバリ方法を教えてください。

ランスさん

はい、私のところでは、正式に問い合わせを行い、ランスさんがおっしゃる通りの回答を得ております。
現状のまま使い続けるために、復旧するにはどうすれば良いのかを、模索しております。

ありがとうございます。

投稿者とおりすがり
最新書き込み2024/06/07 13:57:47
[ 8031 ] Re: DB破損しました。リカバリ方法を教えてください。

壊れてしまっているDBからは「org.h2.tools.Recover」しか使えませんでした。

壊れかけのDBだと、「org.h2.tools.Script」で、ダンプ用SQLが取得できます。
こちらだと、余り大きな修正がなく30分位でリストアできました。

ダンプとリストアは以下のURLから
https://takezoe.hatenablog.com/entry/2015/12/31/194443

いったん全部読み込ませた後、再度ダンプ取得してリストアしたところ、停止することなくデータが戻せたので、うちはこれでDBのエラーを除去しようかと思います。

投稿者とおりすがり
最新書き込み2024/06/13 17:02:10
[ 8036 ] Re: Re: DB破損しました。リカバリ方法を教えてください。

お世話になっております。

久しぶりに掲示板を見たら、新しい投稿でしかも有益な情報が載っており、大変うれしく思います。

> 壊れてしまっているDBからは「org.h2.tools.Recover」しか使えませんでした。
>
> 壊れかけのDBだと、「org.h2.tools.Script」で、ダンプ用SQLが取得できます。
> こちらだと、余り大きな修正がなく30分位でリストアできました。
>
> ダンプとリストアは以下のURLから
> https://takezoe.hatenablog.com/entry/2015/12/31/194443
>
> いったん全部読み込ませた後、再度ダンプ取得してリストアしたところ、停止することなくデータが戻せたので、うちはこれでDBのエラーを除去しようかと思います。

もしかすると、「org.h2.tools.Script」⇒「org.h2.tools.RunScript」⇒「org.h2.tools.Recover」でさらにうまくいかないですかね。
上記方法で試してみたいと思います。

投稿者hata
最新書き込み2024/07/06 16:12:43
[ 8037 ] Re: DB破損しました。リカバリ方法を教えてください。

お世話になっております。


テスト環境を作成して、とおりすがり様が投稿してくださった、「org.h2.tools.Script」でダンプ用SQLを作成し、リストア「org.h2.tools.RunScript」したところ、DB容量も少し容量が減り、うまく動作するようになったと思われます。
(本番環境でないので、まだ何とも言えませんが、動作速度もリストア実施前よりも速くなったように感じます)


以下も試してみましたがリカバリしたあとにリストアすると、DB容量が倍近くに増えたので、今回はやめました。
「org.h2.tools.Script」⇒「org.h2.tools.RunScript」⇒「org.h2.tools.Recover」⇒「org.h2.tools.RunScript」


「org.h2.tools.Recover」⇒「org.h2.tools.RunScript」でエラー解消できない場合に「org.h2.tools.Script」⇒「org.h2.tools.RunScript」を実施することで、DBが復旧できているようです。

とおりすがり様や他にも投稿していただいた方、上記方法にてDBリカバリができたようです。
誠にありがとうございます。

投稿者hata
最新書き込み2024/07/09 09:13:45
[ 8066 ] Re: DB破損しました。リカバリ方法を教えてください。

hataさん、その後どうでしょうか。

手前どもの環境では、このあと、
https://www.komina.info/archives/638
こちらの情報を元に、H2Databaseのデフラグと圧縮をかけることも可能でした。

投稿者とおりすがり
最新書き込み2024/08/26 12:19:21
[ 8073 ] Re: Re: DB破損しました。リカバリ方法を教えてください。

お世話になっております。

返信が遅く申し訳ございません。
色々とアドバイスいただき、大変助かります。

> hataさん、その後どうでしょうか。
>
> 手前どもの環境では、このあと、
> https://www.komina.info/archives/638
> こちらの情報を元に、H2Databaseのデフラグと圧縮をかけることも可能でした。

その後、動作もサクサクになりましたが、容量は減らなかったのでどうしようかと思っていました。
また、最近またほんの少しですが、遅い時も出てきたのでまた実施しようと考えており、上記URLのデフラグと圧縮がかかるとさらに良いので、試してみたいと思います。

投稿者hata
最新書き込み2024/09/10 16:03:46
[ 8076 ] Re: Re: DB破損しました。リカバリ方法を教えてください。

とおりすがり様

お世話になっております。

> hataさん、その後どうでしょうか。
>
> 手前どもの環境では、このあと、
> https://www.komina.info/archives/638
> こちらの情報を元に、H2Databaseのデフラグと圧縮をかけることも可能でした。

上記のサイトを見たのですが、どのように実施しましたか?
コマンドプロンプトで上記サイトのコマンドを実行したらよいですか?
それとも、GSの何かのコンフィグファイルに設定してとかバッチファイルにしてとかでしょうか?

差支えなければ、どのように実施したかお教え願いますか?

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

投稿者hata
最新書き込み2024/09/17 09:13:25
[ 8077 ] Re: DB破損しました。リカバリ方法を教えてください。

hataさん、こんにちは。

手前どもはLinuxですので、
>#!/bin/sh
>JAVA_HOME=/usr/local/java/jdk
>export JAVA_HOME
>CATALINA_HOME=/usr/local/java/tomcat
>export CATALINA_HOME
>CATALINA_OPTS='-Xmx5120m -Xms2560m'
>export CATALINA_OPTS
>java -cp /usr/local/java/tomcat/webapps/gsession/WEB-INF/lib/h2_1.3.jar org.h2.tools.Server -webAllowOthers

このようなスクリプトでWebコンソールを起動し、あとは以下のURLの方法で
https://sukkiri.jp/books/sukkiri_servlet3/sukkiri_servlet3_appendix/h2_execute_sql.html

WebコンソールからSQL実行しました。

投稿者とおりすがり
最新書き込み2024/09/19 13:01:01
[ 8078 ] Re: Re: DB破損しました。リカバリ方法を教えてください。

JDBC URLは
jdbc:h2:/usr/local/java/tomcat/webapps/gsession/WEB-INF/db/gs2db/gs2db;MAX_COMPACT_TIME=30000
としました。

投稿者とおりすがり
最新書き込み2024/09/19 13:19:54
[ 8079 ] Re: DB破損しました。リカバリ方法を教えてください。

とおりすがり様

お世話になっております。

詳細にコマンドまで載せていただき、ありがとうございます。
皆が使用しない、休日等に対応してみます。

色々とお教えいただき、助かります。


hata

投稿者hata
最新書き込み2024/09/20 08:46:31
スレッドURLhttps://groupsession.jp/wbs/bulletin/bbs080.do?bbs010forumSid=4&threadSid=2710
 
メールマガジン登録

vertical_align_top