IF 条件 THEN
EXECUTE IMMEDIATE 'TRUNCATE 备份表1';
INSERT INTO 备份表1 SELECT * FROM 表1;
COMMIT;
EXECUTE IMMEDIATE 'TRUNCATE 表1';
BEGIN
EXECUTE IMMEDIATE 'DROP 索引1';
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
BEGIN
INSERT INTO 表1
SELECT 字段... FROM 表...;
COMMIT;
DELETE FROM 表1 WHERE 字段1 IS NULL;
DELETE FROM 表1 WHERE 字段2 IS NULL;
COMMIT;
DBMS_STATS.gather_table_stats(……);
BEGIN
EXECUTE IMMEDIATE 'CREATE 索引1 NOLOGGING TABLESPACE "INDEX"'
DBMS_STATS.gather_index_stats(……);
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
INSERT INTO 日志表1;
COMMIT;
EXCEPTION
WHEN OTHERS THEN --恢复
V_ERROR_MESSAGE := 'OTHER ERROR: '||substr(sqlerrm(SQLCODE),1,255);
INSERT INTO 日志表1;
EXECUTE IMMEDIATE 'TRUNCATE 表1';
INSERT INTO 表1 SELECT * FROM 备份表1;
COMMIT;
DBMS_STATS.gather_table_stats(……);
BEGIN
EXECUTE IMMEDIATE 'CREATE 索引1 NOLOGGING TABLESPACE "INDEX"';
DBMS_STATS.gather_index_stats(……);
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
END;
END IF;
------------------------------------
提问:1、恢复前的那个Exception(红色标注的),会由哪些操作触发呢?
2、为什么对表1插入数据后紧接着分析表1呢?分析有什么用,分析的结果在哪?同理,为什么创建索引后接着分析该索引呢?
3、创建索引时加的NOLOGGING TABLESPACE "INDEX"有什么用处?
EXECUTE IMMEDIATE 'TRUNCATE 备份表1';
INSERT INTO 备份表1 SELECT * FROM 表1;
COMMIT;
EXECUTE IMMEDIATE 'TRUNCATE 表1';
BEGIN
EXECUTE IMMEDIATE 'DROP 索引1';
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
BEGIN
INSERT INTO 表1
SELECT 字段... FROM 表...;
COMMIT;
DELETE FROM 表1 WHERE 字段1 IS NULL;
DELETE FROM 表1 WHERE 字段2 IS NULL;
COMMIT;
DBMS_STATS.gather_table_stats(……);
BEGIN
EXECUTE IMMEDIATE 'CREATE 索引1 NOLOGGING TABLESPACE "INDEX"'
DBMS_STATS.gather_index_stats(……);
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
INSERT INTO 日志表1;
COMMIT;
EXCEPTION
WHEN OTHERS THEN --恢复
V_ERROR_MESSAGE := 'OTHER ERROR: '||substr(sqlerrm(SQLCODE),1,255);
INSERT INTO 日志表1;
EXECUTE IMMEDIATE 'TRUNCATE 表1';
INSERT INTO 表1 SELECT * FROM 备份表1;
COMMIT;
DBMS_STATS.gather_table_stats(……);
BEGIN
EXECUTE IMMEDIATE 'CREATE 索引1 NOLOGGING TABLESPACE "INDEX"';
DBMS_STATS.gather_index_stats(……);
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
END;
END IF;
------------------------------------
提问:1、恢复前的那个Exception(红色标注的),会由哪些操作触发呢?
2、为什么对表1插入数据后紧接着分析表1呢?分析有什么用,分析的结果在哪?同理,为什么创建索引后接着分析该索引呢?
3、创建索引时加的NOLOGGING TABLESPACE "INDEX"有什么用处?
分析表后会在user_tables,还有user_indexes等其他系统表里面生产相应的数据。
你可以简单的新建一张表,然后查看user_tables表,然后在插入一些数据,
再分析表,然后在查看user_tables,对比一下前后的差别就明白了。