オブジェクト移行表領域で発生する3つの小さな問題
4242 ワード
開発ライブラリがあります.デフォルトの表領域はTESTです.TBSですが、今日開発ライブラリを見ていると、ユーザーがデフォルトで使用している表領域ではない表やフィールドもありますが、USERS表領域では、以前開発者がSQLを実行して他のライブラリからコピーした可能性があるため、tablespace USERS名に接続してコピーしました.規範化のために、これらのオブジェクトを下の表領域に移す必要があります.その間にいくつかのよくある小さな問題に出会ったので、記録する価値があります.
質問1:新しいテーブル、なぜdba_segmentsビューに対応するテーブルとインデックスレコードが見つかりませんか?実験:テーブルとインデックスを作成します.
dbaの取得segments検出レコードが空です.
すでに作成されているのに、なぜ空に表示されますか?テスト環境は11 gで、遅延割当セグメント空間という新しい特性があります.これは、前のバージョンのcreate tableのようにセグメント空間を割り当てるのではなく、実際に使用してからセグメント空間を割り当てることで、本当に節約することができます.実際に使用してこそ、あなたが作成しても、あなたに空間を与えることができます.セグメントスペースは最初に割り当てられません.たとえば、次のようにデータを挿入します.
この時点でrollbackになっても、次の文をクエリーすると、レコードが見つかります.
また、user_tablesとuser_indexesビューにはSEGMENT_が1つありますCREATEDフィールド、createの後、このフィールドの値はすべてNOで、上で本当に使用したように、このフィールドの値はYESになります.
質問2:テーブルとインデックス・オブジェクトをどのように移動しますか?これは、テーブルの移動に関する構文の問題です.
インデックスの移動には、次のように使用します.
次のようになります.
ここでonlineの解釈:
[ONLINE] Enables you to continue to perform updates, insertions, and deletions on a base table. It does not enable you to query the base table.
http://docs.oracle.com/cd/E11882_01/text.112/e24436/csql.htm#CCREF0100
さらに、移動するテーブルをすべて検索します.
移動するインデックスをすべて検索するには、次の手順に従います.
質問3:LOBオブジェクトはどのように移動しますか?user_からindexesビューでは、LOBオブジェクトをクエリーできます.LOBオブジェクトについて、上記のalter index方式で表領域を回転すると、次のようなプロンプトが表示されます.
ORA-02327:データ型LOBの式でインデックスを作成できません
次の構文を使用します.
http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_3001.htm#i2104128
質問1:新しいテーブル、なぜdba_segmentsビューに対応するテーブルとインデックスレコードが見つかりませんか?実験:テーブルとインデックスを作成します.
CREATE TABLE tbl_tbl(ID NUMBER);
CREATE INDEX idx_tbl_tbl ON tbl_tbl(ID);
dbaの取得segments検出レコードが空です.
SELECT * FROM dba_segments WHERE segment_name IN ('TBL_TBL', 'IDX_TBL_TBL');
すでに作成されているのに、なぜ空に表示されますか?テスト環境は11 gで、遅延割当セグメント空間という新しい特性があります.これは、前のバージョンのcreate tableのようにセグメント空間を割り当てるのではなく、実際に使用してからセグメント空間を割り当てることで、本当に節約することができます.実際に使用してこそ、あなたが作成しても、あなたに空間を与えることができます.セグメントスペースは最初に割り当てられません.たとえば、次のようにデータを挿入します.
INSERT INTO TBL_TBL VALUES(1);
この時点でrollbackになっても、次の文をクエリーすると、レコードが見つかります.
SELECT * FROM dba_segments WHERE segment_name IN ('TBL_TBL', 'IDX_TBL_TBL');
また、user_tablesとuser_indexesビューにはSEGMENT_が1つありますCREATEDフィールド、createの後、このフィールドの値はすべてNOで、上で本当に使用したように、このフィールドの値はYESになります.
質問2:テーブルとインデックス・オブジェクトをどのように移動しますか?これは、テーブルの移動に関する構文の問題です.
alter table XXX move tablespace TEST_TBS;
インデックスの移動には、次のように使用します.
alter index XXX move tablespace TEST_TBS;
次のようになります.
alter index XXX rebuild (online) tablespace TEST_TBS;
ここでonlineの解釈:
[ONLINE] Enables you to continue to perform updates, insertions, and deletions on a base table. It does not enable you to query the base table.
http://docs.oracle.com/cd/E11882_01/text.112/e24436/csql.htm#CCREF0100
さらに、移動するテーブルをすべて検索します.
SELECT 'alter table ' || table_name || ' move tablespace test_tbs;' FROM user_tables WHERE tablespace_name <> 'TEST_TBS';
移動するインデックスをすべて検索するには、次の手順に従います.
SELECT 'alter index ' || index_name || ' rebuild online tablespace test_tbs;' FROM user_indexes WHERE tablespace_name <> 'TEST_TBS';
質問3:LOBオブジェクトはどのように移動しますか?user_からindexesビューでは、LOBオブジェクトをクエリーできます.LOBオブジェクトについて、上記のalter index方式で表領域を回転すると、次のようなプロンプトが表示されます.
ORA-02327:データ型LOBの式でインデックスを作成できません
次の構文を使用します.
alter table XXX MOVE lob(LOB ) store as (tablespace test_tbs);
http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_3001.htm#i2104128