如何正确的增加表字段,简单数据库同步脚本数据库

转自:http://www.maomao365.com/?p=6864

转自: http://www.maomao365.com/?p=5277
摘要:
下文主要讲述,如何对”已上线的系统”中的表,增加新的字段。

Oracle 数据库简单同步

摘要:


 

下文讲述采用sql脚本批量删除所有存储过程的方法,如下所示:
实验环境:sqlserver
2008 R2

系统部署脚本,增加列的方法:
在系统脚本发布中,如何是存储过程 自定义函数
视图的修改和新增,我们通常采用以下步骤来编写此类脚本
1 判断对象(存储过程 自定义函数
视图)是否存在,如何存在我们就删除对象(存储过程 自定义函数 视图)
2 新建对象
<hr />
但是增加系统字段(列)时,我们不能采用删除表,然后重新的方式进行脚本处理,
那么我们通常采用
先判断列是否存在,如果不存在就创建列,如果存在就修改列属性<span
style=”color:red;font-weight:bold;”>(修改列属性–请注意是否会影响历史数据)</span>
例:

前提:


IF NOT EXISTS(SELECT * FROM SYS.COLUMNS 
WHERE OBJECT_ID = OBJECT_ID(N'表名') 
AND NAME = '列名') ---判断列是否存在
begin
---增加列
alter table [表名] 
add column [列名] [列类型]
end
else
begin
---修改列属性
alter table [表名] 
add column [列名] [列类型]
end
  1. 不保证实时性,只是通过job的方式定时同步
  2. 只同步表中的数据,不保存其它数据
  3. 在用脚本初始化后,不能再增加表或删除表,或改变表结果,如果发生则需要重新初始化表。
  4. 在初始化的时候,最好把数据库改为非归档模式,否则会产生大量的归档日志,如果归档

平常使用sql脚本,删除存储过程,我们只可以使用删除命令一条一条的删除存储过程,下文介绍一种简便方法,可以对系统中所有的存储过程进行删除,
<span style=”color:red;”>
实现思路:
1 采用临时表将存储过程名称缓存
2 通过循环临时表,输出删除存储过程脚本
3 执行脚本

采用以上方式编写sql部署脚本的优点为,sql脚本可以执行多次,不会出现报错信息,可以避免已经手动增加列的数据库产生部署错误提示信息

 

declare @t table(keyId int identity(1,1),tableName varchar(256))
----生成临时表
insert into @t(tableName) 
select [name] from sysobjects where type='P'

declare @i int @iMax int ,@info varchar(256)
set @i =1 
select @imax=max(keyId) from @t as t

while @i <@imax
begin
select @info = t.tableName from @t as t where t.keyId =@i

if @info is not null 
begin
exec ('drop proc '+@info) ---遍历删除存储过程
end 

set @i = @i+1 
set @info =null 
end

* *

方式:

 

  1. 采用数据链的方式将数据从源复制到备份库。
  2. 使用触发器跟踪表中数据的变化,包含insert,update,delete
  3. 采用job的方式定时同步

 

步骤:

  1. 在源数据库中按顺序执行三个脚本:s1.source_create_sync-trigger.sql,s2.source_sync_update_sync_id.sql,s3.source_init.sql.
  2. 在备份库上创建数据库链连接到源库,数据库链名为remote
  3. 在备份库上按顺序执行三个脚本:d1.destination_sync_table_data.sql,d2.destination_sync_all_data.sql,d3.destination_inin_tables.sql.
  4. 调用存储过程sync_all_data即可同步数据

下载文件:backscript.rar