如果比较Oracle中的表是否一致

想不想都在一念之间 2013-01-15 09:05:42
如何比较两个数据库中表是否一致?

通过导出脚本,已经比较过了Table, Packages, Triggers,是否还要比较其他的?
...全文
605 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
wgywell 2013-01-17
  • 打赏
  • 举报
回复
我好像有这样的工具。。
linwaterbin 2013-01-17
  • 打赏
  • 举报
回复
引用 15 楼 AresZone 的回复:
引用 14 楼 linwaterbin 的回复:引用 13 楼 AresZone 的回复:引用 11 楼 linwaterbin 的回复:引用 10 楼 AresZone 的回复:引用 9 楼 linwaterbin 的回复:引用 8 楼 AresZone 的回复:引用 7 楼 linwaterbin 的回复:这个需求的前提是什么呀? 因为一个比较奇怪的错误。所以才……
32k大小
  • 打赏
  • 举报
回复
引用 14 楼 linwaterbin 的回复:
引用 13 楼 AresZone 的回复:引用 11 楼 linwaterbin 的回复:引用 10 楼 AresZone 的回复:引用 9 楼 linwaterbin 的回复:引用 8 楼 AresZone 的回复:引用 7 楼 linwaterbin 的回复:这个需求的前提是什么呀? 因为一个比较奇怪的错误。所以才来看看是否是数据库上有差异造成的。 WEB窗体……
测试用的环境,最多的循环大概去到2400左右。 在另外一个环境的循环可以去到多少目前不清楚。 你意思是循环的次数超了32767就会超出范围?number类型的值应该没有那么小吧?
  • 打赏
  • 举报
回复
引用 16 楼 linwaterbin 的回复:
引用 15 楼 AresZone 的回复:引用 14 楼 linwaterbin 的回复:引用 13 楼 AresZone 的回复:引用 11 楼 linwaterbin 的回复:引用 10 楼 AresZone 的回复:引用 9 楼 linwaterbin 的回复:引用 8 楼 AresZone 的回复:引用 7 楼 linwaterbin 的回复:这个需求的前提是什么……
郁闷了,测试机和运行环境上的数据库中Packages中的行数有差异。 已经大概确认到是另外一个定义的变量 VARCHAR2类型超上限了。 感谢楼上各位的帮忙解答,谢谢。 另外能否帮看看这个怎么搞。http://bbs.csdn.net/topics/390349738
  • 打赏
  • 举报
回复
引用 7 楼 linwaterbin 的回复:
这个需求的前提是什么呀?
因为一个比较奇怪的错误。所以才来看看是否是数据库上有差异造成的。 WEB窗体的代码一个样,一个测试用数据环境,数据量较小。另外一个数据量多。 在执行WEB窗体时,数据量小没有报错。数据量大的那个有报一个错误。 所以怀疑是否是表的结构,或者是存储过程什么的是否有差异。 如果不是那就数据量方面的问题了。
linwaterbin 2013-01-16
  • 打赏
  • 举报
回复
引用 13 楼 AresZone 的回复:
引用 11 楼 linwaterbin 的回复:引用 10 楼 AresZone 的回复:引用 9 楼 linwaterbin 的回复:引用 8 楼 AresZone 的回复:引用 7 楼 linwaterbin 的回复:这个需求的前提是什么呀? 因为一个比较奇怪的错误。所以才来看看是否是数据库上有差异造成的。 WEB窗体的代码一个样,一个测试用数据环境,数据量较……
这个循环是多大? 先继续加大变量长度,反正最大长度可以是32767,试一下
  • 打赏
  • 举报
回复
引用 11 楼 linwaterbin 的回复:
引用 10 楼 AresZone 的回复:引用 9 楼 linwaterbin 的回复:引用 8 楼 AresZone 的回复:引用 7 楼 linwaterbin 的回复:这个需求的前提是什么呀? 因为一个比较奇怪的错误。所以才来看看是否是数据库上有差异造成的。 WEB窗体的代码一个样,一个测试用数据环境,数据量较小。另外一个数据量多。 在执行WEB窗体时,数……
在Packages中错误定位到的位置比较奇怪。 我们之前是定义 counter number; counter := 1; 在后续的一个循环中有一句:counter := counter + 1; 他报错的位置就是counter := counter + 1; number类型应该没有那么快爆上限吧。
吴仙森 2013-01-16
  • 打赏
  • 举报
回复
如果是比较对象结构,直接导出对象脚本(plsql导出对象),然后通过uedit比较两个脚本差异。
linwaterbin 2013-01-16
  • 打赏
  • 举报
回复
引用 10 楼 AresZone 的回复:
引用 9 楼 linwaterbin 的回复:引用 8 楼 AresZone 的回复:引用 7 楼 linwaterbin 的回复:这个需求的前提是什么呀? 因为一个比较奇怪的错误。所以才来看看是否是数据库上有差异造成的。 WEB窗体的代码一个样,一个测试用数据环境,数据量较小。另外一个数据量多。 在执行WEB窗体时,数据量小没有报错。数据量大的那个有报一个错误……
这是oracle 官网的正确解释: ORA-06502: PL/SQL: numeric or value errorstring Cause: An arithmetic, numeric, string, conversion, or constraint error occurred. For example, this error occurs if an attempt is made to assign the value NULL to a variable declared NOT NULL, or if an attempt is made to assign an integer larger than 99 to a variable declared NUMBER(2). Action: Change the data, how it is manipulated, or how it is declared so that values do not violate constraints.
  • 打赏
  • 举报
回复
引用 9 楼 linwaterbin 的回复:
引用 8 楼 AresZone 的回复:引用 7 楼 linwaterbin 的回复:这个需求的前提是什么呀? 因为一个比较奇怪的错误。所以才来看看是否是数据库上有差异造成的。 WEB窗体的代码一个样,一个测试用数据环境,数据量较小。另外一个数据量多。 在执行WEB窗体时,数据量小没有报错。数据量大的那个有报一个错误。 所以怀疑是否是表的结构,或者是存储过程什……
错误提示:ORA-06502 ORA-06512。
linwaterbin 2013-01-16
  • 打赏
  • 举报
回复
引用 8 楼 AresZone 的回复:
引用 7 楼 linwaterbin 的回复:这个需求的前提是什么呀? 因为一个比较奇怪的错误。所以才来看看是否是数据库上有差异造成的。 WEB窗体的代码一个样,一个测试用数据环境,数据量较小。另外一个数据量多。 在执行WEB窗体时,数据量小没有报错。数据量大的那个有报一个错误。 所以怀疑是否是表的结构,或者是存储过程什么的是否有差异。 如果不是那就数据量方……
数据量大的那个有报一个错误,是什么错误?
善若止水 2013-01-15
  • 打赏
  • 举报
回复
引用 3 楼 yinan9 的回复:
引用 2 楼 zhaoxiangchong 的回复:这样比较的意义在哪里? 在实际中如果要能保证两个数据库一致,直接的迁移数据库就行了,没有见过这种需求 当然有必要,很多项目如ERP部署之前,都需要有一个sanity check,检查生产环境下的对象是否齐全
恕我才疏学浅,学习了。
yinan9 2013-01-15
  • 打赏
  • 举报
回复
引用 2 楼 zhaoxiangchong 的回复:
这样比较的意义在哪里? 在实际中如果要能保证两个数据库一致,直接的迁移数据库就行了,没有见过这种需求
当然有必要,很多项目如ERP部署之前,都需要有一个sanity check,检查生产环境下的对象是否齐全
善若止水 2013-01-15
  • 打赏
  • 举报
回复
这样比较的意义在哪里? 在实际中如果要能保证两个数据库一致,直接的迁移数据库就行了,没有见过这种需求
熊猫大虾 2013-01-15
  • 打赏
  • 举报
回复
主要是比较表结构的差异吧 -- 比较两个数据库中表的差异 -- u表,p存储过程,v视图 -- INTFSIMSNEW新库,INTFSIMS旧库 SELECT NTABLE = A.NAME, OTABLE = B.NAME FROM INTFSIMSNEW..SYSOBJECTS A LEFT JOIN INTFSIMS..SYSOBJECTS B ON A.NAME = B.NAME WHERE ISNULL(B.NAME, '') = '' AND A.XTYPE = 'U' UNION ALL SELECT NTABLE = B.NAME, OTABLE = A.NAME FROM INTFSIMS..SYSOBJECTS A LEFT JOIN INTFSIMSNEW..SYSOBJECTS B ON A.NAME = B.NAME WHERE ISNULL(B.NAME, '') = '' AND A.XTYPE = 'U' ORDER BY 1, 2 -- 比较两个数据库中每个表字段的差异 SELECT 表名A = CASE WHEN ISNULL(A.TABLENAME, '') <> '' THEN A.TABLENAME ELSE B.TABLENAME END, 字段名A = A.FIELDNAME, 字段名B = B.FIELDNAME, 顺序= A.FIELDSNO, 说明= CASE WHEN A.FIELDTYPE <> B.FIELDTYPE THEN '类型: ' + A.FIELDTYPE + '-->' + B.FIELDTYPE WHEN A.FIELDSNO <> B.FIELDSNO THEN '顺序: ' + str(A.FIELDSNO) + '-->' + str(B.FIELDSNO) WHEN A.LENGTH <> B.LENGTH THEN '长度: ' + str(A.LENGTH) + '-->' + str(B.LENGTH) WHEN A.LENSEC <> B.LENSEC THEN '小数位: ' + str(A.LENSEC) + '-->' + str(B.LENSEC) WHEN A.ALLOWNULL <> B.ALLOWNULL THEN '允许空值: ' + str(A.ALLOWNULL) + '-->' + str(B.ALLOWNULL) END FROM (SELECT TABLENAME = B.NAME, FIELDNAME = A.NAME, FIELDSNO = A.COLID, FIELDTYPE = C.NAME, LENGTH = A.LENGTH, LENSEC = A.XSCALE, ALLOWNULL = A.ISNULLABLE FROM INTFSIMSNEW..SYSCOLUMNS A LEFT JOIN INTFSIMSNEW..SYSOBJECTS B ON A.ID = B.ID LEFT JOIN INTFSIMSNEW..SYSTYPES C ON A.XUSERTYPE = C.XUSERTYPE WHERE B.XTYPE = 'U') A FULL JOIN (SELECT TABLENAME = B.NAME, FIELDNAME = A.NAME, FIELDSNO = A.COLID, FIELDTYPE = C.NAME, LENGTH = A.LENGTH, LENSEC = A.XSCALE, ALLOWNULL = A.ISNULLABLE FROM INTFSIMS..SYSCOLUMNS A LEFT JOIN INTFSIMS..SYSOBJECTS B ON A.ID = B.ID LEFT JOIN INTFSIMS..SYSTYPES C ON A.XUSERTYPE = C.XUSERTYPE WHERE B.XTYPE = 'U') B ON A.TABLENAME = B.TABLENAME AND A.FIELDNAME = B.FIELDNAME WHERE ISNULL(A.TABLENAME, '') = '' OR ISNULL(B.TABLENAME, '') = '' OR A.FIELDTYPE <> B.FIELDTYPE OR A.FIELDSNO <> B.FIELDSNO OR A.LENGTH <> B.LENGTH OR A.LENSEC <> B.LENSEC OR A.ALLOWNULL <> B.ALLOWNULL ORDER by 1, 4
linwaterbin 2013-01-15
  • 打赏
  • 举报
回复
这个需求的前提是什么呀?
crazy_samba 2013-01-15
  • 打赏
  • 举报
回复
还有index
ajune 2013-01-15
  • 打赏
  • 举报
回复
要比较的内容应该就是字段和值和表结构,通过minus功能来完成值的比较,两个表minus的结果等于0的话,说明这两个表数据完全一致
第一篇 Oracle管理配置 第1章 Oracle安装配置(教学视频:10分钟) 23 1.1 Oracle简介 23 1.1.1 数据库术语 23 1.1.2 主流数据库简介 24 1.1.3 Oracle数据库的特点 24 1.2 安装Oracle数据库 25 1.2.1 Oracle数据库的版本变迁及安装环境 25 1.2.2 安装过程 26 1.2.3 安装需要注意的问题 27 1.3 本章小结 28 1.4 习题 28 第2章 Oracle常用工具(教学视频:7分钟) 29 2.1 Net Configuration Assistant(网络配置助手) 29 2.1.1 监听程序配置 29 2.1.2 命名方法配置 31 2.1.3 本地Net服务名配置 32 2.2 Net Manager(网络管理员) 34 2.3 本章实例 36 2.4 本章小结 38 2.5 习题 38 第3章 SQL Plus和PL/SQL(教学视频:11分钟) 39 3.1 SQL Plus与PL/SQL简介 39 3.2 使用SQL Plus 40 3.2.1 登录SQL Plus 40 3.2.2 SQL Plus输出结果的格式化 41 3.2.3 SQL Plus小结 46 3.3 PL/SQL 46 3.3.1 PL/SQL常用开发工具 46 3.3.2 开发一个简单的PL/SQL程序 48 3.4 本章实例 49 3.5 本章小结 50 3.6 习题 50 第二篇 Oracle数据库对象 第4章 Oralce数据库(教学视频:15分钟) 51 4.1 创建Oracle数据库 51 4.2 Oracle数据库的相关术语 52 4.2.1 数据库 53 4.2.2 数据库实例和SID 53 4.2.3 ORACLE_SID 54 4.3 Oracle数据库的备份与恢复 55 4.3.1 逻辑备份/恢复(导出/导入) 55 4.3.2 物理备份/恢复 56 4.3.3 利用PL/SQL Developer备份数据库 60 4.4 本章实例 61 4.5 本章小结 61 4.6 习题 62 第5章 Oracle数据对象(教学视频:42分钟) 63 5.1 Oracle空间 63 5.1.1 Oracle空间简介 63 5.1.2 创建Oracle空间 64 5.1.3 查看空间 66 5.1.4 修改数据库默认空间 67 5.1.5 修改空间名称 68 5.1.6 删除空间 69 5.2 创建Oracle数据 70 5.2.1 利用工具创建数据 70 5.2.2 利用工具查看数据 71 5.2.3 利用命令创建数据 72 5.2.4 利用命令查看结构 72 5.3 修改Oracle数据结构 73 5.3.1 利用工具修改数据结构 73 5.3.2 利用命令修改数据结构 74 5.4 删除数据 75 5.4.1 利用工具删除数据 76 5.4.2 利用SQL语句删除数据 76 5.5 备份/恢复数据 76 5.5.1 利用工具备份/恢复数据 77 5.5.2 利用命令备份/恢复数据 82 5.6 临时 83 5.6.1 临时简介 83 5.6.2 会话级临时 84 5.6.3 事务级临时 85 5.6.4 查看临时在数据库的信息 86 5.6.5 临时的应用场景 86 5.7 特殊的dual 87 5.7.1 分析dual 87 5.7.2 dual的应用场景 87 5.7.3 修改dual对查询结果的影响 88 5.8 本章实例 89 5.9 本章小结 90 5.10 习题 90 第6章 约束(教学视频:43分钟) 91 6.1 主键约束 91 6.1.1 主键简介 91 6.1.2 创建主键约束 92 6.1.3 修改的主键约束 94 6.1.4 主键应用场景 96 6.2 外键约束 97 6.2.1 外键简介 97 6.2.2 创建外键约束 97 6.2.3 级联更新与级联删除 100 6.2.4 修改外键属性 102 6.2.5 外键使用 104 6.3 唯一性约束 105 6.3.1 唯一性约束简介 105 6.3.2 创建唯一性约束 105 6.3.3 修改唯一性约束 107 6.3.4 唯一性约束的使用 108 6.4 检查约束 108 6.4.1 检查约束简介 108 6.4.2 创建检查约束 108 6.4.3 修改检查约束 110 6.4.4 检查约束的使用 111 6.5 默认值约束 111 6.5.1 默认值约束简介 112 6.5.2 创建默认值约束 112 6.5.3 修改默认值约束 113 6.6 本章实例 115 6.7 本章小结 116 6.8 习题 116 第7章 视图(教学视频:50分钟) 117 7.1 关系视图 117 7.1.1 建立关系视图 117 7.1.2 修改/删除视图 118 7.1.3 联接视图 120 7.1.4 编译视图 122 7.1.5 使用force选项强制创建视图 124 7.1.6 利用视图更新数据 125 7.1.7 with check option选项 126 7.1.8 关系视图小结 128 7.2 内嵌视图 128 7.2.1 内嵌视图简介 128 7.2.2 内嵌视图的使用 128 7.2.3 内嵌视图小结 130 7.3 对象视图 131 7.3.1 对象视图简介 131 7.3.2 对象视图简介 131 7.4 物化视图 133 7.4.1 物化视图简介 133 7.4.2 物化视图的使用 133 7.4.3 物化视图的数据加载 135 7.4.4 物化视图的数据更新 135 7.4.5 查询重写 136 7.5 本章小结 136 7.6 本章实例 137 7.7 习题 137 第8章 函数与存储过程(教学视频:48分钟) 138 8.1 函数 138 8.1.1 函数简介 138 8.1.2 创建函数 139 8.1.3 函数的括号 140 8.1.4 函数的参数 141 8.1.5 函数的确定性 142 8.1.6 典型函数举例 143 8.2 存储过程 144 8.2.1 存储过程简介 144 8.2.2 创建存储过程 144 8.2.3 存储过程的参数——IN参数 146 8.2.4 存储过程的参数——OUT参数 147 8.2.5 存储过程的参数——IN OUT参数 149 8.2.6 存储过程的参数——参数顺序 149 8.2.7 存储过程的参数——参数的默认值 152 8.2.8 存储过程的参数——参数顺序总结 153 8.3 程序包 153 8.3.1 规范 153 8.3.2 主体 155 8.3.3 调用程序包的函数/存储过程 157 8.3.4 程序包的变量 158 8.4 本章实例 159 8.5 本章小结 161 8.6 习题 161 …… 第9章 游标(教学视频:36分钟) 162 第10章 触发器(教学视频:58分钟) 178 第11章 序列(教学视频:28分钟) 206 第12章 用户角色与权限控制(教学视频:45分钟) 215 第三篇 Oracle的SQL 第13章 Oracle数据类型(教学视频:21分钟) 231 第14章 Oracle的函数与达式(教学视频:111分钟) 240 第15章 Oracle的控制语句(教学视频:16分钟) 282 第16章 SQL查询(教学视频:55分钟) 290 第17章 SQL更新数据(教学视频:34分钟) 319 第四篇 Oracle编程高级应用 第18章 数据库速度优化与数据完整性(教学视频:32分钟) 332 第19章 数据一致性与事务管理(教学视频:46分钟) 341 第20章 并发控制(教学视频:35分钟) 356 第21章 Oracle的正则达式(教学视频:29分钟) 369 第五篇 Oracle与编程语言综合使用实例 第22章 Oracle在Java开发的应用(教学视频:38分钟) 376 第23章 Oracle在C#开发的应用(教学视频:12分钟) 391

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧