激凹みから立ち直る方法

お世話になります
osCommerceを使用して作成したサイトで急にエラーが出るようになりました
アクセスしてすぐになる場合と注文や会員登録の作業を進めていく途中でなる場合があるのですが

1062 - Duplicate entry '1205370033' for key 1
update whos_online set customer_id = '', full_name = 'Guest', ip_address = '218.46.206.111', time_last_click = '1205370033', last_page_url = '/vlg3/catalog/create_account_process.php' where session_id = '7f40c149da7b2a43ddb74c0096e8bff2'

といった表示なります
for key 1はfor key 3 になっている時もあります
管理画面(admin)は正常に動いており、商品情報の変更などもできております
正常に注文完了まで行く時もあるのですがずっと不安定です

サーバーに相談すると
1. phpMyAdminにログイン
2. データベースのテーブル「session」を選択。
3. sess_idのフィールドの編集画面に入ります
4. 種別を「VARCHAR」から「INT」に、その他を「auto_increment」に変更します。
5. 保存するボタンを押します。
とご指導いただきましたがだめでした

osCommerceの公式メーリングリストでも相談させていただきphpMyAdminでテーブルチェックをするよう教えていただいたので実行すると「whos_online」に問題があるようだったので「エラーを修復をする」を実行しましたがやはりだめでした
このエラーが出てから全く注文が入らなくなり困っています
どなたかおわかりになる方、お手数をおかけいたしますがご教授いただきますよう何卒お願い申し上げます

A 回答 (2件)

osCommerceというのは、知りませんが。

。。

>1062 - Duplicate entry '1205370033' for key 1

意味としては、primary keyまたはuniqueで一意な値しか許さないようにしているのに、重複する値で更新しようとしてエラーになっています。

>for key 1はfor key 3 になっている時もあります

一つの表でprimary key、uniqueなど、一意性の制約を複数定義している場合、何番目の制約で違反になったかを示す値です。

>サーバーに相談すると
>1. phpMyAdminにログイン
>2. データベースのテーブル「session」を選択。
~中略~
>5. 保存するボタンを押します。
>とご指導いただきましたがだめでした

これは、session表のsess_id列の値を自動的に生成するという対処です。

今回提示されたエラーメッセージとSQLの対応が合っているなら、whos_online表のtime_last_click列で重複エラーが起こっているように見えます。

あちこちの掲示板やメーリングリストに同じ内容の質問すると、アドバイスしようとする側も、どれが最新の情報か分からなくなったり、既に解決したものがいつまでも回答受付中になっていて、混乱することがあります。

関連するURLを示したり、どちらかは一旦締め切ったり(再質問する場合は、前回質問のNoやURLを提示)といった対応をお願いします。

この回答への補足

chukenkenkou様
お忙しい中回答いただき誠にありがとうございます
詳細なご説明を頂きエラーの意味などよく理解できました
本当にありがとうございました

この「教えてgoo」に投稿させていただいたのはサーバーに聞いてもosCommerceメーリングリストに聞いても解決策が得られなかったからです
ですので現在他の掲示板等で回答受付中になっているわけでは
ありません。どうしたらよいかわからず途方にくれてこちらに質問させて頂いた次第です
質問をさせて頂くまでの過程を補足させてください

1、1062 - Duplicate entry '1205370033' for key 1…のエラーが突然出るようになる(何か設定をいじったりはしておりません)

2、サーバー(カゴヤ)に相談をし「session表のsess_id列の値を自動的に生成する」手順を教えていただく
 http://forums.oscommerce.com/index.php?showtopic …

3、改善されなかったのでosCommerceメーリングリスト(http://www.bitscope.co.jp/tep/ml.html)に相談をする

http://dev.mysql.com/doc/refman/4.1/ja/repair-ta …
http://dev.mysql.com/doc/refman/4.1/ja/corrupted … 

のURLをお教え頂きましたが当方の未熟さゆえどうすればよいかわからず…

再度同じ方が回答を下さり
http://lists.sourceforge.jp/mailman/archives/tep …
上記URLの内容の回答を頂いたので

1. phpMyAdminにログイン
2. osCで使用しているDBを選択
3. 「全てをマーク」
4. 「テーブルをチェックします。」

を実行しエラーが出ている「whos_online」の「エラーを修復する」を試みましたが現状は変わりませんでした
サーバーに修復依頼をしましたが代行作業はやっていないとの事で自分で解決策を見つけられずこちらに質問させて頂きました

「whos_online表のtime_last_click列で重複エラー」はどのようにすれば修復できるでしょうか?
もう一度osCommerceをインストールしなおしてサイトを作り直すしか方法はないのでしょうか?

お忙しい中ご面倒をおかけして本当に申し訳ございませんが
何卒ご教授いただきますようお願い申し上げます

補足日時:2008/03/15 07:29
    • good
    • 0

#1です。


ある程度、状況は分かりました。

今回問題になっている「whos_online」表は、kamelove22さんが自分で表の設計を行ったのではなく、osCommerceをインストールすることで作られる表なのですよね?

もし、自分で設計から行った表ならば、重複禁止にすべきキー項目の見直しをしたり、重複禁止の制約自体を外すことも可能です。また、「重複の原因究明」は取りあえず置いておいて、重複の起因となっている行、さらにはその行に関連する他表の行を削除して暫定対策する方法も考えられるでしょう。

ところがサイト側から提供されている表であれば、重複禁止を外したり起因となっている行を削除することで、システムとしての整合性が保てなくなる可能性が高いです。

>のURLをお教え頂きましたが当方の未熟さゆえどうすればよいかわからず…

これは、MySQLのMyISAMというタイプテーブルタイプの場合、サーバダウンなどの要因でデータとインデクスが不整合を起こした場合などに有効な修復方法です。

確認ですが、重複エラーが起こっているのは、whos_online表だけですか?
もしそうであれば、いつもtime_last_click列の更新でエラーになっている感じですか?

つまり、

1062 - Duplicate entry '1205370033' for key 1
update whos_online set customer_id = '', full_name = 'Guest', ip_address = '218.46.206.111', time_last_click = '1205370033',

Duplicate entry 'xxxx'
のように表示されたとき、
update whos_online set ... time_last_click = 'xxxx'
と、xxxxの部分には同じ値が入っていますか?

時刻データのように見えるのですが、一般的には、その列を単一で重複禁止にはしないと思うのですよね。。。瞬間的に複数の更新があると、同一値になってしまう可能性がありますからね。

SQLを入力できる状態で、
show indexes from whos_online
と入力すると、どういうインデクスが定義されているか分かるのですが、一応、見てみますか?解決に結びつかない可能性が高いですが、提供されている表定義やツール類が、絶対に誤りがない訳ではないですからね。

この回答への補足

chukenkenkou様

お忙しい中ご丁寧な返信を頂き誠にありがとうございます
いざエラーメッセージをチェックしようとすると正常に
ページが表示される事が多くなかなかエラーメッセージを確認できず
ご返答が遅れて誠にもうしわけございません

>Duplicate entry 'xxxx'
>のように表示されたとき、
>update whos_online set ... time_last_click = 'xxxx'
>と、xxxxの部分には同じ値が入っていますか?

これは表示されるたびに数値が変わっています

>確認ですが、重複エラーが起こっているのは、whos_online表だけですか?
>もしそうであれば、いつもtime_last_click列の更新でエラーになっている感じですか?

PHPmyadminで再度エラーチェックをしてみるとproducts_attributesでもエラーが出ました
これは以前はなく、whos_onlineだけだったんですが…

エラーメッセージは

テーブル `products_attributes` のインデックスに問題があります
カラム `products_attributes_id` に PRIMARY キーと INDEX キーを両方指定することはできません

テーブル `whos_online` のインデックスに問題があります
カラム `time_last_click` に PRIMARY キーと INDEX キーを両方指定することはできません
INDEX というキーがカラム `time_last_click` に複数作成されました
UNIQUE というキーがカラム `time_last_click` に複数作成されました
FULLTEXT というキーがカラム `time_last_click` に複数作成されました
カラム `session_id` に UNIQUE キーと INDEX キーを両方指定することはできません
INDEX というキーがカラム `session_id` に複数作成されました
UNIQUE というキーがカラム `session_id` に複数作成されました
FULLTEXT というキーがカラム `session_id` に複数作成されました
カラム `last_page_url` に UNIQUE キーと INDEX キーを両方指定することはできません
INDEX というキーがカラム `last_page_url` に複数作成されました
FULLTEXT というキーがカラム `last_page_url` に複数作成されました
カラム `time_entry` に UNIQUE キーと INDEX キーを両方指定することはできません
UNIQUE というキーがカラム `time_entry` に複数作成されました
FULLTEXT というキーがカラム `time_entry` に複数作成されました
INDEX というキーがカラム `ip_address` に複数作成されました
FULLTEXT というキーがカラム `ip_address` に複数作成されました
INDEX というキーがカラム `customer_id` に複数作成されました
FULLTEXT というキーがカラム `full_name` に複数作成されました

と、これだけたくさんのエラーが出ます

どうすれば修正できるでしょうか…?

>SQLを入力できる状態で、
>show indexes from whos_online
>と入力すると、どういうインデクスが定義されているか分かるのです>が、一応、見てみますか

もしよろしければ手順をご指導いただけますでしょうか?
ほかに聞ける人がないので甘えさせていただいてばかりで申し訳ございませんがご指導いただきますと幸いです

よろしくお願いいたします

補足日時:2008/03/18 12:46
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す