Expdp及Impdp实现oracle数据库从10g到11gr2版本升级
一、第一部分,目的数据库安装
1、安装oracle11gr2,创建数据库,注意选择字符集us7ascii,修改内存参数,确定是共享服务器还是专用服务器。新数据库安装完成后有两控制文件
2、创建配置文件pfile并根据机器配置修改,然后再创建spfile,利用修改参数启动数据库
sql> create pfile='d:\inipfile.txt' from spfile='D:\app\Administrator\product\11.2.0\dbhome_1\database\SPFILEORCL.ora';
sql >create spfile='D:\app\Administrator\product\11.2.0\dbhome_1\database\SPFILEORCL.ora' from pfile='d:\inipfile.txt';
二、第二部分,源数据库导出数据
3、源数据库建立导出目录
c:> sqlplus / as sysdba
sql>create or replace directory backdata as 'd:\backdata'; --注意:d:\backdata一定要在服务器本地硬盘上,否则提示打不开文件
-- checkup directory
-- 删除目录 sql> drop directory backdata
SQL>select * from dba_directories where directory_name='BACKDATA';
SQL>select * from dba_directories where directory_name='DATA_PUMP_DIR';
4、在源数据库expdp导出数据
c:> D:\oracle\product\10.2.0\db_1\BIN\expdp.exe system/orasystem directory=BACKDATA dumpfile=orcldata.dmp logfile=expback.log parallel=5 full=y job_name=expfull
5、在源数据库生成目的数据库的表空间的语法,并在sqlplus 下执行生成相应表空间,注意从原数据库生成建立表空间语法时注意表空间的文件存储路径不同,需要替换。
set head off
set feedback off
set echo off
set termout off
set linesize 200
spool e:\creattsp.sql
remark create tablespace ;
Select 'Create TABLESPACE ' || tablespace_name || ' DATAFILE '||''''|| file_name ||''''||' SIZE ' || to_char(ROUND(bytes/1000000,0)) ||'M REUSE AUTOEXTEND ON NEXT 20M MAXSIZE UNLIMITED ;' from dba_data_files where tablespace_name not in ('SYSTEM','USERS','TEMP','SYSAUX','UNDOTBS1');
spool off;
三、目的数据库导入数据
6、利用建表空间语法在目录数据库建立相关表空间(由于升级导致存储路径改变,故要先建立表空间,也可以用remap_tablespace=old_tablespace1:newtablespace1, old_tablespace2:newtablespace2方法重定向)。若原路径导入,无需先建表空间
7、目的端数据库建立相应工作目录,如步骤3
8、将导出数据拷贝到目的数据库定义的本地工作目录,如d:\backdata
9、目的数据库执行导入任务(字符集若改变,需设置字符集)
c:> impdp system/manager directory=BACKDATA dumpfile=orcldata.dmp logfile=impback.log parallel=5 full=y job_name=impfull table_exists_action=REPLACE
10、执行脚本@D:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN\utlrp.sql,编译无效对象。
11、建立EM,编译无效对象
c:> emca -config dbcontrol db -repos recreate
建立EM后注意访问地址及端口号,有时是5500,有时是1158
四、导入导出错误处理
若导出过程失败,则先连接原任务,删除原任务
C:> expdp system/manager attach=EXPFULL -- EXPFULL为导出任务名称.
-- 在export 提示符下可以开始、结束导出任务等
export> stop_job
export> start_job
-- 删除任务
export> kill_job
导入任务失败,先删除原任务
C:> impdp system/manager attach=IMPFULL -- IMPFULL为导入任务名称.
-- 在import 提示符下可以开始、结束导出任务等
import> stop_job
import> start_job
-- 删除任务
import> kill_job