質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

3回答

5384閲覧

Oracleのユニークキーの有効化が失敗する

take-chan

総合スコア17

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2016/05/20 06:39

Oracleのユニークキーの無効化・有効化についてご教示ください。

以下SQLでユニークキーの無効化・有効化した時に、
7,8のSQLを実施した時に、対象のユニークキーが検索されないケースがあります。
検索される/されないどちらのケースも5のSQL実行時に特にエラーは発生しませんが、
なぜ7,8のSQLを実施した時に、
対象のユニークキーが検索されないケースが発生するのかわからないので、
どなたかご教示頂けないでしょうか?

1.alter table テーブル disable constraint インデックス名;
2.SELECT * FROM user_ind_columns;
3.SELECT * FROM user_indexs;
4.SELECT * FROM user_constraints;
5.alter table テーブル enable インデックス名;
6.SELECT * FROM user_ind_columns;
7.SELECT * FROM user_indexs;
8.SELECT * FROM user_constraints;

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

take-chan さん

実際に再現するか、殆ど同じ構成でやってみましたが、再現しませんでした。
Oracleのバージョンは12.1.0.2です。

ディクショナリのテーブルに存在しないということは、下記のどちらかだと思います。
0. 本当にINDEXオブジェクトが作られていない
0. INDEXオブジェクトが作られているが、ディクショナリが更新されない

上記切り分け出来そうでしょうか。

検索して実行計画から使用されていることを確認したり、もし未実施であればsysユーザでdba_objectsを検索してみるのもいいかもしれません。

また、もしOracleのサポート契約を結んでいれば、問合せするのが一番確実と思います。

投稿2016/06/02 12:13

編集2016/06/02 12:14
ka_ei

総合スコア207

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

私、知りたいので 確認させて頂けると。

まず、下記 SQLでは インデックスの無効・有効化をしていると思います。

1.alter table テーブル disable constraint インデックス名;

5.alter table テーブル enable インデックス名;

疑問に思われた

7,8のSQLを実施した時に、対象のユニークキーが検索されないケースがあります

このユニークキーとは、一意制約ではなく、 ユニークインデックスのことですか?
仮に、ユニークインデックスであれば、制約とは別になると思いますが・・・。

投稿2016/05/25 04:01

koutajero

総合スコア116

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

take-chan

2016/05/25 08:38 編集

回答ありがとうございます。 適切な用語を使用できておらず、申し訳ございません。 ご指摘の通りで、私の言っているユニークキーとは、 ユニークインデックスのことです。 それと質問内容に誤りがありましたので、 改めて、以下の通り、質問させて頂きます。 ********************************** Oracleのユニークインデックスの無効化・有効化についてご教示ください。 以下SQLでユニークインデックスの無効化・有効化した時に、 6,7のSQLを実施した時に、対象のユニークインデックスが検索されないケースがあります。 検索される/されないどちらのケースも5のSQL実行時に特にエラーは発生しませんが、 なぜ6,7のSQLを実施した時に、 対象のユニークインデックスが検索されないケースが発生するのかわからないので、 どなたかご教示頂けないでしょうか? 1.alter table テーブル disable constraint インデックス名; 2.SELECT * FROM user_ind_columns; 3.SELECT * FROM user_indexs; 4.SELECT * FROM user_constraints; 5.alter table テーブル enable constraint インデックス名; 6.SELECT * FROM user_ind_columns; 7.SELECT * FROM user_indexs; 8.SELECT * FROM user_constraints; ※修正箇所 1.  ユニークキー → ユニークインデックス 2.  7,8のSQL → 6,7のSQL 3.  alter table テーブル enable インデックス名;  →alter table テーブル enable constraint インデックス名; ********************************** 一意制約の有効化・無効化は成功しているのですが、 検索されないケースでは無効化時にユニークインデックスが 削除されてしまっているように見えます。 ただ前述の通り、検索されるケースもあるので、 一概に無効化時にユニークインデックスが削除されているわけではないように見えます。
koutajero

2016/05/25 08:16

1で、無効化にし、2・3での 検索結果では、ユニークインデックスが表示される。 5で、有効化にし、6・7での 検索結果では、ユニークインデックスが表示されない場合がある。 この認識で宜しいでしょうか? また、 2・6 user_ind_columns ⇒ ALL_IND_COLUMNS 3・7 user_indexs⇒ALL_INDEXES に変えて検索しても同じ結果になりますか?
koutajero

2016/05/25 08:21

追記 ALL_IND_COLUMNS/ALL_INDEXESで表示された場合、 自身のユーザ以外の索引になると思います。 (OWNER列で確認できると思います) ※1・5に関しては 権限があれば 自身のスキーマ以外の、ユニークインデックスを、有効・無効化することができます。
take-chan

2016/05/26 07:48

回答ありがとうございます。 確認したところ、ALL~でも検索されませんでした。 やはり無効化した時に削除されているように見えます。
koutajero

2016/05/26 08:37

そうですね。 >1.alter table テーブル disable constraint インデックス名; 上記のSQLだと インデックスが削除されますね。 メモメモ。。。。 インデックスの無効化は、 ALTER INDEX xxxxx UNUSABLE; SELECT INDEX_NAME,STATUS FROM USER_INDEXES; 結果、STATUS = UNUSABLE になると思います。 反対に、有効化は、 REBUILD にすればいいと思います。 勉強になりました~。ありがとうございました~。
guest

0

alter tableした時のユーザとselectした時のユーザが違っている。。。なんてことはないですよね。。。
変更した時は管理者ユーザで、検索した時は他のユーザでみたいな。。。

5.alter table テーブル enable インデックス名;

alter table テーブル enable constraint インデックス名;
にしてみても結果は同じでしょうか?
検索されない時は、SQLを何回実行しても結果は同じなのでしょうか?

手順や環境周りをもう少し詳細に教えていただけると、もうちょっと違った回答が得られるかも。

投稿2016/05/20 09:47

Tommy.103

総合スコア94

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

take-chan

2016/05/23 07:20

回答ありがとうございます。 alter table、selectの実行は同じユーザーで実行しております。 >検索されない時は、SQLを何回実行しても結果は同じなのでしょうか? 同じ結果となっております。 >alter table テーブル enable constraint インデックス名; >にしてみても結果は同じでしょうか? 申し訳ございません。 記載ミスで、以下構文のSQLを投入しております。 alter table テーブル enable constraint インデックス名; >手順や環境周りをもう少し詳細に教えていただけると、もうちょっと違った回答が得られるかも。 有効化対象としているユニークキーはどのように作成したかは、 別チームで対応した為、こちらでは作成時の手順は把握できておりません。 環境に関しては以下の通りです。 他に何か必要な情報あればご指摘をお願い致します。 〇DBサーバ構成 OS:Linux (RedHut) Oracleバージョン:12c RAC:RAC構成 〇クライアント ツール:teraterm + SQLPLUS
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問