当我们需要把源环境的数据库克隆到目标环境的数据库的时候就可以执行以下步骤:

大体的操作步骤为:

1. 导出源环境数据库

2. 目标环境清理

3. 导入目标环境数据库

 

具体的步骤:

一、导出源环境数据库

1. 源环境导出前准备

(1)源环境创建物理目录和逻辑目录(逻辑目录用于存放后面导出的数据库dmp文件)

  • 在root用户下,先后台检查物理目录是否存在,不存在则:mkdir /home/oracle/dmp
  • 如果在root用户下创建目录,需要修gia目录属主及群组:chown oracle:ointall /home/oracle/dmp
  • 以系统管理员sys用户登陆到数据库:sqlplus / as sysdba
  • 创建逻辑目录:create or replace directory Clone_DIR as '/home/oracle/dmp';
  • 查询逻辑目录是否创建成功:select * from all_directories

(2)给用户授予对目录的操作权限(由哪个用户导出则对哪个用户赋予权限)

  • grant read, write on directory Clone_DIR to system

(3)将数据库dmp文件导出到逻辑目录(在linux环境切换到oracle用户下执行:su - oracle)

  • expdp system/123456 DIRECTORY=Clone_DIR schemas=$数据库用户 dumpfile=XXXX.dmp logfile=XXXX.log

2. 目标环境清理

(1)删除相关数据库用户及数据文件

  • drop user $数据库用户 cascade

(2)删除oracle相关旧表空间及数据文件(如果该数据库用户有相关的表空间及数据文件则执行,否则不需要)

  • 查看所有表空间名称:select name from v$tablespace
  • 查看所有数据文件路径:select file_name from dba_data_files
  • 删除数据库表空间及数据文件:DROP TABLESPACE $table_space_name INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS

3. 目标环境导入源环境数据库

(1)如果前面删除了旧表空间及数据文件,则需要重新创建新的表空间及数据文件

  • CREATE TABLESPACE $table_space_name DATAFILE '/home/DB/oracle/oradata/ora11g/XXXX.dbf' SIZE 300M AUTOEXTEND ON EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

  • 如果后期表空间不足,则需要新增数据文件:alter tablespace TBS_LBI_DW add datafile 'E:\ORADATA\ORA10\DATAFILE\TBS_LJB_02.DBF' AUTOEXTEND ON;

(2)目标环境创建数据库用户

  • 以系统管理员sys用户登录到数据库:sqplus / as sysdba
  • 创建数据库用户:create user $数据库用户名 identified by 123456 (default tablespace $table_space_name)

(3)数据库用户授权

  • grant connect,dba,resource to $数据库用户名

(4)目标环境创建物理目录和逻辑目录(逻辑目录用于存放后面导入的数据库dmp文件)

  • 在root用户下,先后台检查物理目录是否存在,不存在则:mkdir /home/oracle/dmp
  • 如果在root用户下创建目录,需要修gia目录属主及群组:chown oracle:ointall /home/oracle/dmp
  • 以系统管理员sys用户登陆到数据库:sqlplus / as sysdba
  • 创建逻辑目录:create or replace directory Clone_DIR as '/home/oracle/dmp';
  • 查询逻辑目录是否创建成功:select * from all_directories

(5)给用户授予对目录的操作权限(由哪个用户导入则对哪个用户赋予权限)

  • grant read, write on directory Clone_DIR to system

(6)远程拷贝源环境的dmp文件到目标环境(此处使用root用户执行)

  • scp -r XXXX.dmp root@$目标环境IP:$目标环境目录
  • scp -r XXXX.dmp root@12.123.123.33:/home/oracle/tmp

(7)导入dmp文件到逻辑目录

  • impdp system/123456 directory=Clone_DIR REMAP_SCHEMA=$数据库用户名:$数据库用户名 dumpfile=XXXX.dmp logfile=XXXX.log

 

到此数据库克隆就完成了!