0

現在、db2 の開発マシンでデータベース テーブルのテスト バックアップと復元を行う際に問題が発生しています。完全に成功したことはありません。テーブルを削除して再作成した後、すべてのデータを復元できましたが、キーが一致しないという SQL エラーが発生したため、外部キー制約をリセットできませんでした。これが私の正確な手順です。完全に正しい方法ではないと確信していますが、最終的には 5423 行のデータを復元します。

プロセス

  1. ixf メッセージの /export/home/dale/comments.ixf にエクスポート /export/home/dale/msg.txt select * from .comments

    注: ステップ 1 では、5423 行のデータをある場所にエクスポートします

  2. テーブル .comments を削除

  3. ixf の /export/home/dale/comments.ixf からインポート .comments に作成

    注: ここの手順 3 では、テーブルが作成されますが、データ行は挿入されません。

  4. /export/home/dale/comments.ixf からクライアントを読み込み、identityoverride によって変更された ixf を .comments に置き換えます

    注: このステップまでは、再作成された db テーブルに 5423 行のデータを挿入できます。

  5. alter table .comments add FOREIGN KEY (comments_id) REFERENCES .news (article_key)

    注: ここで、alter table は、一部の comments_id が article_key と一致しないという db2 の苦情として失敗します

ここで私の問題を解決してくれる人はいますか? 前もって感謝します

4

2 に答える 2

0

このエラーは、コメントテーブルにインポートする行の一部がニューステーブルに存在しない行を参照していることを意味します。

制約が正しく形成されていない可能性があります。列名「comment_id」は、コメントテーブルの主キーのように聞こえます。Newsテーブルの主キーと一致する外部キーが必要です。「article_key」または「article_id」と呼ばれることもあります。

    ALTER TABLE Comments
      ADD FOREIGN KEY( article_key)
        REFERENCES News( article_key);

「comment_id」が実際には「Comments」テーブルの主キーではない場合、問題はニューステーブルとコメントテーブルの両方を同時にバックアップおよび復元しないことに起因します。

コメントテーブルと一緒にニューステーブルをエクスポートおよびインポートするか、次のようなもので欠落しているニュース行を参照するコメントを削除することができます。

    DELETE FROM Comments
      WHERE comments_id NOT IN (
        SELECT article_key
          FROM News
      )

これを行う前に、上記のクエリによって削除されるコメントを一覧表示してみてください。

    SELECT * 
      FROM Comments
      WHERE comments_id NOT IN (
        SELECT article_key
          FROM News
      )
于 2012-08-21T18:20:04.910 に答える
0

上記のコメントと同様に、問題の解決策を見つけました。

  1. user980717 は、間違った列を外部キーとして設定した最初の問題を解決しました
  2. 私の 2 番目の問題、つまり「SQL0668N Operation not allowed for reason code "1" on table "tablename". SQLSTATE=57016」については、次のコマンドを実行する必要があります。テーブルで定義された制約。そして、私の問題を解決するために尽力してくれたすべての人に感謝します。乾杯
于 2012-08-28T06:35:16.780 に答える