天做一个Oracle迁移的测试,使用expdp和impdp。导出文件大小为24G。版本为10.2.0.4。
在导入的过程中,遇到几个问题。
impdp USERNAME/PASSWORD directory=test dumpfile=test.dmp logfile=import.log parallel=20
第一个问题,因为目标的Oracle数据库是新建的,并且启动了归档模式。
但是db_recovery_file_dest_size参数没有修改,默认2G。因为不能归档,导致导入失败。
告警日志如下所示:
-
ARCH: Archival stopped, error occurred. Will continue retrying
-
Thu Apr 17 17:30:17 2014
-
ORACLE Instance orcl - Archival Error
-
Thu Apr 17 17:30:17 2014
-
ORA-16038: log 2 sequence# 47 cannot be archived
-
ORA-19809: limit exceeded for recovery files
-
ORA-00312: online log 2 thread 1: '/data/dblog/redo02.log'
第二个问题,在导入索引的时候,有如下报错
-
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
-
ORA-39083: Object type INDEX failed to create with error:
-
ORA-01652: unable to extend temp segment by 8192 in tablespace USERS
-
Failing sql is:
-
CREATE UNIQUE INDEX \"XXX\".\"XXXX_PK\" ON \"XXX\".\"XXXX\"
网上一个大牛给了一个解释,因为导入索引,导致排序操作,在PGA里面空间不足,所以使用了临时表空间。
进行如下操作,增加临时表空间的大小并设置用户表空间自动扩展。
-
alter
database
tempfile
'/dbdata/oracledata/mvbox/temp01.dbf'
resize 20G
;
-
alter
database
tempfile
'/dbdata/oracledata/mvbox/temp01.dbf'
autoextend
on
next 100M
;
-
alter
database
datafile
'/dbdata/oracledata/mvbox/users01.dbf'
autoextend
on
next 100M maxsize unlimited
;
但还是报这个错误。
后来发现,
Oracle 8k的数据块单个数据文件的上限是32G,所以需要增加数据文件。
-
alter
tablespace
users
add
datafile
'/dbdata/oracledata/mvbox/users02.dbf'
size
20G autoextend
on
next 100M maxsize unlimited
;
导入完成之后的操作
1.查看并编译失效对象
exec dbms_utility.compile_schema('MVBOX_DB');
2.分析模式
exec dbms_stats.gather_schema_stats('MVBOX_DB');
这种长时间的操作,还是应该使用at调度的。
因为使用ssh或者vpn连接,一旦连接断了,导入也就终止了。
另外Oracle 10G 创建用户如果没有指定临时表空间,他会使用System作为临时表空间。
在以后的版本,默认都是temp临时表空间。
创建用户
查看默认的临时表空间
使用System作为临时表空间问题很多。
经常出现如下报错
-
ORA-03212: Temporary Segment cannot be created in locally-managed tablespace
修改用户临时表空间
-
alter user test temporary tablespace temp;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31547066/viewspace-2689751/,如需转载,请注明出处,否则将追究法律责任。