这两天对eas账套进行了备份还原操作,备份操作基本上没问题,但是在还原时,出现了如下报错,折腾了很久,在网上搜索了一通,发现国内的网站给出的答案都是把出错的语句修改后重新执行,可是我这里有2000多个错误,重新执行不可能。后来在国外的网站看到了问题的原因:oracle数据库版本11.2.0.1是存在这样的问题,需要升级数据库到11.2.0.4。于是又进行oracle升级操作,基本上按网上的步骤升级完成,可是受不了升级后系统里面有两个oracle目录,于是就又把数据库卸载了,按网上的步骤卸载并且删除注册表,好在卸载干净了,于是重新安装了11.2.0.4版本数据库,最后进行eas账套还原,基本上没问题了。两次还原时的报错截图如下:
在数据库11.2.0.1下的还原操作的报错:
在11.2.0.4版本数据库下还原的错误,总共只有2个错误,后来进还原账套操作了一下,发现一切正常。
备份语句如下:
--数据泵导出
sqlplus / as sysdba
CREATE DIRECTORY dump AS 'C:\shuju';
grant read, write on directory dump to eas802;
quit
expdp eas802/eas802 DIRECTORY=dump DUMPFILE=eas1712.dmp logfile=expdp_eas1712.log
还原语句如下:
1、先创建表空间。
但是创建表空间之前要先查询之前备份的账套所使用的表空间个数及名称,后续需要使用到。
--查询表空间使用情况的语句,记得通过pl/sql developer窗口中执行下列语句,在cmd窗口中执行不会返回结果。
declare
userName varchar(20):='skyline'; -----修改skyline为实际导出账套的用户名
tablespace_name varchar(50);
user_name varchar(20);
cursor tablespace_cur(user_name in varchar) is
select a.tablespace_name tablespace_name, b.owner owner
from dba_segments a
inner join dba_objects b on a.segment_name=b.object_name
where b.owner=upper(user_name) and a.owner=upper(user_name)
group by b.OWNER, a.tablespace_name;
begin
open tablespace_cur(userName);
loop
fetch tablespace_cur into tablespace_name,user_name;
exit when tablespace_cur%notfound;
dbms_output.put_line(tablespace_name||' '||user_name);
end loop;
close tablespace_cur;
end;
---查询出的两个表空间名称记录下来,后面的语句要用到。
---创建表空间,上一步查询出来的表空间是2个,还要一个临时表空间,所以下面一共新建三个表空间。后来的语句中需要用到。
create tablespace EAS_D_EAS123_INDEX datafile 'C:\shuju\EAS_D_EAS123_INDEX.dbf' size 10000M autoextend ON next 100M maxsize 32000M;
create tablespace EAS_D_EAS123_STANDARD datafile 'C:\shuju\EAS_D_EAS123_STANDARD.dbf' size 10000M autoextend ON next 100M maxsize 32000M;
create temporary tablespace EAS_T_EAS123_STANDARD tempfile 'C:\shuju\EAS_T_EAS123_STANDARD.dbf' size 1000M autoextend ON next 100M maxsize 10000M;
2、数据泵导入语句:
sqlplus / as sysdba
CREATE USER eas_zl IDENTIFIED BY a DEFAULT TABLESPACE EAS_D_EAS123_STANDARD TEMPORARY TABLESPACE EAS_T_EAS123_STANDARD;
GRANT connect,dba to eas_zl;
CREATE OR REPLACE DIRECTORY dump AS 'C:\shuju';
grant read, write on directory dump to eas_zl;
quit
impdp eas_zl/a@eas802 DIRECTORY=dump logfile=imp.log DUMPFILE=eas1712.dmp REMAP_SCHEMA=eas802:eas_zl remap_tablespace=EAS_D_EAS802_STANDARD:EAS_D_EAS123_STANDARD remap_tablespace=EAS_D_EAS802_INDEX:EAS_D_EAS123_INDEX
---注意上面语句中的REMAP_SCHEMA和remap_tablespace的用法。