oracle数据迁移中的故障解决:
1、数据迁移之后,出现乱码问题
解决过程
a、使用select * from nls_database_parameters;命令查看源库中的字符集,内容可能如何。(这次故障按照下面字符集内容进行解决)
SQL> select * from nls_database_parameters;
......
......
NLS_NCHAR_CHARACTERSET
AL16UTF16
NLS_LANGUAGE
AMERICAN
PARAMETER
-------------------------------
NLS_NUMERIC_CHARACTERS
.,
NLS_CHARACTERSET
ZHS16GBK
NLS_CALENDAR
GREGORIAN
PARAMETER
------------------------------
......
b、在安装数据库实例中可以选择ZHS16GBK,简体中文字符集。
c、导出数据之前利用先在shell中执行下面命令
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
echo $NLS_LANG
d、执行了c步骤中的命令后,再用exp对数据进行备份。
e、在导入数据到新的oracle数据库之前,也在shell中执行下面命令。
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
echo $NLS_LANG
f、执行完e中的命令,再执行img导入命令
#####################################################################
2、 在导入数据库中出现下面错误:
故障类型1、
IMP-00017: following statement failed with ORACLE error 1917:
"GRANT SELECT ON "COMMENTD" TO "PORTAL3_INTERACTION""
IMP-00003: ORACLE error 1917 encountered
ORA-01917: user or role 'PORTAL3_INTERACTION' does not exist
根据上面的提示,很容易知道是不存在PORTAL3_INTERACTION这个用户,所以用下面命令进行创建用户。
create user PORTAL3_INTERACTION identified by PORTAL3_INTERACTION ;
grant connect,resource,dba to PORTAL3_INTERACTION;
######################################
故障类型2、
IMP-00017: following statement failed with ORACLE error 1917: OMS_SOURCE
"GRANT SELECT ON "CONTENT_DISPATCH" TO "CONTENT_STATS""
IMP-00003: ORACLE error 1917 encountered
ORA-01917: user or role 'CONTENT_STATS' does not exist
根据上面的故障提示:可以知道是数据库中不存在CONTENT_STATS这个表空间。
create tablespace CONTENT_STATS logging datafile '/data/oracle/app/oradata/CONTENT_STATS.dbf' size 5000m autoextend on next 5000m maxsize unlimited;
注意用上面的命令可以解决当前的故障,但是可能在下面还会继续提示有其他表空间你没有创建。
所以最好还是用下面命令查看你源库中存在哪些表空间,之后一次性把表空间都用上面命令创建好,再进行恢复。
select name,status from v$datafile;
######################################
故障类型3、
IMP-00058: ORACLE error 1691 encountered
ORA-01691: unable to extend lob segment OMS_BASIC.SYS_LOB0000067310C00011$$ by 1024 in tablespace OMS_BASIC
IMP-00018: partial import of previous table completed: 17188 rows imported
IMP-00017: following statement failed with ORACLE error 1658:
"CREATE INDEX "IDX_TPLCHECK_FLD" ON "TEMPLATE_CHECK" ("TPL_FLD_ID" ) PCTFRE"
"E 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 3145728 FREELISTS 1 FREELIST G"
"ROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "OMS_BASIC" LOGGING"
根据上面的故障提示:可以知道这是因为ORA-01691的错误问题,原因是表空间无法分配新的空间给表。
这个故障的原因有两种可能。
第一种:DataFile文件设定了大小,且设置不能自动增长。也就是用下面类型的命令创建表空间的。
create tablespace OMS_BASIC logging datafile '/data/oracle/app/oradata/OMS_BASIC.dbf' size 5000m ;
第二种:DataFile设定了大小,且设置为自动增长,已经到了32G的文件最大值上限。
create tablespace OMS_BASIC logging datafile '/data/oracle/app/oradata/OMS_BASIC.dbf' size 5000m autoextend on next 5000m maxsize unlimited;
解决办法:
针对第一种原因。我们解决的办法是利用下面命令让数据库表空间可以自动增长
create tablespace OMS_BASIC logging datafile '/data/oracle/app/oradata/OMS_BASIC.dbf' size 5000m autoextend on next 5000m maxsize unlimited;
针对第二种原因。我们可以给表空间增加多个新的数据文件。
alter tablespace OMS_BASIC add datafile '/data/oracle/app/oradata/OMS_BASIC_01.dbf' SIZE 1000M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED;
alter tablespace OMS_BASIC add datafile '/data/oracle/app/oradata/OMS_BASIC_02.dbf' SIZE 1000M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED;