根據(jù)all_objects創(chuàng)建一個空表,這個字典視圖用于填充big_table
create?table?big_table?as select?rownum?id,?a.* from?all_objects?a where?1=0 /
置這個表為NOLOGGING,為了提高性能。對于測試表使用NOLOGGING模式是安全的。
由于生產(chǎn)系統(tǒng)不會使用這樣一個測試表,所以不會啟用諸如oracle data guard之類的特性
alter?table?big_table?nologging;
用all_objects的內容填充表,然后迭代的插入其自身中,每次迭代會使表大小幾乎加倍。
declare l_cnt?number; l_rows?number?:=?&1; begin insert?/*+?APPEND?*/?into?big_table select?rownum?id,?a.* from?all_objects?a; l_cnt?:=?sql%rowcount; commit; while?(l_cnt?<?l_rows) loop insert?/*+?APPEND?*/?into?big_table select?rownum+l_cnt??id, ?OWNER, ?OBJECT_NAME, ?SUBOBJECT_NAME, ?OBJECT_ID, ?DATA_OBJECT_ID, ?OBJECT_TYPE, ?CREATED, ?LAST_DDL_TIME, ?TIMESTAMP, ?STATUS, ?TEMPORARY, ?GENERATED, ?SECONDARY, ?NAMESPACE, ?EDITION_NAME from?big_table where?rownum?<=?l_rows-l_cnt; l_cnt?:=?l_cnt?+?sql%rowcount; commit; end?loop; end; /
對這個表創(chuàng)建一個主鍵約束。
alter?table?big_table?add?constraint big_table_pk?primary?key(id) /
收集統(tǒng)計結果
begin dbms_stats.gather_table_stats (?ownname?=>?'scott', tabname?=>?'BIG_TABLE', method_opt?=>?'for?all?indexed?columns', cascade?=>?TRUE?); end; /
顯示表中的行數(shù)
select?count(*)?from?big_table;
結果:
scott@ORCL>@D:appAdministratorproduct11.2.0big_table.sql; 表已創(chuàng)建。 表已更改。 輸入?1?的值:??100000 原值????3:?l_rows?number?:=?&1; 新值????3:?l_rows?number?:=?100000; PL/SQL?過程已成功完成。 表已更改。 PL/SQL?過程已成功完成。 ??COUNT(*) ---------- ????100000