利用数据泵导出远程数据到本地数据库!!!

数据库用户间对象迁移与导入
本文详细介绍了如何将远程数据库用户test下的所有对象导入到用户ing下面的过程,包括创建数据库链接、设置权限、执行导出和导入操作,并检查目标用户ing是否正确包含了所需对象。

远程数据库用户test下面有一张t表

SQL> show user
USER 为 "TEST"
SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
T                              TABLE

SQL> ! cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1       linux localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6
10.10.10.7      linux localhost.localdomain localhost
本地数据库用户ing下面没有t表
SQL> show user
USER 为 "ING"
SQL> select * from tab where tname = 'T';

未选定行

SQL> ! cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1       linux localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6
10.10.10.8      linux localhost.localdomain localhost
10.10.10.8      linux
10.10.10.8      localhost

现在要做的就是把用户test下面的所有对象导入到用户ing下面。

1.创建一个数据库链接对象,链接到10.10.10.7的数据库服务器。

SQL> conn system/oracle
已连接。
SQL> show user
USER 为 "SYSTEM"
SQL> create database link link7 connect to test identified by test using '10.10.10.7/orcl';

数据库链接已创建。

SQL> select count(*) from test.t@link7;

  COUNT(*)
----------
     50027

2.远程数据10.10.10.7的用户test必须具有exp_full_database权限。

SQL> conn /as sysdba
已连接。
SQL> show user
USER 为 "SYS"
SQL> grant exp_full_database to test;

授权成功。

3.在10.10.10.8服务器上面执行导出。

[oracle@linux exp]$ expdp system/oracle@orcl network_link=link7 directory=exp schemas=test

Export: Release 10.2.0.4.0 - Production on 星期三, 05 10月, 2011 19:48:57

Copyright (c) 2003, 2007, Oracle.  All rights reserved.

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
启动 "SYSTEM"."SYS_EXPORT_SCHEMA_01":  system/********@orcl network_link=link7 directory=exp schemas=test 
正在使用 BLOCKS 方法进行估计...
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的总估计: 6 MB
处理对象类型 SCHEMA_EXPORT/USER
处理对象类型 SCHEMA_EXPORT/SYSTEM_GRANT
处理对象类型 SCHEMA_EXPORT/ROLE_GRANT
处理对象类型 SCHEMA_EXPORT/DEFAULT_ROLE
处理对象类型 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE
. . 导出了 "TEST"."T"                                  4.667 MB   50027 行
已成功加载/卸载了主表 "SYSTEM"."SYS_EXPORT_SCHEMA_01" 
******************************************************************************
SYSTEM.SYS_EXPORT_SCHEMA_01 的转储文件集为:
  /u01/exp/expdat.dmp
作业 "SYSTEM"."SYS_EXPORT_SCHEMA_01" 已于 19:50:10 成功完成

4.在10.10.10.8服务器上面执行导入。

[oracle@linux exp]$ impdp system/oracle@orcl directory=exp dumpfile=expdat.dmp remap_schema=test:ing

Import: Release 10.2.0.4.0 - Production on 星期三, 05 10月, 2011 19:51:24

Copyright (c) 2003, 2007, Oracle.  All rights reserved.

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
已成功加载/卸载了主表 "SYSTEM"."SYS_IMPORT_FULL_01" 
启动 "SYSTEM"."SYS_IMPORT_FULL_01":  system/********@orcl directory=exp dumpfile=expdat.dmp remap_schema=test:ing 
处理对象类型 SCHEMA_EXPORT/USER
ORA-31684: 对象类型 USER:"ING" 已存在      --这里没有此用户会自动创建。
处理对象类型 SCHEMA_EXPORT/SYSTEM_GRANT
处理对象类型 SCHEMA_EXPORT/ROLE_GRANT
处理对象类型 SCHEMA_EXPORT/DEFAULT_ROLE
处理对象类型 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE
处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA
. . 导入了 "ING"."T"                                   4.667 MB   50027 行
作业 "SYSTEM"."SYS_IMPORT_FULL_01" 已经完成, 但是有 1 个错误 (于 19:51:28 完成)

5.检查10.10.10.8上面的用户ing。

SQL> conn ing/ing
已连接。
SQL> show user
USER 为 "ING"
SQL> select * from tab where tname = 'T';

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
T                              TABLE

SQL> select count(*) from t;

  COUNT(*)
----------
     50027
注意:导入用户要对表空间使用不限制的权力:alter user ing quota unlimited on users; 这里的system用户当然有这个权力拉。对于小型数据库可以这样做,因为它要依赖网络。对于大型数据库一般是在数据源端导出,然后拷贝到目标端执行导入。
### Oracle 数据库备份表数据到另一张表的方法 在Oracle数据库中,有多种方式可以将一个表的数据备份至另一个表。以下是几种常用的技术: #### 使用 `CREATE TABLE AS SELECT` (CTAS) 通过创建新表并将现有表的内容复制进去来完成此操作。这种方法简单快捷。 ```sql CREATE TABLE backup_table_name AS SELECT * FROM source_table; ``` 这种方式会创建一个新的表,并且只包含源表中的列结构和数据[^1]。 #### 导出SQL文件再导入 另一种方法是先将目标表的数据导出成INSERT语句形式保存在一个`.sql` 文件里,之后可以在其他地方重新运行这个文件来进行数据加载。具体步骤如下所示: 第一步,利用工具或者编写PL/SQL代码生成包含插入命令的脚本;第二步,在目的端执行该脚本即可实现跨环境间的数据转移. 对于大规模数据集来说,这种做法可能会比较耗时而且效率不高,因此更适用于小型应用或测试环境中少量记录的操作[^2]. #### 利用Data Pump 技术 最新版本的Oracle提供了更加高效可靠的方式——即采用数据泵(Data Dump),它允许管理员迅速地把整个模式下的对象连同它们所关联的信息一起转移到新的位置上。这对于大型企业级应用程序而言尤为有用,因为它不仅支持增量更新还具备良好的性能表现[^3]. #### 创建数据库链接(DATABASE LINK) 进行实时同步 如果希望保持两张不同实例间的特定表格之间持续一致,则可以通过建立远程连接(DB Link), 并设置触发器或其他机制确保每次修改都会被及时反映出来。例如下面的例子展示了当本地某条目发生变化时删除远端相应项的过程[^4]: ```plsql CREATE DATABASE LINK dblink_test CONNECT TO username IDENTIFIED BY password USING 'remote_db'; -- 在原表上创建触发器 CREATE OR REPLACE TRIGGER trg_sync_delete BEFORE DELETE ON test_user FOR EACH ROW BEGIN EXECUTE IMMEDIATE 'DELETE FROM TEST_USER@dblink_test WHERE ID = :old.ID'; END; / ``` 以上就是一些常见的用于在Oracle数据库内部以及跨越多个独立安装之间传输单一关系型实体的有效策略。每种方案各有特点,可以根据实际需求选择最合适的一种实施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值