「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:1934
現在:3


データベースの共有を行うと2台目以降でテーブルにアクセスできません

ページOpenOffice.org FAQの登録ページ
投稿者けん
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2008-09-10 10:28:55 (水)
OSWindowsXP
依存するページIssue #93428
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

ネットワーク上にデータベースを置いて、複数のPCからアクセスをできるようにしたいのですが、
1台のPC(PC1)が対象のデータベースファイル(hoge.odb)を開くと、2台目以降のPC(PC2)では
同じデータベースファイルを開くことはできるのですが、テーブルへのアクセスができません。

具体的には、hoge.odbを開いて"表示"→"データベースオブジェクト"→"テーブル"を選択すると、
"データソースhogeへの接続が確立できませんでした。"というメッセージが表示され、
テーブルを見ることができません。
ちなみに、"ツール"→"オプション"→"OpenOffice.org Base"→"データベース"ではhoge.odbを指定しています。

原因と考えられるポイントを教えて下さい。
よろしくお願いします。

PC1,PC2共に利用している環境は以下の通り
OS:Windows XP
OpenOffice:2.4.1
データベース:HSQLDB 1.8.0.10


環境について情報を提供します

けん (2008-09-10 11:48:54 (水))

上記の状況以外のこちらの状況を説明します。

JavaはJRE1.6.0.7を使用しています。
PC1ではOpenOfficeを開いただけです。(テーブル操作等は行っておりません)
この現象は同じ環境でも発生する場合と発生しない場合があります。

組み込みのHSQLDBの問題

M.Kamataki (2008-09-10 16:03:45 (水))

PC1でhoge.odbを開く(正確にはテーブルにアクセスする行為)とファイルのあるディレクトリに、hoge.odb.lckというロックファイルが作成されます。ロックファイルがある限り、PC2からhoge.odbのテーブルへアクセスできません。

ロックファイルは、PC1でOpenOffice.orgを終了したとき削除されます。クイック起動がタスクバーにある場合は、OpenOffice.orgは終了していないので注意してください。つまり、クイック起動が常駐している限り、PC2からhoge.odbのテーブルへはアクセスできません。(本当はHSQLDBをSHUTDOWNすればよいのですがわかりにくいです)

このロックファイルを作成してしまう組み込みのHSQLDBの問題は、IssueTrackerに登録されています。当Q&Aでも以下の質問のページで紹介しておきました。Issueのターゲットは3.1になっています。

faq/4/1075「ネットワークハードディスク上のファイルが更新できていない」

なお、これはHSQLDBを組み込みで利用する場合の制限なので、もし、Baseで接続するDBを複数人で共有するなら、そのほかのデータベースエンジンを利用することをお薦めします。

クイック起動は利用しておりません

けん (2008-09-10 16:35:48 (水))

早速のお返事ありがとうございます。

ちょっとこちらの説明が不足しておりました。

まず、全てのPCにおいてクイック起動は利用しておりません。
また、"テーブルにアクセスできない"というのは"テーブルの更新ができない"というわけではなく、"テーブル内容を表示するとエラーが発生してしまって内容の参照もできない"という状態です。

また、上記の方法でもエラーが発生しますが、2台目以降のPCでは"ツール"→"SQL"の操作を行っても同様のエラーが発生します。

以前は、複数台のPCでHSQLDBの共有を行っても、2台目以降のPCではテーブル更新ができなくなるだけでエラーの発生は確認できませんでした。

私としては、"なぜエラーが発生するようになったか"と"このエラーはHSQLDBを使っている限り目をつぶらなければならないものなのか"ということを知りたいです。

たびたびすいません。ご教授お願いします。

2台目以降のPCの環境は?

M.Kamataki (2008-09-10 17:19:58 (水))

>2台目以降のPCでは"ツール"→"SQL"の操作を行っても同様のエラーが発生します。
DBの共有が原因ではないような気がしてきました。2台目以降のPCで、オプション画面の「OpenOffice.org」−「Java」の表示はどうなっていますでしょうか。

たぶん、ベンダー欄はSun Microsysytems Inc.、バージョン欄は1.6.0_07と表示されていると思いますが、先頭のラジオボタンには正しくオンになっているでしょうか。

わたしのチェックがもれていましたが、
>データソースhogeへの接続が確立できませんでした。
というのは、通常、ドライバの登録がうまくいっていない場合のエラーです。HSQLDBの場合はJavaがらみの設定が疑われます。

JAVAの設定

けん (2008-09-10 17:52:36 (水))

>たぶん、ベンダー欄はSun Microsysytems Inc.、バージョン欄は1.6.0_07と表示されていると思いますが、先頭のラジオボタンには正しくオンになっているでしょうか。

その通りです。2台目以降のPCでも「OpenOffice.org」―「Java」の表示は1.6.0_07になっていて、ラジオボタンも適切な部分がOnになっています。

何がいけないのでしょうか?

すいません

けん (2008-09-10 23:38:51 (水))

他にどういう情報が必要でしょうか?

指示をもらえたら提供できる情報は提供します。

ちなみに、PC1・PC2でJavaのバージョンを1.6.0_06に替えてみたのですが、それでも結果は同じでした。

問題の切り分け

M.Kamataki (2008-09-11 12:17:27 (木))

2台目以降のPCで、独自に作成したHSQLDB形式のBaseファイルを作成してみてください。2台目以降のPCでそのBaseファイルに正しく接続できるのなら、OpenOffice.orgには問題がないのではと思います。この場合は、ネットワークの不具合が疑われます。

2台目以降のPCで、独自に作成したHSQLDB形式のBaseファイルの接続に失敗する場合は、faq/1/202「OOoの画面や設定がおかしくなってしまいました。」という過去の質問をご覧ください。Base関係では、faq/3/415「標準データベース(HSQLDB)のテーブルのフィールドの種類・属性を変更できない」という現象が直ったという報告があります。

試してみました

けん (2008-09-11 13:27:39 (木))

2台目以降のPCで独自にHSQLDB形式のBaseファイルを作成して接続を試してみました。

独自に作成したBaseファイル(piyo.odb)には正常に接続できます。
よって、ネットワークの不具合が疑われるのですが、ここでもう一つ試してみました。

hoge.odbと全く同じ場所に先ほど作成したpiyo.odbを置いてPC1とPC2から同時に接続してみたのですが、piyo.odbの共有を行った場合は例のエラーも発生せず、テーブルの参照・SQLウインドウの起動共に正常に実行完了しました。

なので、「環境に悪い部分があるわけではなく、hoge.odbに悪いところがある」という結論に至りそうです。(具体的に何が悪いのかは不明なのですが・・・)

このままでは、どうどう巡りになってしまいそうな問題なので、この問題はここでいったん解決としてしまいましょうか?

特定のファイルに問題がある場合

M.Kamataki (2008-09-11 16:19:34 (木))

もし、公開可能なファイルを作成できるようでしたら、IssueTrackerに問題のファイルを添付し、問題の再現手順を報告して、直接Baseの開発担当の方に見てもらう方法もあります。以下のIssueはすでに解決していますが、Issueへの報告の例として紹介しておきます。ご検討ください。

cannot access any HSQLDB data when connection pooling is enabled :
http://ja.openoffice.org/issues/show_bug.cgi?id=74732

これが例のDatabaseです

けん (2008-09-11 17:05:57 (木))

今回問題となっている
データベース:hoge.odb
拡張マクロ :hoge.oxt
です。

すいませんが、添削の方よろしくお願いします。

こちらでも検証しているのですが・・・

けん (2008-09-13 12:26:53 (土))

テーブルArrangeHistory以外の内容(他のテーブルの内容,ネットワークパス、マクロの内容 etc.)を全て同じにして、ArrangeHistoryのレコード数/レコード内容を変化させるだけで、例のエラーが発生する場合と発生しない場合があるみたいです。

ArrangeHistoryのレコード数/レコード内容がどういう条件の時に発生するのかは未だに不明です。

だいたいレコード数20件前後が一つのしきい値みたいです。

とりあず、ご報告まで。

確実にエラーが再現するサンプルを

M.Kamataki (2008-09-15 14:32:37 (月))

まず、仕事のためサンプルのチェックが遅くなり、申し訳ありません。

さて、チェックしてみましたが、わたしがこのサンプルでエラーを再現するためには、さらにエラーが起こるまでの再現手順の情報が必要です。フォームを使用されてテーブルにデータを追加するのだと思いますが、Basicに関するエラーが発生するので、フォームの操作で問題を再現するのは難しそうです。

しかし、PC1とPC2で同じファイルを開く際、PC2でエラーになるという問題を再現するサンプルであれば、そのような再現手順は必要ありません。このように確実にエラーが再現するサンプルはありませんでしょうか。

検証1

ike@九州 (2008-09-15 16:17:33 (月))

PC0 の共有フォルダに hoge.odb を置き、PC1、PC2にショートカットを作成してアクセスの検証をして見ました。

PC1 にて開き何も操作しないで 、次に PC2 から開き一度任意のテーブルを開き閉じます。
以降は PC1 にてレコード追加などの操作を行っても、PC2 からは正常にテーブル、クエリ参照接続できますが当然更新ボタンを押してもリアルタイムには更新されません。(リロードできない仕様?)

接続エラーが出る場合
PC1 にて開く。
PC2 にて開くのみで操作は何もなし
次に PC1 にてテーブル、クエリを1度でも開くとロックファイルができ、追加等しなくても
以降 PC2 からはテーブル、クエリ、フォームとも接続エラーとなる

私の環境ではこのようになりました。
PC1 のロックファイルが出来る前に、PC2 にてテーブルなどを一度開いておけば PC1 で更新作業を行った後でも PC2からはエラーは出なくなるという仕様のような気がしますけれど

再現手順

けん (2008-09-15 17:29:34 (月))

M.Kamatakiさん
まず、検証していただきありがとうございます。

こちらで確認できている接続エラー再現(する可能性が高い)手順ですが、以下の通りです。
1.PC1にてhoge.odbを開く
2.PC1にてテーブルArrangeHistoryのレコード件数が25件程度になるまでレコードの追加を行う
3.PC1にてhoge.odbを一度閉じる
4.PC1にてhoge.odb再び開き何も操作しない
5.PC2にてhoge.odbを開き、テーブル・クエリーの参照を試みる
6.;5.の結果接続エラーが発生する
7.一度、1.〜3.の操作を行うと以降は4.〜6.の操作で接続エラーが発生します
また、1.〜3.の操作の後、PC1にてテーブルを直接操作してレコードの削除を行いOpenOfficeを再起動すると、4.〜6.の操作でも接続エラーが発生しなくなります

フォームからレコードの登録を行う場合は、マクロのGeneralLibraryの中で定義されている定数sDBURLをそちらの環境に合わせて変更してください

すいません、こちらでも確実な再現手順は把握できておりません。上の手順で再現する可能性が高いとしか言えないです。
不確実な情報で申し訳ないのですが、検証の方よろしくお願いします。

P.S. 休みの日までお仕事お疲れ様です。

>ikeさん
検証していただきありがとうございます。
まず、自分以外の環境でも現象が再現することを確認できてある意味安心しました。

ikeさんに報告していただいた再現の手順ですが、上にも書いたとおりこちらの再現手順とほぼ同じです。
ただ、"接続エラーが出ない場合"の状況が少し異なります。

こちらの環境では一度接続エラーが発生すると、以降はPC1でhoge.odbを開いた後にPC2でテーブルを開こうとするだけでエラーが発生してしまいます。

よって、"PC1のロックファイルが出来る前に、PC2にてテーブルを開く"という行為が取れません。

どこか環境が異なるのでしょうか?
<(改めて)こちらの環境>
OS:Windows XP
DB:HSQLDB 1.8.0.10
JAVA:1.6.0_07
Ooo:2.4.1

確認の方、よろしくお願いします。

エラーメッセージは?

M.Kamataki (2008-09-15 22:45:09 (月))

当方でもike@九州さんの方法で、エラーが再現しました。以下の画像のエラーメッセージが表示されます。

faq4_1239_err.png

けんさんのところでも同じエラーメッセージは表示されていませんか。そうすると以下のIssueが該当するのではと思います。読み込み専用にしたファイルで起きていることですが、今回のケースも同じではないかと思います。キーワードが「regression」なので、以前のバージョンでは起きなかったという証言と一致します。

cannot connect to HSQLDB embedded in read-only database document :
http://ja.openoffice.org/issues/show_bug.cgi?id=93428

確認しました

けん (2008-09-16 13:05:37 (火))

こちらでもike@九州さんの方法でエラーが発生することを確認しました。

発生するエラーは上でM.Kamatakiさんが示してくれたエラーと同じものです。

たぶん、問題の根も上でM.Kamatakiさんが示してくれたIssueにあると思います。
とりあえず、今回は運用でカバーして、OOo 3.1がリリースされるのを待ちます。

協力、ありがとうございました。

IssueTracker登録済みにします

M.Kamataki (2008-09-16 14:45:48 (火))

ちなみにエラーメッセージで検索すると、OpenOffice.org Community Forumにも以下のような投稿がありました。同じ問題を指摘していると思います。

Connection problem :
http://user.services.openoffice.org/en/forum/viewtopic.php?f=13&t=5916&p=27920

ここで回答しているVilleroyさんは、わたしが最初に回答したようにHSQLDBよりは、本格的なDBを利用することをアドバイスしています。そして最後に「Accessのmdbファイルを共有する」というアイデアも披露しています。わたし自身は試していないので、ここでは書きませんでしたが、Villeroyさんのアイデアもありだと思います。

お名前:
題名:


添付ファイル: filefaq4_1239_err.png 586件 [詳細] filehoge.odb 669件 [詳細] filehoge.oxt 642件 [詳細]