问题描述
团队:
我们使用的数据库版本:
甲骨文数据库11g版本11.2.0.4.0-64位生产
以下是示例表生成脚本,以供参考:
我有两个名称为USER_A和USER_B的数据库用户,并且在两个数据库用户中都有一个名称为EMP的表。
Create table语句如下所示:
在进一步观察中,我们看到user_a.emp表具有deptno列,而user_b.emp表没有deptno列。
user_b.emp表具有在user_a.emp表中不存在的dept_name和dept_location列。
要求:
有人可以协助我编写2个alter语句 (动态),其中一个alter语句是生成列名以及数据类型和default_values
它们存在于user_b.emp表中,而不存在于user_a.emp表中。我需要这个alter语句来添加缺少的列。表的大小很小,但是我们的项目迁移表有很多列。
和另一个alter语句生成沿其数据类型和default_values存在于user_a.emp表中而不存在于user_b.emp表中的列名。
这将有助于我使表格保持同步
我们使用的数据库版本:
甲骨文数据库11g版本11.2.0.4.0-64位生产
以下是示例表生成脚本,以供参考:
我有两个名称为USER_A和USER_B的数据库用户,并且在两个数据库用户中都有一个名称为EMP的表。
Create table语句如下所示:
CREATE TABLE user_a.emp ( empno NUMBER(4), ename VARCHAR2(10 BYTE) DEFAULT 'XYZ', job VARCHAR2(9 BYTE), mgr NUMBER(4), hiredate DATE, sal NUMBER(7,2), comm NUMBER(7,2), deptno NUMBER(2) ); CREATE TABLE user_b.emp ( empno NUMBER(4), ename VARCHAR2(10 BYTE) DEFAULT 'XYZ', job VARCHAR2(9 BYTE), mgr NUMBER(4), hiredate DATE, sal NUMBER(7,2), comm NUMBER(7,2), dept_name VARCHAR2(50) DEFAULT 'ACCOUNTING', dept_location VARCHAR2(50) );
在进一步观察中,我们看到user_a.emp表具有deptno列,而user_b.emp表没有deptno列。
user_b.emp表具有在user_a.emp表中不存在的dept_name和dept_location列。
要求:
有人可以协助我编写2个alter语句 (动态),其中一个alter语句是生成列名以及数据类型和default_values
它们存在于user_b.emp表中,而不存在于user_a.emp表中。我需要这个alter语句来添加缺少的列。表的大小很小,但是我们的项目迁移表有很多列。
和另一个alter语句生成沿其数据类型和default_values存在于user_a.emp表中而不存在于user_b.emp表中的列名。
这将有助于我使表格保持同步
专家解答
编写一个完全自动化的过程来做到这一点是棘手的,也是有风险的。
例如,用户A有
而用户B有:
添加dept_name和dept_location时是否应该删除deptno?确实,您希望有人查看这些差异并进行通话。
你可能也想同步所有的约束,索引等。因此,与其尝试自己滚动,不如使用现有工具。
SQL Developer中的数据库差异选项是执行此操作的好方法 (工具-> 数据库差异...)
为每个用户创建一个连接,您可以比较它们。这包括许多如何进行比较的选项,一个很好的差异报告,以及同步它们的脚本。
https://www.thatjeffsmith.com/archive/2012/09/using-database-diff-to-compare-schemas-when-you-dont-have-the-destination-user-password/
https://blogs.oracle.com/oraclemagazine/make-the-easy-move
例如,用户A有
deptno NUMBER(2)
而用户B有:
dept_name VARCHAR2(50) DEFAULT 'ACCOUNTING', dept_location VARCHAR2(50)
添加dept_name和dept_location时是否应该删除deptno?确实,您希望有人查看这些差异并进行通话。
你可能也想同步所有的约束,索引等。因此,与其尝试自己滚动,不如使用现有工具。
SQL Developer中的数据库差异选项是执行此操作的好方法 (工具-> 数据库差异...)
为每个用户创建一个连接,您可以比较它们。这包括许多如何进行比较的选项,一个很好的差异报告,以及同步它们的脚本。
https://www.thatjeffsmith.com/archive/2012/09/using-database-diff-to-compare-schemas-when-you-dont-have-the-destination-user-password/
https://blogs.oracle.com/oraclemagazine/make-the-easy-move
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




