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;