1、目标需求
1. 单表1亿条(包含10个列,字段包含int、varchar、date等常用类型)
2. 多表10亿条(10个1亿的表)
3. 写入方式不限
2、方案原理
1. for in 循环,实现自动循环插入数据。
2. insert /*+ append */ into,提升了数据插入效率。
Append使用时注意以下3点:
a. 非归档模式下,只需append就能大量减少redo的产生;
b. 归档模式下,只有append+nologging才能大量减少redo。
c. insert /*+ append */ 直接路径加载,从HWM的位置开始插入,速度比常规加载方式更效率。
3. 通过备份还原的方式实现多表10亿条数据。
4. 通过对单表的1次备份多次还原实现多表10亿条数据。
3、单表1亿条数据的操作步骤
1、查看数据库当前归档模式。
备注:归档模式和非归档模式都可以。
2、创建测试表TEST_01。
-- CREATE TABLE
CREATE TABLE TEST_01
(
"序号" INT,
"姓名" VARCHAR(20),
"工号" CHAR(8),
"性别" CHAR(2),
"年龄" CHAR(3),
"部门" VARCHAR(40),
"工资" DEC(8,2),
"工作地点" VARCHAR(20),
"建档时间" DATE,
"备注" TEXT
);
3、创建用于提供序列号的表T_SEQ。
--创建一个临时表,用于在循环插入数据时提供序列号
CREATE GLOBAL TEMPORARY table T_SEQ(SEQ NUMBER(10) NOT NULL)ON COMMIT PRESERVE ROWS;
4、向TEST_01中插入数据。
--开始插入数据
BEGIN
DELETE FROM T_SEQ;
FOR I IN 1..1000000 LOOP
INSERT INTO T_SEQ(SEQ) VALUES(I);
END LOOP;
FOR I IN 1..100 LOOP
INSERT /*+ APPEND */ INTO TEST_01
SELECT SEQ,'张三', 10001, '男', 38, '销售部', 8000, '武汉', SYSDATE, NULL FROM T_SEQ;
COMMIT;
END LOOP;
END;
/
插入操作耗时:42分200毫秒。
5、验证数据条数。
4、多表10亿条的操作步骤
1、创建10张空表,表结构与TEST_0相同。
CREATE TABLE TEST_02 AS SELECT * FROM TEST_01 WHERE 2=1;
CREATE TABLE TEST_03 AS SELECT * FROM TEST_01 WHERE 2=1;
CREATE TABLE TEST_04 AS SELECT * FROM TEST_01 WHERE 2=1;
CREATE TABLE TEST_05 AS SELECT * FROM TEST_01 WHERE 2=1;
CREATE TABLE TEST_06 AS SELECT * FROM TEST_01 WHERE 2=1;
CREATE TABLE TEST_07 AS SELECT * FROM TEST_01 WHERE 2=1;
CREATE TABLE TEST_08 AS SELECT * FROM TEST_01 WHERE 2=1;
CREATE TABLE TEST_09 AS SELECT * FROM TEST_01 WHERE 2=1;
CREATE TABLE TEST_10 AS SELECT * FROM TEST_01 WHERE 2=1;
CREATE TABLE TEST_11 AS SELECT * FROM TEST_01 WHERE 2=1;
以上操作耗时趋近于0。
2、备份表TEST_01。
BACKUP TABLE "TEST_01" TO "TAB_TEST_01_BAK";
备份耗时:12分21秒558毫秒。
3、将TEST_01的备份集还原到TEST_02至TEST_11这10张表中。
restore table "TEST_02" without index without constraint from backupset '/dm8/data/DMDB/bak/TAB_TEST_01_BTREE_20220618_145422_772659' device type disk;
restore table "TEST_03" without index without constraint from backupset '/dm8/data/DMDB/bak/TAB_TEST_01_BTREE_20220618_145422_772659' device type disk;
restore table "TEST_04" without index without constraint from backupset '/dm8/data/DMDB/bak/TAB_TEST_01_BTREE_20220618_145422_772659' device type disk;
restore table "TEST_05" without index without constraint from backupset '/dm8/data/DMDB/bak/TAB_TEST_01_BTREE_20220618_145422_772659' device type disk;
restore table "TEST_06" without index without constraint from backupset '/dm8/data/DMDB/bak/TAB_TEST_01_BTREE_20220618_145422_772659' device type disk;
restore table "TEST_07" without index without constraint from backupset '/dm8/data/DMDB/bak/TAB_TEST_01_BTREE_20220618_145422_772659' device type disk;
restore table "TEST_08" without index without constraint from backupset '/dm8/data/DMDB/bak/TAB_TEST_01_BTREE_20220618_145422_772659' device type disk;
restore table "TEST_09" without index without constraint from backupset '/dm8/data/DMDB/bak/TAB_TEST_01_BTREE_20220618_145422_772659' device type disk;
restore table "TEST_10" without index without constraint from backupset '/dm8/data/DMDB/bak/TAB_TEST_01_BTREE_20220618_145422_772659' device type disk;
restore table "TEST_11" without index without constraint from backupset '/dm8/data/DMDB/bak/TAB_TEST_01_BTREE_20220618_145422_772659' device type disk;
每张表还原耗时:11分57秒。
完成10张1亿条数据表的还原,总共耗时约2小时。
4、验证数据条数。
社区地址:https://eco.dameng.com