Postgresql8.1とAccess2003にて販売管理システムを構築しております。
データベースサーバーは会社に設置しており
自宅からPgAdmin1.10にて接続し管理などを行っております。
サーバーにはA、Bと同じ構成をしたデータベースが存在しています。
PgAdminからAのテーブルにSQLを実行したところ
タイムアウトなのか無限ループに陥ったのか、エラーでSQLの処理が止まってしまい
PgAdmin毎落ちました。
仕方なく、再度PgAdminからAのデータベースに接続しようとすると
「could not receive data from server: Software caused connection abort(0x00002745/10053)」
とエラーが表示され、その後一切の接続できなくなりました。
PgAdminの再インストールや、PC・ネットワーク環境を変えたりしましたが
どの方法でもA、Bともに接続不可となってしまいました。
そこでサーバー自体の再起動を行いましたところ
アプリケーション(Access)からAのデータベースに接続することができ
データの読み書きも問題なく出来ました。
また、PgAdminを使った場合も外部から接続するのではなく
同じローカルネットワーク内から接続すると問題なく
A、Bのデータベースに接続でき、テーブルの参照やレコードの編集、
VACUUMやバックアップ(pg_dump)も可能でした。
ここでまず一つ目の質問ですが、
このA、Bのデータベースは、破損している状態でしょうか?
もしくはPostgreSQL毎破損している状態でしょうか?
PgAdminから出力できるレポートで該当テーブル全体の統計情報を見ると
タプルの挿入や更新などがすべて「0」で表示されます。
(サイズだけは計算されて、恐らく実データ量だと思われるバイト数が表示されていました)
二つ目の質問ですが、
Aのデータベースの状態が”壊れている状態”だとしたら、すぐにでも
バックアップを取り、新しくデータベースを作り直してリストアしたいと考えていますが
バックアップ前のデータベースとリストア後のデータベースを比較して、
レコードがすべてリストア出来ているかを確認したいのですが
どのような方法で確認できますか?
例えば全テーブルのレコード数一覧などを出力し比較出来る事が望ましいですが
前述のテーブルの統計情報レポートでは、まともに数字が表示されないので
困っております。
(なお、アーカイブ形式のバックアップだと一部テーブルのレコードが一切復元されない
という現象が発生した為、プレーン形式でのバックアップを考えています。
プレーン形式で書き出して中身を見たところ、問題のテーブルのレコードも
はき出されておりました。(これも、"破損"と考えた要因の一つです))
現状、アプリケーションからの利用だけで言えば、特段問題がありませんが
やはり気持ちが悪く、出来る限り修復(or再構築)を行いたいと考えています。
詳しい方、アドバイスなどあれば是非教えてください。
宜しくお願いいたします。
No.1ベストアンサー
- 回答日時:
あくまで個人の経験からの話です。
記載されている内容から、
「could not receive data from server: Software caused connection abort(0x00002745/10053)」
の時点でPostgreSQLのサービスが落ちて、サーバー自体の再起動時に、PostgreSQLのサービスが
上がって正常復旧。という状況かと思われます。
障害が起きた時に実行したSQL文は、select文でしょうか。
それならば、キャパシティをオーバーする大量行数のクエリが返るSQLでハングすることはありえても
DBMS(PostgreSQL本体)や、データベースがぶっ壊れることはまずないと思われます。
また、select文ならばトランザクションの復旧などは不要です。
PostgreSQL8.1は、Windows版でしょうか。
「アーカイブ形式のバックアップだと一部テーブルのレコードが一切復元されない」のは、
はもともとである気がします。
今回の障害以前に、アーカイブ形式のバックアップ&リストアは成功した実績はありますでしょうか。
私は、8.1のWindows版で、アーカイブ形式で上手くいったためしがないので、
これは“使えない機能”と判断し、いつも必ずプレーンテキストでダンプしてました。
全テーブルのレコード数一覧をとる方法ですが、私は、
select count(*) from テーブル1;
select count(*) from テーブル2;
select count(*) from テーブル3;
…
とSQL文を羅列したファイル(仮にc:\temp\getcnt.sqlとする)を作り、コマンドラインから、psqlで
\o c:\temp\res.txt
\i c:\temp\getcnt.sql
\q
のように、ファイル(この場合、c:\temp\res.txt)に実行結果を書き出して、数えています。
(なお、Windows版の場合、psql を使うときは、
>psql -U postgres <データベース名>
のように、ユーザ名(postgres)を指定してpsqlに接続する必要があります。)
ご心配でしたら、ためしに別の名前のデータベースを作って、そこにダンプをリストアしてみて、
行数をカウントして本番サーバと同じであれば特に問題ないのではと思います。
過去、PostgreSQL(Linux版)のデータベースがぶっ壊れた状態も経験していますが、
その時は、ダンプ時にエラーが出ました。特定のテーブルに差し掛かった時に
読めないと怒られるという状況でした。
ぶっ壊れた原因はメモリ障害でした。SQL文ごときでデータベースがぶっ壊れるというのは
まずありえないのではないかと思います。
丁寧に回答頂き、有り難うございます。
私が使用しているのは、Linux版の8.1です。
その後、会社のモデムとルーターを再起動すると何事もなかったかのごとく
PgAdminにて接続できました。。
いったい何だったんでしょうか。
ちなみに「UPDATE文」で障害が起きました。
(テーブルのカラムの属性を変更するUPDATE文だったと思います。
ただ、アーカイブ形式のダンプはやはり特定のテーブルのみ
リストアされませんし、レポートの数値もやはり0のままです。
全テーブルのレコード数確認の方法、早速使わせて頂きます。
大変勉強になりました。
(早く8.4にバージョンアップしたいのですが
使用しているSQL文がそのまま使用できないのでまずはそこから見直しです。。)
本当に有り難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) IT用語について質問です。 以前ITパスポートの試験を受けた際にデータベースが何の集まりかについての 2 2022/12/10 12:29
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Wi-Fi・無線LAN PCWi-Fiの設定方法がわからなくて困っています。 4 2022/12/28 18:30
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- MySQL データベースの複製の仕方(mysql) 2 2023/05/30 18:24
- Windows 10 Windows10起動しない、エラー0xc0000185修復方法 2 2022/07/14 12:28
- その他(データベース) 業務用のデータベースサーバーの選び方について 4 2022/11/22 10:22
- MySQL 【投稿情報用データベース posts】は必要ないと思います。 1 2022/06/02 21:25
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SELECT 文の NULL列は?
-
テーブルに存在しない列をselec...
-
SQLにて指定日付より前、かつ最...
-
2つのテーブルで引き算 postgres
-
SQLでUPSERTを一度に複数行やる...
-
デットロック回避策(autocommit...
-
DBFluteについて質問です。 環...
-
Postgresのデータ領域の拡張に...
-
PostgreSQL レコードからアイテ...
-
javaでデータベース上のテーブ...
-
PostgreSQLの断片化の状況を確...
-
postgres FILLFACTOR 確認方法
-
PostgresqlのCASE分の使い方
-
SQL: select 結果のカラム結合
-
MS Access から PostgreSQL へ...
-
SQL*LoaderでCSVから指定した列...
-
Accessでデータシートに同じデ...
-
テーブル名をカラムとして取得...
-
アクセスのリンクテーブル一覧...
-
テーブルリンク リンク元を知...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECT 文の NULL列は?
-
テーブルに存在しない列をselec...
-
SQLでUPSERTを一度に複数行やる...
-
単純なselectが遅くなるのです...
-
SQLにて指定日付より前、かつ最...
-
Postgresのデータ領域の拡張に...
-
2つのテーブルで引き算 postgres
-
PostgreSQLの断片化の状況を確...
-
javaでデータベース上のテーブ...
-
VIEWのCOPYってできないんですか?
-
Postgresqlのレポート機能について
-
MS Access から PostgreSQL へ...
-
重複を許すキーの構文がわかり...
-
デットロック回避策(autocommit...
-
最新レコードを抽出し外部結合...
-
フィールドの入れ替えはできま...
-
postgres FILLFACTOR 確認方法
-
PostgreSQL レコードからアイテ...
-
テーブルにcsvファイルをインポ...
-
バキューム処理の実行時間の目安
おすすめ情報