利用dbLink技术 可以进行数据库复制(及如何调整表顺序)

  1. 万用sql语句

    create user 用户名 identified by 密码;

    grant connect,resource,dba to 用户名;


如果是赋值的是只读用户时,grant select on table_name to user

比如这里有两个用户user1和user2,user1下有一个表A,要想user2能查询A表
1、登录user1,授权select给user2:grant select on A to user2
2、登录user2,select * from user1.A;
你也可以创建同义词 create or replace synonym A for user1.A;


直接用PLSQL工具导出tools
tools ->export tables-> Oracle Export 选择选项导出.dmp文件 说明:包含三种导出方式,三种方式都能导出表结构以及数据,
  1. 这一切都是在目的地数据库上操作进行的:
    create database link 连接名称
      connect to  数据库名称   identified  by  数据库密码
      using '(DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 源数据库IP地址)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = orcl)
        )
      )';
    必须要保证两个数据库的表结构一致才能进行复制

    SELECT * FROM 目的地数据库具体某一张表的表名@连接名称;
    insert into 表名 SELECT * FROM  表名@连接名称;

  2. 常见问题:

  3. 表顺序不一致,表字段不一致

  4. select     object_id    from        all_objects     where     owner = '用户名' and    object_name = '表名 ;

     select     obj#,col#,name     from        sys.col$          where     obj#=object_id    order by col#

  5. 然后再用update就可以了

或者直接采用一种更简单的sql方法,只需要一句就可以完成:怎样将Oracle一张表的多个字段更新到另一张表中去 
update a set(a.province,a.city)=(select province,city from b where b.mobile=a.mobile)
其他方法都是在oracle中行不通的。
假设表a中有多个字段(province ,city)需要从b表获取(两张表的mobile一样),总结了几种写法。 一、updatea set a.province=(select province from b where b.mobile=a.mobile); updatea set a.city=(select cityfrom b where b.mobile=a.mobile); 这种写法效率太低,尤其是号码有上万条的时候,所以抛弃。 二、update a set a.province=b.province,a.city=b.city from a inner join b on a.mobile=b.mobile. 或者update a set a.province=b.province,a.city=b.city from a,b where a.mobile=b.mobile. 三、update a inner join b on a.mobile=b.mobile set a.province=b.province,a.city=b.city 注意:第二种和第三种写法在oracle行不通的,老是报错,折腾了好长时间,最后还是用下面的语句解决了问题 四、update a set(a.province,a.city)=(select province,city from b where b.mobile=a.mobile) 其实第四种方法是第一种方法的合并。 项目中写的真实例子: 注:用a.city=null不行的
  1. --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  2. 还有一种笨方法如下所示:

  3. 导入的命令是:imp 用户名/密码@网络服务名 file=xxx.dmp full=y;

  4. 例子:开始->运行->输入cmd->imp PECARD_HN/PECARD_HN@127.0.0.1:1521/orcl  file=E:\work\dmp\PECARD_HN.dmp full=y

  5. 导出的命令是:exp 用户名/密码@网络服务名 file=xxx.dmp tables=(表名);

  6. 导出多个表时,表名使用逗号隔开如:tables=(table1,table2,table3)。

  7. 下面介绍的是导入导出的实例。 
    数据导出: 
    1 将数据库TEST完全导出,用户名system 密码manager 导出到D:/daochu.dmp中 
       exp system/manager@TEST file=d:/daochu.dmp full=y 
    2 将数据库中system用户与sys用户的表导出 
       exp system/manager@172.0.0.0:1521/orcl  file=d:/daochu.dmp owner=(system,sys) 

  8. IP地址一定要搞对,不然就错了
    3 将数据库中的表inner_notify、notify_staff_relat导出 
        exp aichannel/aichannel@TESTDB2 file= d:/data/newsmgnt.dmp tables=(inner_notify,notify_staff_relat) 

    4 将数据库中的表table1中的字段filed1以"00"打头的数据导出 
       exp system/manager@TEST file=d:/daochu.dmp tables=(table1) query=/" where filed1 like '00%'/" 
      
      上面是常用的导出,对于压缩,既用winzip把dmp文件可以很好的压缩。 
      也可以在上面命令后面 加上 compress=y 来实现。 


    数据的导入 
    1 将D:/daochu.dmp 中的数据导入 TEST数据库中。 
       imp system/manager@TEST  file=d:/daochu.dmp 
       imp aichannel/aichannel@HUST full=y  file=file= d:/data/newsmgnt.dmp ignore=y 

       上面可能有点问题,因为有的表
    已经存在,然后它就报错,对该表就不进行导入。 
       在后面加上 ignore=y 就可以了。 
    2 将d:/daochu.dmp中的表table1 导入 
    imp system/manager@TEST  file=d:/daochu.dmp  tables=(table1) 


    基本上上面的导入导出够用了。不少情况要先是将表彻底删除,然后导入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhousenshan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值