背景:
在同一台 Linux 服务器上,有两个数据库用户,分别为:database1,database2,如何把 database1 用户下面的所有的表和数据,导入到 database2 数据库(database2 为新创建的用户,没有创建任何表,是一个空的数据库)
操作步骤:
1、创建数据库用户 database2(注:这里只创建新的数据库用户 database2,database1 数据库用户已经存在,并且 database1 用户已有表和数据)
登录数据库 linux 服务器,切换成 oracle 用户(这里说的 oracle 指的是数据库的一个管理员用户名,角色是 sysdba),操作如下:
su - oracle
sqlplus / as sysdba; -- 输完后回车,可以进入 sqlplus 客户端,进行 SQL 语句操作
create user database2 identifield by 123456;
grant connect, resource, dba to database2;
alter user database2 default tablespace PB_DATA;
2、创建文件导出的目录,database1 用户下的表数据,导出后的文件,将会保存在这个目录下
SQL > create directory PB_DUMP as '\usr\history\data\exoport';
PB_DUMP 是 linux 系统中 \ usr\history\data\exoport 目录的别名,通过上面 SQL 语句创建后,信息会保存在 oracle 的目录表中,可以查询表 select * from dba_directories 中的 DIRECTORY_NAME 字段值确认,对应的路径是 DIRECTORY_PATH 字段。
3、创建导出脚本
cat > exp_database1_table_data.par
输入如下内容,保存的脚本文件为 exp_database1_table_data.par
userid = 'oracle / as sysdba'
directory = PB_DUMP
dumpfile = exp_database1_table_data_20180101.dmp
logfile = exp_database1_table_data_20180101.log
schemas = database1
cluster = n
参数说明:directory 参数是一个目录名称, PB_DUMP 是步骤 2 中所创建的 oracle 目录,也就是导出后的 dmp 文件保存在这个目录下。dumpfile 是导出后的数据文件的名称;logfile 是导出日志,导出过程中所打印的日志信息会保存在这里;schemas 参数值是即将要导出数据的源数据库用户名。
4、创建导入脚本
cat >imp_database2_table_data.par
输入如下内容,保存的脚本文件为 imp_database2_table_data.par
userid = 'oracle / as sysdba'
directory = PB_DUMP
dumpfile = exp_database1_table_data_20180101.dmp
logfile = exp_database1_table_data_20180101.log
remap_schemas = database1 :database2
cluster = n
参数说明:remap_schemas 的参数值 database1 :database2,表示把 database1 用户下的数据导入到 database2 用户下(数据文件,来源于从 database1 用户中已导出的 exp_database1_table_data_20180101.dmp)
5、执行导出命令(执行完下面的命令后,数据库用户 database2 下将会有表和数据,来源于 database1)
expdp parfile = imp_database2_table_data.par
来源: http://www.bubuko.com/infodetail-2447754.html