> 数据库 > Oracle >

Oracle备份与恢复系列 五 续 EXP/IMP迁移、复制数据库

迁移数据库可以采用三种方式。首先可以采用操作系统的文件拷贝进行物理数据库的还原和恢复,并重新创建数据库控制文件。其次可以用Oracle Export和Import工具将原数据库逻辑还原到一个新的数据库。最后可以用Oracle恢复管理器RMAN进行数据文件和可控制文件的一个物理还原。
迁移数据库不像复制word文档那样简单。需要注意Oracle中三种类型的文件(数据文件、重做日志文件和控制文件)必须协调一致。

本次试验采用EXP/IMP的逻辑备份方式把Oracel 11g 11.2.0.3 RAC复制到Oracle 11g 11.2.0.3单实例数据库上。试验步骤如下

1,在新主机DBCA建库,实例名和原主机数据库名一致
2,在新主机创建用户
3,dbms_metadata.get_ddl导出表空间生成语句
4,在新主机创建表空间
5,exp导出原库全部数据
6,imp导入复制数据库

注意原库的字符集
SYS@devdb1 >select userenv('language') from dual;

USERENV('LANGUAGE')
--------------------------------------------------------------------------------
AMERICAN_AMERICA.WE8MSWIN1252


1,在新主机DBCA建库
步骤省略,注意实例名与原库数据库名一致,这里采用devdb

2,在新主机创建用户
查看原主机用户
SYS@devdb1 >select username from dba_users order by username;

在复制主机上创建原主机用户
SQL> create user TPCC identified by tpcc;
SQL> create user SNOW identified by snow;

3,dbms_metadata.get_ddl导出表空间生成语句
查看原主机表空间
SYS@devdb1 >select name from v$tablespace;

生成原主机表空间创建语句
SYS@devdb1 >set linesize 200
SYS@devdb1 >set long 999999
SYS@devdb1 >SELECT DBMS_METADATA.GET_DDL('TABLESPACE', GOLDENGATE) FROM dba_tablespaces;

CREATE TABLESPACE "GOLDENGATE" DATAFILE
  '+DATA/devdb/datafile/goldengate.dbf' SIZE 104857600
  AUTOEXTEND ON NEXT 8192 MAXSIZE 32767M
  LOGGING ONLINE PERMANENT BLOCKSIZE 8192
  EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT
 NOCOMPRESS  SEGMENT SPACE MANAGEMENT AUTO

根据导出的创建表空间语句修改成我们需要的创建语句
CREATE TABLESPACE "GOLDENGATE" DATAFILE
  '/u01/app/oracle/oradata/devdb/goldengate.dbf' SIZE 104857600 AUTOEXTEND ON;

SYS@devdb1 >SELECT DBMS_METADATA.GET_DDL('TABLESPACE','EXAMPLE') from dba_tablespaces;
CREATE TABLESPACE "EXAMPLE" DATAFILE
  SIZE 104857600
  AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M

  NOLOGGING ONLINE PERMANENT BLOCKSIZE 8192
  EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT
 NOCOMPRESS  SEGMENT SPACE MANAGEMENT AUTO
   ALTER DATABASE DATAFILE
  '+DATA/devdb/datafile/example.264.853490879' RESIZE 32
8335360

根据导出的创建表空间语句修改成我们需要的创建语句
CREATE TABLESPACE "EXAMPLE" DATAFILE
  '/u01/app/oracle/oradata/devdb/example.dbf' SIZE 104857600 AUTOEXTEND ON;


SYS@devdb1 >SELECT DBMS_METADATA.GET_DDL('TABLESPACE','TOOLS') from dual;

CREATE TABLESPACE "TOOLS" DATAFILE
  SIZE 20971520
  AUTOEXTEND ON NEXT 20971520 MAXSIZE 32767M
  LOGGING ONLINE PERMANENT BLOCKSIZE 8192
  EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT
 NOCOMPRESS  SEGMENT SPACE MANAGEMENT AUTO

根据导出的创建表空间语句修改成我们需要的创建语句
CREATE TABLESPACE TOOLS DATAFILE '/u01/app/oracle/oradata/devdb/tools01.dbf.dbf' SIZE 20971520 AUTOEXTEND ON;

SYS@devdb1 >SELECT DBMS_METADATA.GET_DDL(‘TABLESPACE','INDX') from dual;

  CREATE TABLESPACE "INDX" DATAFILE
  SIZE 20971520
  AUTOEXTEND ON NEXT 20971520 MAXSIZE 32767M
  LOGGING ONLINE PERMANENT BLOCKSIZE 8192

  EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT
 NOCOMPRESS  SEGMENT SPACE MANAGEMENT AUTO

根据导出的创建表空间语句修改成我们需要的创建语句
CREATE TABLESPACE INDX DATAFILE '/u01/app/oracle/oradata/devdb/indx01.dbf.dbf' SIZE 20971520 AUTOEXTEND ON;
 
4,在新主机创建表空间
SQL> CREATE TABLESPACE "GOLDENGATE” DATAFILE '/u01/app/oracle/oradata/devdb/goldengate.dbf' SIZE 104857600 AUTOEXTEND ON;
SQL> CREATE TABLESPACE "EXAMPLE” DATAFILE '/u01/app/oracle/oradata/devdb/example.dbf' SIZE 104857600 AUTOEXTEND ON;
SQL> CREATE TABLESPACE TOOLS DATAFILE '/u01/app/oracle/oradata/devdb/tools01.dbf.dbf' SIZE 20971520 AUTOEXTEND ON;
SQL> CREATE TABLESPACE INDX DATAFILE '/u01/app/oracle/oradata/devdb/indx01.dbf.dbf' SIZE 20971520 AUTOEXTEND ON;
imp \'sys/oracle as sysdba\' file=/home/oracle/full.dmp full=y

5,exp导出原库全部数据
[oracle@node1~]$  exp \'sys/oracle as sysdba\' file=/home/oracle/full.dmp full=y direct=y
将导出文件scp到复制主机
[oracle@node1 ~]$ scp full.dmp oracle@192.168.1.176:/home/oracle

6,imp导入原库全部数据
[oracle@node3 ~]$ imp \'sys/oracle as sysdba\' file=/home/oracle/full.dmp full=y
(责任编辑:IT)