仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2294|回复: 9

[学习教程] MSSQL网页编程之数据库复制

[复制链接]
柔情似水 该用户已被删除
发表于 2015-1-16 22:28:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
这里我们讨论用binlog来实现闪回的方案。数据|数据库
/*--数据库数据复制

将一个数据库中的数据复制到另外一个数据库
假如某列在方针数据库中为标识列,将不会被复制

合用局限:数据库布局产生了变更,想将旧数据库举行晋级
如许就能够依据新的数据库布局创立一个空库,然后
将旧数据库的一切数据复制到新库中
--*/

/*--挪用示例

execp_copydb源数据库,方针数据库
execp_copydbacc_五医,acc_演示数据8
--*/

ifexists(select*fromdbo.sysobjectswhereid=object_id(N[dbo].[p_copydb])andOBJECTPROPERTY(id,NIsProcedure)=1)
dropprocedure[dbo].[p_copydb]
GO

createprocp_copydb
@o_dbnamesysname,--要复制数据的数据库--源数据库
@n_dbnamesysname,--吸收数据的数据库--方针数据库
@cleardbbit=0--清空方针数据库
as
declare@sqlnvarchar(4000)

--禁用束缚,避免复制时的数据抵触
set@sql=declare#tbccursorforselectname,tbname=object_name(parent_obj)
from+@n_dbname+..sysobjectswherextypein(C,F)
exec(@sql)
declare@namesysname,@tbnamesysname
open#tbc
fetchnextfrom#tbcinto@name,@tbname
while@@fetch_status=0
begin
set@sql=altertable+@n_dbname+..[+@tbname+]NOCHECKCONSTRAINT[+@name+]
exec(@sql)
fetchnextfrom#tbcinto@name,@tbname
end
close#tbc

--复制数据
declare@sql1varchar(8000)
set@sql=declare#tbcursorforselecta.namefrom
+@o_dbname+..sysobjectsainnerjoin
+@n_dbname+..sysobjectsbona.name=b.name
wherea.xtype=Uandb.xtype=U
exec(@sql)
open#tb
fetchnextfrom#tbinto@tbname
while@@fetch_status=0
begin
select@sql1=
,@sql=select@sql1=@sql1+,[+a.name+]from(
selectnamefrom+@o_dbname+..syscolumnswhereidin
(selectidfrom+@o_dbname+..sysobjectswherename=+@tbname+)
)ainnerjoin(
selectnamefrom+@n_dbname+..syscolumnswherestatus0x80andidin
(selectidfrom+@n_dbname+..sysobjectswherename=+@tbname+)
)bona.name=b.name
execsp_executesql@sql,N@sql1nvarchar(4000)out,@sql1out

select@sql1=substring(@sql1,2,8000)
exec(insertinto+@n_dbname+..[+@tbname+](+@sql1
+)select+@sql1+from+@o_dbname+..[+@tbname+])
if@@error0
print(insertinto+@n_dbname+..[+@tbname+](+@sql1
+)select+@sql1+from+@o_dbname+..[+@tbname+])
fetchnextfrom#tbinto@tbname
end
close#tb
deallocate#tb

--数据复制完成后启用束缚
open#tbc
fetchnextfrom#tbcinto@name,@tbname
while@@fetch_status=0
begin
set@sql=altertable+@n_dbname+..[+@tbname+]CHECKCONSTRAINT[+@name+]
exec(@sql)
fetchnextfrom#tbcinto@name,@tbname
end
close#tbc
deallocate#tbc
go

在ORDERBY操作中,MySQL只有在排序条件不是一个查询条件表达式的情况下才使用索引。(虽然如此,在涉及多个数据表查询里,即使有索引可用,那些索引在加快ORDERBY方面也没什么作用)。
金色的骷髅 该用户已被删除
发表于 2015-1-17 19:05:26 | 显示全部楼层
sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的工具
灵魂腐蚀 该用户已被删除
发表于 2015-1-21 07:44:39 | 显示全部楼层
一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。
活着的死人 该用户已被删除
发表于 2015-1-30 11:27:34 | 显示全部楼层
分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。
海妖 该用户已被删除
发表于 2015-2-6 10:58:31 | 显示全部楼层
SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)
小魔女 该用户已被删除
发表于 2015-2-16 00:30:30 | 显示全部楼层
Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。
第二个灵魂 该用户已被删除
发表于 2015-3-4 19:22:30 | 显示全部楼层
所以你总能得到相应的升级版本,来满足你的需求。
因胸联盟 该用户已被删除
发表于 2015-3-11 20:47:44 | 显示全部楼层
这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。
谁可相欹 该用户已被删除
发表于 2015-3-19 12:38:03 | 显示全部楼层
你觉得我的非分区索引无法对起子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非分区表。不知道这算不算一个bug。大家也可以试试。
再现理想 该用户已被删除
发表于 2015-3-28 02:54:10 | 显示全部楼层
不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-3-29 22:29

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表