【ORACLE】Oracle测试常用表BIG_TABLE创建脚本

Oracle测试常用表BIG_TABLE创建脚本

DBA经常用到的创建测试用表,通常都是基于dba_objects来创建的比较多。
本文根据Tom大师的big_table进行了整理,供大家参考。

一、基于Oracle 10g下的big_table.sql

--============================================== 
-- Create a test table for Oracle 10g 
-- File : cr_big_tb_10g.sql 
-- Author : Robinson 
--============================================== 

prompt 
prompt Create a big table from all_objects 
prompt ====================================== 
CREATE TABLE big_table 
AS 
SELECT ROWNUM id, a.* 
FROM all_objects a 
WHERE 1=0; 

prompt 
prompt Modify table to nologgming mode 
prompt ========================== 
ALTER TABLE big_table NOLOGGING; 

prompt 
prompt Please input rows number to fill into big_table 
prompt ============================================ 
DECLARE 
        l_cnt NUMBER; 
        l_rows NUMBER := &1; 
BEGIN 
        INSERT /*+ append */ 
        INTO big_table 
                SELECT rownum, 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 
                             ,owner 
                             ,object_name 
                             ,subobject_name 
                             ,object_id 
                             ,data_object_id 
                             ,object_type 
                             ,created 
                             ,last_ddl_time 
                             ,TIMESTAMP 
                             ,status 
                             ,temporary 
                             ,generated 
                             ,secondary 
                        FROM big_table 
                        WHERE rownum <= l_rows - l_cnt; 
                l_cnt := l_cnt + SQL%ROWCOUNT; 
                COMMIT; 
        END LOOP; 
END; 
/ 

prompt 
prompt Add primary key for big table 
prompt ===================================== 
ALTER TABLE big_table ADD CONSTRAINT 
big_table_pk PRIMARY KEY (id); 

prompt 
prompt Gather statistics for big_table 
prompt ===================================== 
BEGIN 
        dbms_stats.gather_table_stats(ownname => USER, 
                                     tabname => 'BIG_TABLE', 
                                     method_opt => 'for all indexed columns', 
                                     cascade => TRUE); 
END; 
/ 

prompt 
prompt check total rows for big_table 
prompt ==================================== 

SELECT COUNT(*) FROM big_table;

二、基于Oracle 11g下的big_table.sql

--============================================== 
-- Create a test table for Oracle 11g 
-- File : cr_big_tb_11g.sql 
-- Author : Robinson 
--============================================== 

prompt 
prompt Create a big table from all_objects 
prompt ====================================== 
CREATE TABLE big_table 
AS 
SELECT ROWNUM id, a.* 
FROM all_objects a 
WHERE 1=0; 

prompt 
prompt Modify table to nologgming mode 
prompt ========================== 
ALTER TABLE big_table NOLOGGING; 

prompt 
prompt Please input rows number to fill into big_table 
prompt ============================================ 
DECLARE 
        l_cnt NUMBER; 
        l_rows NUMBER := &1; 
BEGIN 
        INSERT /*+ append */ 
        INTO big_table 
                SELECT rownum, 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 
                             ,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; 
/ 

prompt 
prompt Add primary key for big table 
prompt ===================================== 
ALTER TABLE big_table ADD CONSTRAINT 
big_table_pk PRIMARY KEY (id); 

prompt 
prompt Gather statistics for big_table 
prompt ===================================== 
BEGIN 
        dbms_stats.gather_table_stats(ownname => USER, 
                                     tabname => 'BIG_TABLE', 
                                     method_opt => 'for all indexed columns', 
                                     cascade => TRUE); 
END; 
/ 

prompt 
prompt check total rows for big_table 
prompt ==================================== 

SELECT COUNT(*) FROM big_table;

三、说明
1、该脚本根据Tom大师的原代码big_table整理而成。
2、Oracle 11g all_objects 比Oracle 10g 多出两列,因此使用了2个不同的版本。
3、big_table的id列为唯一值,并在之上创建了primary key。
4、对于该表测试redo等相关信息是应启用logging模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值