动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息



本月文章推荐
.ORA-03113错误分析.
.关于竖表转横表的问题.
.ORACLE常用傻瓜问题1000问全集(.
.Oracle 10g 中管理物化视图变得更.
.随身携带的数据库.
.使用表面区域配置工具保护服务.
.SERVER数据转换ORACLE问题.
.ORACLE入门之ORACLE的备份.
.怎么样快速复制表或者是插入数据.
.Oracle不同版本的客户端和服务端.
.Oracle 10G在fedora core4上的安.
.在Oracle 8x中实现自动断开.
.ORACLE 9.2.0.4 PATCHES 安装!.
.ORACLE标准产品服务核心价值概述.
.ORACLE SQL性能优化系列 (一).
.分解查询的优化方法全面分析.
.配置redhat linux 7.0中的xinetd.
.如何在sqlserver2000中实现oracl.
.Oracle数据库网络与安全常见问题.
.vi 文书处理软体.

Oracle不同数据库间的对比分析脚本

发表日期:2008-2-9 |


     Oracle数据库开发应用中经常对数据库治理员有这样的需求,对比两个不同实例间某模式下对象的差异或者对比两个不同实例某模式下表定义的差异性,这在涉及到数据库软件的开发应用中是经常碰到的。 一般数据库软件的开发都是首先在开发数据库上进行,开发到一定程度后,系统投入运行,此时软件处于维护阶段。针对在系统运行中碰到的错误、bug等,还有应用系统的升级,经常需要调整后台程序,数据库开发人员经常碰到这样一种尴尬的事情,维护到一定时期,开发库和运行库之间出现了一些差异,而这些差异又是什么。还有一种情况就是假如应用在很多地方同时使用,每次的后台升级,那些数据库作了升级,那些还没有作升级,假如没有具体记录的话,也会造成我们的尴尬事情。 另外,假如要搭建Oracle的高级表复制环境,在规划好了复制的架构以及复制的表后,在正式将需要复制的表加入到复制组之前,一个重要工作就是检查这些需要复制的表在主节点和主定义节点间的差异性。假如这些表定义间存在任何细微的差别,如某个字段在一个节点是答应Null,而在另一个节点是Not Null,在将表加入到复制组时都会出现这样的错误,“ORA-23309 object string.string of type string exists”,其实造成这个错误的原因就是复制主定义节点和主节点之间表的定义存在某些差异,系统认为是两个不同的表,但是在两个数据库中具有同样的名称。假如需要复制的表很多,手工对比两个节点复制表之间的差异是需要很大工作量,而且不一定准确。 业界有名的数据库软件辅助产品提供商美国Embarcadero公司(www.embarcadero.com)在其全套数据库解决方案中就相应提供了一个叫Change Manager的产品,该产品一个很大的用途就是对比分析不同实例间的差异。Oracle公司的OEM(oracle enterprise manager)包中也相应提供了一个工具叫做DB-Diff,也用来比较两个数据库间的差异。 其实对于普通的数据库开发在某种程度上说根本不需要上面提到的这些工具软件,况且这些产品不是随便可以得到并且使用的。针对上面提到的这些问题,提供了两个SQL脚本,可以轻松实现对比分析两个不同数据库实例间对象的差异以及表定义的差异。 一、对比两个不同实例下某模式中对象差异 在运行下面的脚本之前,必须首先创建当然数据库用户和需要对比的两个实例间的数据库联接。下面是运行该脚本的一个例子。在SQL/PLUS下运行该脚本,系统出现如下提示: 对象属主(模式): repadmin 第一个实例的数据库联接名称 (包括 @):@ora_zs 第一个实例的数据库联接名称 (包括 @):@ora_sjjk 其中程序要求输入对象属主,也就是对比那个用户,这里是repadmin用户。然后是需要对比的实例联接名称,这里是ora_zs和ora_sjjk,最后给出对比报告。 附:PL/SQL程序脚本清单:
set linesize 80 set verify off set feedback off set pause off; accept obj_owner prompt '对象属主(模式): ' accept inst_1_dblink prompt '第一个实例的数据库联接名称 (包括 @):' accept inst_2_dblink prompt '第一个实例的数据库联接名称 (包括 @):' clear breaks ttitle off set heading off column datetime noprint new_value datetime column inst_code1_name noprint new_value inst_code1_name column inst_code2_name noprint new_value inst_code2_name select to_char(sysdate,'MM/DD/YY') datetime from dual / select global_name inst_code1_name from global_name&inst_1_dblink / select global_name inst_code2_name from global_name&inst_2_dblink / set feedback on set heading on set newpage 0 ttitle col 25 '对象比较结果报告单' - col 53 '日期: ' datetime - skip 1 col 60 '页: ' sql.pno - skip 1 col 10 '属主: ' obj_owner - skip 1 center '对象在 &inst_code1_name 但不在 &inst_code2_name ' - skip 2 column object_type format a15 heading '对象类型'; column object_name format a35 heading '对象名称'; column status format a10 heading '状态'; SELECT OBJECT_NAME, OBJECT_TYPE, STATUS FROM ALL_OBJECTS&inst_1_dblink WHERE OWNER = UPPER('&OBJ_OWNER') AND OBJECT_TYPE != 'SYNONYM' MINUS SELECT OBJECT_NAME, OBJECT_TYPE, STATUS FROM ALL_OBJECTS&inst_2_dblink
WHERE OWNER = UPPER('&OBJ_OWNER') AND OBJECT_TYPE != 'SYNONYM' ORDER BY 2,3 / ttitle col 25 '对象比较结果报告单' - col 53 '日期: ' datetime - skip 1 col 60 '页: ' sql.pno - skip 1 col 10 '属主: ' obj_owner - skip 1 center '对象在 &inst_code2_name 但不在 &inst_code1_name ' - skip 2 SELECT OBJECT_NAME, OBJECT_TYPE, STATUS FROM ALL_OBJECTS&inst_2_dblink WHERE OWNER = UPPER('&OBJ_OWNER') AND OBJECT_TYPE != 'SYNONYM' MINUS SELECT OBJECT_NAME, OBJECT_TYPE, STATUS FROM ALL_OBJECTS&inst_1_dblink WHERE OWNER = UPPER('&OBJ_OWNER') AND OBJECT_TYPE != 'SYNONYM' ORDER BY 2,3 /
二、对比两个不同模式下表定义的差异 运行方法和前面第一个脚本一样,这里不再详述。下面是一个运行实例结果: 对象属主(模式): db_zgxt 第一个实例的数据库联接名称 (包括 @):@ora_cx 第一个实例的数据库联接名称 (包括 @):@ora_zs 附:PL/SQL程序脚本清单:
SET PAGESIZE 60 SET LINESIZE 110 SET VERIFY OFF SET FEEDBACK OFF SET PAUSE OFF ACCEPT obj_owner PROMPT '对象属主(模式): ' ACCEPT inst_1_dblink PROMPT '第一个实例的数据库联接名称 (包括 @):' ACCEPT inst_2_dblink PROMPT '第一个实例的数据库联接名称 (包括 @):' clear breaks TTITLE off SET HEADING off COLUMN datetime noprint new_value datetime COLUMN inst_code1_name noprint new_value inst_code1_name COLUMN inst_code2_name noprint new_value inst_code2_name SELECT TO_CHAR(SYSDATE,'MM/DD/YY') datetime FROM DUAL / SELECT global_name inst_code1_name FROM global_name&inst_1_dblink / SELECT global_name inst_code2_name FROM global_name&inst_2_dblink / SET feedback ON SET HEADING ON TTITLE COL 30 '对象比较结果报告单' - COL 63 '日期: ' datetime - SKIP 1 COL 68 '页: ' sql.pno - SKIP 1 COL 10 '属主: ' obj_owner - SKIP 1 CENTER '&inst_code1_name 和 &inst_code2_name 之间表定义的差别明细' - SKIP 2 COLUMN table_name format a25 HEADING '表名'; COLUMN column_name format a25 HEADING '列名'; COLUMN data_type format a8 HEADING '数据类型'; COLUMN data_length format 999 HEADING '长度'; COLUMN data_precision format 999 HEADING '精度'; COLUMN nullable format a5 HEADING '是否可空'; COLUMN inst_code format a15 HEADING '实例'; SELECT '&inst_code1_name' inst_code, table_name, column_name, data_type, data_length, data_precision, nullable FROM all_tab_COLUMNs&inst_1_dblink WHERE owner = UPPER('&obj_owner') AND table_name in (SELECT table_name FROM all_tables&inst_2_dblink WHERE owner = UPPER('&obj_owner')) MINUS SELECT '&inst_code1_name' inst_code, table_name, column_name, data_type, data_length, data_precision, nullable FROM all_tab_columns&inst_2_dblink WHERE owner = UPPER('&obj_owner') UNION SELECT '&inst_code2_name' inst_code, table_name, column_name, data_type, data_length, data_precision, nullable FROM all_tab_COLUMNs&inst_2_dblink WHERE owner = UPPER('&obj_owner') AND table_name in (SELECT table_name FROM all_tables&inst_1_dblink WHERE owner = UPPER('&obj_owner')) MINUS SELECT '&inst_code2_name' inst_code, table_name, column_name, data_type, data_length, data_precision, nullable
FROM all_tab_columns&inst_1_dblink WHERE owner = UPPER('&obj_owner') ORDER BY 2, 3 /

上一篇:为何有时Oracle用索引来查找数据? 人气:588
下一篇:Oracle数据库中如何直接运行OS命令(上) 人气:292
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-24 Sablog-X v2.0 预览版
2008-7-24 帝国备份王EmpireBak 2008 正式版
2008-7-24 网趣网上购物系统时尚版 v8.2
2008-7-24 纵横B2B电子商务系统XYECS!B2B v
2008-7-24 e路小说小偷 v1.2.0723
2008-7-24 凌风美女图片站程序 v2.2
2008-7-24 TOM15电影收索程序
2008-7-24 清风信息自动采集生成系统 v1.0
2008-7-24 QQ邮箱编辑器 v1.0 (小小菜刀ASP
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号