Linux(x64)で実行されているOracle 11g(11.2.0.1)データベースがあります。データベース内には、スキーマとそのための33個のテーブルがあります(すべて同じテーブルスペースにあります)。 sqlplus経由でログインすると、経由ですべてのテーブルを一覧表示できます。
SELECT OBJECT_NAME FROM USER_OBJECTS WHERE OBJECT_TYPE = 'TABLE';
しかし、を使用してテーブルスペースをエクスポートすると
exp ... BUFFER=65536 FULL=N COMPRESS=N CONSISTENT=Y TABLESPACES=... FILE=...
次に、33個のテーブルのうち24個のみをエクスポートします。不足しているテーブルを次の方法でエクスポートしようとしました
exp ... TABLES=<missing_table> ...
しかし、エラーが発生します。
EXP-00011: <schema>.<missing_table> does not exist
ここで何が問題なのかを知るにはどうすればよいですか?
すべてのテーブルをエクスポートするにはどうすればよいですか?
更新:
ゲイリーの助言を聞いた後、私はエクスポートされたテーブルと欠落しているテーブルの間に以下の違いを見つけました。エクスポートされたテーブルのDDL:
CREATE TABLE "MY_SCHEMA"."EXPORTED_TABLE" ( ... ) TABLESPACE "MY_TS" PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE ( INITIAL 64K BUFFER_POOL DEFAULT) LOGGING NOCOMPRESS
そして今、エクスポートされていないテーブルのDDL:
CREATE TABLE "MY_SCHEMA"."MISSING_TABLE" ( ... ) TABLESPACE "MY_TS" PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE ( BUFFER_POOL DEFAULT) LOGGING NOCOMPRESS
上記のDDLは、EnterpriseManagerによって生成されました。 sqlplusで作成されたものには、不足しているテーブルのSTORAGEセクションはまったくありませんが含まれていました。
テーブルを再編成してSTORAGEINITIAL値を64Kに設定すると、テーブルがエクスポートされることがわかりました。
問題が解決しました。 (うまくいけば;))
機能するテーブルと機能しないテーブルの1つに対してSELECT DBMS_METADATA.GET_DDL('TABLE','yourTableName')
を実行します。次に、違いを見つけるプレイ。 (yourTableName
は大文字と小文字が区別されることに注意してください。)
BLOB/CLOBまたは別のテーブルスペース内のパーティション、エクスポートされていない別のスキーマが所有するTYPEへの依存関係などが考えられます...
Oracle 11gR2(11.2.0.1)以降、新機能があります。遅延セグメント作成:送信されるテーブルの作成は、最初の行が挿入されるまで延期されます。これにより、空のテーブルがdba_segmentsにリストされず、expユーティリティによってエクスポートされません。
最も簡単な解決策は、expdpユーティリティを使用することです。
Expユーティリティを使用する必要がある場合は、空のテーブルすべてに対してこのコマンドを実行する必要があります。
ALTER TABLE tablename ALLOCATE EXTENTS
テーブルはDBに存在しますが、このテーブルにエクステントを割り当てない限り、エクスポートすることはできません…。
経過:00:00:00.04 14:44:54 PIMUSER @mdmqa>テーブルの変更RECORDAPPROVALHISTORY割り当て範囲;
同様のエラーが発生し、同義語にも関係があると思います。
データベース内の特定のテーブルを記述して、そこから選択できます(ゼロ行)。パブリックシノニムからの選択についても説明できます
しかし、そのテーブルをエクスポートすると、011が存在しないというエラー、名前、または概要が表示されます。 (1つの問題を解決する)行を挿入すると、テーブル名でエクスポートできますが、シノニムではエクスポートできません。
もちろん、これはすべて11.1で機能していました。
最初にexpdpについて聞いたことがあります。それを見ていきます
割り当て範囲は機能します。次のステートメントでテーブルを見つけることができます。
select 'alter table '||table_Name||' allocate extent;' from user_Tables where temporary='N' and table_name not in (select segment_name from user_segments)
これは、Oracle11の新機能です。 Enterpriseエディションのみ。空のテーブルはエクスポートされません。
エクスポートするのと同じテーブルスペース内のテーブルはありますか?このクエリで確認してください:
SELECT table_name, tablespace_name FROM user_tables