[20120918]exp要注意的问题CONSISTENT参数.txt

[20120918]exp要注意的问题CONSISTENT参数.txt

    前几天开发要导出一个schema做测试,因为新程序改动太大,要求导出一份该schema下的全部数据,开发导入后出现
一些错误,反馈日志log后,才发现是主外键的问题,原来我忘记在导出时加入参数CONSISTENT=y.

缺省这个参数是N.

今天做一个测试看看差别在哪里:

exp前先刷新共享池.
alter system flush shared_pool;
host exp sh/xxxxxx file=aaa.dmp direct=y
create table exp1 as select sql_text from v$sql where module like 'exp%'

alter system flush shared_pool;
host exp sh/xxxxxx file=aaa.dmp CONSISTENT=y direct=y
create table exp2 as select sql_text from v$sql where module like 'exp%'

对比exp1与exp2的差异:

SQL> select * from exp2 minus select * from exp1 ;

SQL_TEXT
--------------------------
SET TRANSACTION READ ONLY

SQL> select * from exp1 minus select * from exp2 ;
no rows selected

--可以发现差异仅仅在exp前,要执行SET TRANSACTION READ ONLY.设置事务只读.
--这样其他回话做DML操作,应该不会备份,如果备份事件很长,可能会出现ora-01555错误.

简单做一个SET TRANSACTION READ ONLY的测试:

SQL> create table t ( a number);
Table created.

session1:
insert into t values(1);
commit;
set transaction read only
SQL> select * from t;

         A
----------
         1

session2:
insert into t values(2);
commit;
SQL> select * from t;

         A
----------
         1
         2

--看见2条记录.

回到session1:
SQL> select * from t;

         A
----------
         1

--依旧仅仅看到1条记录.做一个插入看看:

SQL> insert into t values(3);
insert into t values(3)
            *
ERROR at line 1:
ORA-01456: may not perform. insert/delete/update operation inside a READ ONLY transaction
--出现ora-01456错误,无法在这个状态下执行DML语句.
--再建立1个索引看看.

SQL> create index i_t_id on t(a);
Index created.

SQL> select * from t;

         A
----------
         1
         2

--因为建立索引包含隐式提交,建立索引后能看到2条,同理commit,rollback也是一样的效果.

上一篇:微服务框架Spring Cloud 2021.0.1发布


下一篇:12、sed、awk、数组 学习笔记