当前位置:  数据库>oracle

Oracle数据比对(DBMS_COMPARISON)

    来源: 互联网  发布时间:2017-06-10

    本文导语: 一个数据比对的包(DBMS_COMPARISON),但是这个包相比用的比较少。所以今天就谈谈这个工具包的使用吧。 对于经常完数据迁移的朋友来说,在数据挪动之后,最重要也是最关键和最关心的一个问题是,目标端和源端的数据是否一...

一个数据比对的包(DBMS_COMPARISON),但是这个包相比用的比较少。所以今天就谈谈这个工具包的使用吧。

对于经常完数据迁移的朋友来说,在数据挪动之后,最重要也是最关键和最关心的一个问题是,目标端和源端的数据是否一致。数据的一致是否关系着大型Oracle数据库数据迁移的成败与否。目前很多公司都开始研发自己的对比工具,如dsg的基于rowid的比对、基于minus的比对等等。但是数据库本身也是给我们提供了一个数据比对的接口,那就是这个DBMS_COMPARISON软件包。

DBMS_COMPARISION简介:

这个软件包是oracle提供的可以再两个数据之间做object是比对。并且呢如果在比对过程中如果源端数据和目标端数据不一致,那么可以选择是从源端在将数据复制到目标端,还是从目标端在复制到源端,最终达到数据一致性的结果。该包也是通过创建dblink来实现的。这个工具的使用大体分为四步:

第一步:使用create_compare去创建一个比对动作

第二步:使用compare函数去进行数据对象之间的比对

第三步:我们在去查看比对结果,相应的record会记录到不同视图中如下:

DBA_COMPARISON_SCAN

USER_COMPARISON_SCAN

DBA_COMPARISON_SCAN_VALUES

USER_COMPARISON_SCAN_VALUES

DBA_COMPARISON_ROW_DIF

USER_COMPARISON_ROW_DIF

第四不:如果数据不一致,那么可以使用convert去将数据同步

大家可能会说,如果我进行了两次数据比对,那么如何区分呢,这就是oracle自己会给你设计一个标示了。这个函数是recheck。后续介绍:

还有一个问题,那就是这个包能做哪些数据比对?

答案是:对表、视图、物化视图、同义词等

DBMS_COMPARISION限制:
当然了任何一个工具都有自己的限制,那么这个包呢?

1、对于源端数据库版本必须是高于11.1,对于目标端数据库版本必须高于10.1

2.对于所有比对的数据库对象,必须是共享对象,也就是说每个对象的列个数和列的类型必须一致。如果列不一致,那么需要将比对的列使用column_list做个列表。

Database objects of different types can be compared and converged at different databases. For example, a table at one database and a materialized view at another database can be compared and converged with this package.

以上是说了比较容易理解的限制,下面在说一下索引列的限制:

1、在全库比对模式下,必须要有一个在 number, timestamp, interval, or DATE 数据类型的单一索引列,或是仅仅有一个包括这几种数据类型的复合索引,但是这个复合索引中设计到的列必须都是not null或是其中一列是一个主键列。

2、For the scan modes CMP_SCAN_MODE_FULL and CMP_SCAN_MODE_CUSTOM to be supported, the database objects must have one of the following types of indexes:

A single-column index on a number, timestamp, interval, DATE, VARCHAR2, or CHAR data type column

A composite index that only includes number, timestamp, interval, DATE, VARCHAR2, or CHAR columns. Each column in the composite index must either have a NOT NULL constraint or be part of the primary key.

如果数据库没有满足这些要求,那么这个包将无法进行数据比对。

if the database objects have only one index, and it is a composite index that includes a NUMBER column and an NCHAR column, then the DBMS_COMPARISON package does not support them.

If these constraints are not present on a table, then use the index_schema_name and index_name parameters in the CREATE_COMPARISON procedure to specify an index whose columns satisfy this requirement.

When a single index value identifies both a local row and a remote row, the two rows must be copies of the same row in the replicated tables. In addition, each pair of copies of the same row must always have the same index value.

DBms_comparison不支持的数据类型:
LONG、LANG RAW、ROWID、urowid、clob、nclob、blob、bfile另外还有如下两种:

1、udt(user-defined types,including object types, REFs, varrays, and nested tables)

2、oracle-supplied type (including any types, XML types, spatial types, and media types)

好了,了解这些后,我们就开始去亲自做一下,光说不练那不行。

第一创建dblink:

SQL> select * from dba_sys_privs rhys where rhys.privilege like upper('%link%');

GRANTEE                        PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
SYS                            DROP PUBLIC DATABASE LINK                NO
SYS                            CREATE DATABASE LINK                    NO
OWB$CLIENT                    CREATE DATABASE LINK                    NO
IMP_FULL_DATABASE              CREATE PUBLIC DATABASE LINK              NO
RECOVERY_CATALOG_OWNER        CREATE DATABASE LINK                    NO
DBA                            DROP PUBLIC DATABASE LINK                YES
IMP_FULL_DATABASE              DROP PUBLIC DATABASE LINK                NO
OWBSYS                        CREATE DATABASE LINK                    YES
IMP_FULL_DATABASE              CREATE DATABASE LINK                    NO
SYS                            CREATE PUBLIC DATABASE LINK              NO
DBA                            CREATE PUBLIC DATABASE LINK              YES

GRANTEE                        PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
DBA                            CREATE DATABASE LINK                    YES

12 rows selected.

SQL> grant create database link to scott;

Grant succeeded.

 

SQL> create database link comparison_link connect to scott identified by root using 'orac1';

Database link created.

SQL> show user
USER is "SCOTT"
SQL> select * from scott.emp@comparison_link;

    EMPNO ENAME      JOB              MGR HIREDATE        SAL      COMM    DEPTNO DEP
---------- ---------- --------- ---------- --------- ---------- ---------- ---------- ------------------------------
      7369 SMITH      CLERK          7902 17-DEC-80        800                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81      1600        300        30
      7521 WARD      SALESMAN        7698 22-FEB-81      1250        500        30
      7566 JONES      MANAGER        7839 02-APR-81      2975                    20
      7654 MARTIN    SALESMAN        7698 28-SEP-81      1250      1400        30
      7698 BLAKE      MANAGER        7839 01-MAY-81      2850                    30
      7782 CLARK      MANAGER        7839 09-JUN-81      2450                    10
      7788 SCOTT      ANALYST        7566 19-APR-87      3000                    20
      7839 KING      PRESIDENT            17-NOV-81      5000                    10
      7844 TURNER    SALESMAN        7698 08-SEP-81      1500          0        30
      7876 ADAMS      CLERK          7788 23-MAY-87      1100                    20

    EMPNO ENAME      JOB              MGR HIREDATE        SAL      COMM    DEPTNO DEP
---------- ---------- --------- ---------- --------- ---------- ---------- ---------- ------------------------------
      7902 AMY        ANALYST        7566 03-DEC-81      3000                    20

12 rows selected.

SQL>

 

SQL> create database link comparison_link connect to scott identified by root using 'orac1';

Database link created.

SQL> show user
USER is "SCOTT"
SQL> select * from scott.emp@comparison_link;

    EMPNO ENAME      JOB              MGR HIREDATE        SAL      COMM    DEPTNO DEP
---------- ---------- --------- ---------- --------- ---------- ---------- ---------- ------------------------------
      7369 SMITH      CLERK          7902 17-DEC-80        800                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81      1600        300        30
      7521 WARD      SALESMAN        7698 22-FEB-81      1250        500        30
      7566 JONES      MANAGER        7839 02-APR-81      2975                    20
      7654 MARTIN    SALESMAN        7698 28-SEP-81      1250      1400        30
      7698 BLAKE      MANAGER        7839 01-MAY-81      2850                    30
      7782 CLARK      MANAGER        7839 09-JUN-81      2450                    10
      7788 SCOTT      ANALYST        7566 19-APR-87      3000                    20
      7839 KING      PRESIDENT            17-NOV-81      5000                    10
      7844 TURNER    SALESMAN        7698 08-SEP-81      1500          0        30
      7876 ADAMS      CLERK          7788 23-MAY-87      1100                    20

    EMPNO ENAME      JOB              MGR HIREDATE        SAL      COMM    DEPTNO DEP
---------- ---------- --------- ---------- --------- ---------- ---------- ---------- ------------------------------
      7902 AMY        ANALYST        7566 03-DEC-81      3000                    20

12 rows selected.

SQL>

Oracle 11g 在RedHat Linux 5.8_x64平台的安装手册

Linux-6-64下安装Oracle 12C笔记

在CentOS 6.4下安装Oracle 11gR2(x64)

Oracle 11gR2 在VMWare虚拟机中安装步骤

Debian 下 安装 Oracle 11g XE R2

更多详情见请继续阅读下一页的精彩内容:


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • Oracle 数据库开发工具 Oracle SQL Developer
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • ORACLE数据库常用字段数据类型介绍
  • 怎样调出ORACLE数据库中的数据,该如何连接?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • 用JDBC连接Oracle数据库时,如何向数据库中写日期型数据(格式)?谢了!
  • 关于JDBC连接Oracle数据库,是否必须有Oracle客户端
  • linux上安装oracle 数据库后,是否能写shell程序实现数据库的自动启动。
  • docker中文入门学习手册 iis7站长之家
  • jsp文件上传smartupload到oracle数据库中没有longblob的数据类型如何处理的?
  • 将Oracle 8i数据成功移植Oracle 10g的方法
  • Oracle收购TimesTen 提高数据库软件性能
  • 我从JSP页将数据插入到oracle数据库中,为何汉字插入后数据库中显示为乱码呢?
  • Oracle数据库恢复后心得
  • 紧急求救:对Oracle数据库中long 型数据进行模糊查询 如何查?
  • Linux下Oracle数据库,dbstart持续不动,数据库无法启动解决
  • 卸载oracle数据库
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle 10g和Oracle 11g网格技术介绍
  • Oracle EBS R12 支持 Oracle Database 11g
  • ORACLE日期相关操作
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,