作者:dbtan |【转载时请以超链接形式标明文章出处作者信息】


昨天做了这样一个工作,将一个“现网试用环境”下的一个用户(winks用户)数据导入到“开发库”中,为数据分析之用。

这是用EXP导出的文件:

[oracle@devdb: /u02/tq]$ll -th winks_20091110.dmp
-rw-r--r-- 1 oracle oinstall 1.8G Nov 10 13:32 winks_20091110.dmp

在开发库先做如下准备工作:

⑴ 创建表空间:
create tablespace winkscom datafile '/u02/app/oracle/oradata/winksdb/WINKSCOM.dbf' size 7G autoextend on next 100M;

⑵ 创建用户,并授权:
create user winkscom identified by ****** default tablespace winkscom;
grant connect,resource,dba to winkscom;     --由于是“开发库”,所以直接给了DBA权限

⑶ 为减少频繁switch redo log,加大了redo size(由原来的3组50M,加大到4组500M)

现在开始IMP导入:

$ imp userid=winkscom/****** file=winks_20091110.dmp RECORDLENGTH=65535 FROMUSER=winks touser=winkscom IGNORE=y STATISTICS=none log=imp_winks_20091110.log   -- ******是用户密码,这里就不明文显示了

导入时间大约16分钟:

Import terminated successfully with warnings.
46.40user 9.67system 15:56.41elapsed 5%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (15major+7337minor)pagefaults 0swaps

下面是导入时产生的alter日志,看一下加大redo size后,还会不会频繁switch redo log,甚至出现Checkpoint not complete呢?

====alter_ccdb.log====
create tablespace winkscom datafile '/u02/app/oracle/oradata/winksdb/WINKSCOM.dbf' size 7G autoextend on next 100M
Tue Nov 10 14:43:32 2009
Completed: create tablespace winkscom datafile '/u02/app/oracle/oradata/winksdb/WINKSCOM.dbf' size 7G autoextend on next 100M
Tue Nov 10 16:04:57 2009
Thread 1 cannot allocate new log, sequence 3417
Private strand flush not complete
  Current log# 2 seq# 3416 mem# 0: /u01/app/oracle/oradata/winksdb/redo02.log
Thread 1 advanced to log sequence 3417 (LGWR switch)
  Current log# 3 seq# 3417 mem# 0: /u01/app/oracle/oradata/winksdb/redo03.log
Tue Nov 10 16:05:56 2009
Thread 1 cannot allocate new log, sequence 3418
Private strand flush not complete
  Current log# 3 seq# 3417 mem# 0: /u01/app/oracle/oradata/winksdb/redo03.log
Thread 1 advanced to log sequence 3418 (LGWR switch)
  Current log# 4 seq# 3418 mem# 0: /u01/app/oracle/oradata/winksdb/redo04.log
Tue Nov 10 16:06:47 2009
Thread 1 cannot allocate new log, sequence 3419
Private strand flush not complete
  Current log# 4 seq# 3418 mem# 0: /u01/app/oracle/oradata/winksdb/redo04.log
Thread 1 advanced to log sequence 3419 (LGWR switch)
  Current log# 1 seq# 3419 mem# 0: /u01/app/oracle/oradata/winksdb/redo01.log
Tue Nov 10 16:15:24 2009
Thread 1 cannot allocate new log, sequence 3420
Private strand flush not complete
  Current log# 1 seq# 3419 mem# 0: /u01/app/oracle/oradata/winksdb/redo01.log
Thread 1 advanced to log sequence 3420 (LGWR switch)
  Current log# 2 seq# 3420 mem# 0: /u01/app/oracle/oradata/winksdb/redo02.log
====End alter_ccdb.log====

从alter日志看出,导入过程只切换了5次redo log,没有Checkpoint not complete。但是,出现在了3次Private strand flush not complete。

这里做一下Private strand flush not complete与Checkpoint not complete的区别解释:
strand:是10gr2引入的一个新的技术的术语,意思是在redo的生成和处理上,可以有更多的process来单独完成,这个叫做private strand。
Private strand flush not complete 只是由于日志产生的太多,无法及时写入Logfile。
而Checkpoint not complete 可能是日志产生太多,导致无法分配新的redolog,也可能是dbwr的出现了瓶颈,比如checkpoint太频繁,i/o太频繁等...
通常的办法,都可以通过增加日志组解决。

看来,如果当日再多加几组redo,可能就不会看到Private strand flush not complete了。

最后,备注一下环境:
源库版本:Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
目标库版本:Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
注:从源库导出时,是用11.1.0.6.0的EXP;导入到目标库时,是用11.1.0.7.0的IMP。没有报错,看来是兼容的。

- The End -