oracle数据库expdp远程数据库备份到本地的问题

我们有3个数据库环境(都是11g版本),分别是开发环境D1,测试环境D2和生产环境D3,其中D1,D2是由我管理维护,D3没有直接的访问权限,我们是通过把D3环境的表的select权限赋给user1用户来进行访问的,现在需要不定期的把D3上的表结构和数据同步到D1和D3上供开发人员和测试人员模拟生产环境使用。
我把我的处理过程描述一下(以D3同步到D1为例):
1. 在D1上创建目录并授权给D1用户user_d1
greate directory dump_d1 as '/datafile';
grant read,write on directory dump_d1 to user_d1;
2. 在D1上创建D1到D3的dblink
create database link db_d3 connect to user1 identified by user1pw using 'conn_str';
ps:conn_str是生产环境的连接信息,已确认这个dblink是可用的
3. 使用expdp导出远程数据库对象到本地
expdp user_dev/userdevpw@dev_D1 directory=dump_d1 dumpfile=temp.dmp network_link=db_d3 schemas=proc_user tables=t_org_list
ps: proc_user是生产环境上的schema1. 在D1上创建目录并授权给D1用户user_d1
greate directory dump_d1 as '/datafile';
grant read,write on directory dump_d1 to user_d1;
2. 在D1上创建D1到D3的dblink
create database link db_d3 connect to user1 identified by user1pw using 'conn_str';
ps:conn_str是生产环境的连接信息,已确认这个dblink是可用的
3. 使用expdp导出远程数据库对象到本地
expdp user_dev/userdevpw@dev_D1 directory=dump_d1 dumpfile=temp.dmp network_link=db_d3 schemas=proc_user tables=t_org_list
ps: proc_user是生产环境上的schema
结果报:
t_org_list对象找不到

在D1上执行
select * from proc_user. t_org_list@db_d3;
结果是有显示的,证明dblink是通的
我怀疑是不是生产开给我们的用户user1权限不足导致了无法读取proc_user下的对象?

为了验证我的想法,我按照上面的步骤,在D1和D2间进行测试(由于没有proc_user的权限,只能选择开发环境和测试环境上模拟),具体步骤如下:
1. 目录:用上面已创建的dump_d1
2. 在D1上创建D1到D2的dblink
create database link db_d2 connect to user_uat identified by useruatpw using 'conn_str';
ps:conn_str是D2环境的连接信息,已确认这个dblink是可用的
3. 使用expdp导出远程数据库对象到本地
expdp user_dev/userdevpw@dev_D1 directory=dump_d1 dumpfile=temp.dmp network_link=db_d2 schemas=user_uat tables=t_org_list
ps: proc_user是D2环境上的schema
结果操作成功。
由此可见,如果远程源数据库中两个用户A,B,且A是拥有对象完全权限,B只拥有A中的对象的select权限,那么对B建立DBLINK试图expdp用户A的对象的操作是无法成功的,只有对A建立DBLINK才能expdp操作导出A中的对象。

由于我刚接触expdp操作,请各位高手指点一下,上述结论是否成立,在现有条件下(我只有生产用户B的权限)要实现通过用户B导出用户A中的对象是否可行?

查看全部
bendywu
慢工也能出细活
2015/10/26 07:05
  • oracle
  • 备份
  • expdp
  • 点赞
  • 收藏
  • 回答
    私信

0个回复