总体方案:以链接服务器的方式,将两台服务器连接在一块;利用存储过程,将数据从一台数据库导入另一台数据库。
一. 配置分布式事务协调器
由于在两台数据库间写数据,必然涉及分布式事务的问题;因此,需要在两台运行着Sql Server的机子上配置分布式事务协调器。以下以Windows 7为例,其他操作系统配置方案类似。
1. 启动组件服务管理工具:开始菜单—>运行—>键入dcomcnfg.exe—>确定
2. 展开“组件服务”,展开“计算机”,展开“我的电脑”,右键点击本地DTC,选择“属性”。

3.在打开的对话框中,切换至“安全”选项卡,以下图方式配置相应选项

二. 建立链接数据库
数据库链接能够让本地的一个 SQLserver 登录用户映射到远程的一个数据库服务器上,并且像操作本地数据库一样。
可以通过下面两句Sql语句实现建立链接数据库的功能
exec sp_addlinkedserver '链接名称','','SQLOLEDB','链接数据库IP'
exec sp_addlinkedsrvlogin '链接名称','false',null,'用户名','密码'
详细看参考:http://www.cnblogs.com/firstyi/archive/2007/08/09/849494.html 和 http://tech.it168.com/a2009/0205/264/000000264544.shtml
这是,可以随便写个select语句试试是否成功,假如无法查询,则尝试在两台机的host文件中添加对方的IP和机器名,并且记得关闭防火墙再试
三.编写存储过程
至此就可以开始写插入链接数据库的存储过程了,这一步则相对简单,根据自身需要编写。我在项目中所使用的存储过程如下:
Create proc P_DBSync
as
begin
declare @device_id char(20)
declare @error int --错误数
set @error=0
-- SET XACT_ABORT ON will cause the transaction to be uncommittable
-- when the constraint violation occurs.
set XACT_ABORT on
--声明游标
declare invoice_cursor insensitive cursor for select [DeviceID] from Device
open invoice_cursor
begin tran
while @@FETCH_STATUS = 0 --遍历表
begin
fetch next from invoice_cursor into @device_id
insert into link.demo.Device
select * from Device where DeviceID=@device_id
set @error=@@error+@error
insert into link.demo.DeviceParameter
select * from DeviceParameter where DeviceID=@device_id
set @error=@@error+@error
end
if @error=0--没有错误统一提交事务
begin
commit tran--提交
CLOSE invoice_cursor--关闭游标
DEALLOCATE invoice_cursor--释放游标
return 1
end
else
begin
rollback tran--回滚
CLOSE invoice_cursor
DEALLOCATE invoice_cursor
return 0
end
至此,从一个库导数据至另一个库的工作就基本完成了;当然以上方案有个问题,有一条记录出错,则所有的插入操作都会回滚,以后继续改进。
内容来自:《Designing Interfaces》
1。 安全探索(Safe Exploration)
用户在界面上进行探索不应产生任何麻烦,比如弹出窗口,突然播放的音乐。
2。 即时满足(Instant Gratification)
人们希望立刻从他们的行为看到结果。用户,特别是新用户应该让他在最初使用软件的几秒内就得到成功的体验。即时满足也意味着不应该把介绍性的功能隐藏在任何需要阅读或需要等待的功能之后。
3。 满意既可(Satisficing)
当人们看到一个新的界面时,他们不会事无巨细地阅读每个细节,然后作决定。
- 要让标签简短,文字通俗易懂,而且可以快速阅读
- 使用界面的布局来表达含义
- 让界面容易导航,尤其是匆促地作出一个错误的选择后还能够回来
- 复杂的界面对新用户来说,意味着繁重的认知负担
4。 中途变卦(Changes in Midstream)
设计界面应该允许用户中途改变选择;如果没有充分的理由,别把用户锁死在一个没有全局导航,不能到达其他页面或其他功能的环境里。同样,应该设计出容易“开始,在中间停止,以后再回来接着在原来的位置继续进行”的过程,即重新进入(Reentrance)的特性。
5。 延后选择(Deferred Choices)
- 不要让用户在一开始就面临太多选择
- 在必须使用的表单上,清楚地标注必须填写的字段,同时不要让这些必须填写的字段数目太多。让用户可以跳过可选问题,继续进行
- 有时候你可以把少数几个重要的问题或选项从其他选项中挑出来。显示这份简短的类别,把详细的问题列表隐藏起来。
- 尽可能使用良好的默认值模式,为用户提供几个合理的默认答案来开始接下来的过程
- 让用户将来可以回到需要延后填写的字段,并且,要让这些字段出现在显眼的位置
6。 递增构建(Incremental Construction)
让用户一次完成一小部分工作更容易。应用要能支持快速的变化和保存。在这些应用中,反馈很关键:在用户工作的时候,持续告诉用户整个目标对象的样子和他们的行为。
7。 习惯(Habituation)
当一个人重复使用某个界面时,一些常用的操作将演变成人的反射性动作。习惯在很大程度上提高了效率,但也可能成为负担。
8。 空间记忆(Spatial Memory)
当人们使用东西或文档时,他们经常通过回忆它们在哪里来再次找到它们,而不是它们的名字。把某个东西添加到界面上通常不会引起麻烦,但是把控件重新排列会打乱控件记忆,从而难以找到。
空间记忆和习惯之间的关系很密切。和习惯一样,空间记忆也是一个在应用中及在应用间保持一致性会带来好处的理由。人们会期望在类似的地方找到类似的功能表现。
9。 前瞻记忆(Prospective Memory)
当我们计划在将来完成某事的时候,就要用到前瞻记忆了,然后我们会设置一些提示物来提醒自己。我们用“现实中”的知识来帮助我们加强有限的记忆。
人们使用各种各样的东西来支持被动的前瞻记忆。设计的目的是灵活性——以及任由用户自主组织信息的态度;应该了解用户想要的往往是一种放任不管的灵活性,不要想着设计一个非常智能的系统来处理这些。同时,利用前瞻记忆来主动做点东西;比如,有人把一个完成了一半的表单临时关掉,可以把已经填写的数据保存起来,帮助他下次回忆。
10。 简化重复工作(Streamlined Repetition)
让用户从简单低水平重复的劳动中解放出来,例如Word的查找替换功能。直接观察用户可以帮助你找出需要支持哪些重复性的任务。用户往往意识不到自己正在进行着重复操作。
11。 只支持键盘(Keyboard Only)
一些软件设计成可以完全通过键盘来操作。它们往往也支持鼠标,但是没有哪个操作是只支持鼠标的。
- 在菜单条上定义快捷键、加速键和各种操作的记忆方式
- 从清单中选择,特别是多选项的时候,可以使用箭头和辅助键
- Tab键经常用来移动键盘的焦点,从一个控件移到另一个控件,然后使用Shift-Tab后退
- 大多数控件,包括单项按钮和组合框,都可以允许用户从键盘来改变他们的输入值
- 对话框和网页经常会有一个默认按钮——它代表的动作是“我已经完成了这项任务”
12。 旁人建议(Other People's Advice)
- Any given program, once deployed, is already obsolete.
- It is easier to change the specification to fit the program than vice versa.
- If a program is useful, it will have to be changed.
- If a program is useless, it will have to be documented.
- Only ten percent of the code in any given program will ever execute.
- Software expands to consume all available resources.
- Any non-trivial program contains at least one error.
- The probability of a flawless demo is inversely proportional to the number of people watching, raised to the power of the amount of money involved.
- Not until a program has been in production for at least six months will its most harmful error be discovered.
- Undetectable errors are infinite in variety, in contrast to detectable errors, which by definition are limited.
- The effort required to correct an error increases exponentially with time.
- Program complexity grows until it exceeds the capabilities of the programmer who must maintain it.
- Any code of your own that you haven’t looked at in months might as well have been written by someone else.
- Inside every small program is a large program struggling to get out.
- The sooner you start coding a program, the longer it will take.
- A carelessly planned project takes three times longer to complete than expected; a carefully planned project takes only twice as long.
- Adding programmers to a late project makes it later.
- A program is never less than 90% complete, and never more than 95% complete.
- If you automate a mess, you get an automated mess.
- Build a program that even a fool can use, and only a fool will want to use it.
- Users truly don’t know what they want in a program until they use it.
中文翻译:
- 任何程序一旦部署即显陈旧。
- 修改需求规范来适应程序比反过来做更容易。
- 一个程序如果很有用,那它注定要被改掉。
- 一个程序如果没用,那它一定会有很好的文档。
- 任何程序里都仅仅只有10%的代码会被执行到。
- 软件会一直膨胀到耗尽所有资源为止。
- 任何一个有点价值的程序里都会有至少一个bug。
- 原型完美的程度跟审视的人数成反比,反比值会随着涉及的资金数增大。
- 软件直到被变成产品运行至少6个月后,它最严重的问题才会被发现。
- 无法检测到的错误的形式无限多样,而能被检测到的正好相反,被定义了的十分有限。
- 修复一个错误所需要投入的努力会随着时间成指数级增加。
- 软件的复杂度会一直增加,直到超出维护这个程序的人的承受能力。
- 任何自己的程序,几个月不看,形同其他人写的。
- 任何一个小程序里面都有一个巨大的程序蠢蠢欲出。
- 编码开始的越早,花费的时间越长。
- 一个粗心的项目计划会让你多花3倍的时间去完成;一个细心的项目计划只会让你多花2倍的时间。
- 往大型项目里添加人手会使项目更延迟。
- 一个程序至少会完成90%,但永远完成不了超过95%。
- 如果你想麻烦被自动处理掉,你得到的是自动产生的麻烦。
- 开发一个傻瓜都会使用的软件,只有傻瓜愿意使用它。
- 用户不会真正的知道要在软件里做些什么,除非使用过。
英文原文:http://www.devtopics.com/21-laws-of-computer-programming/
中文来自:http://www.cnbeta.com/articles/123618.htm
摘要: Rule 1: Identify Truly Independent Computations Rule 2: Implement Concurrency at the Highest Level Possible Rule 3: Plan Early for Scalability to Take Advantage of Increasing Numbers of Cores Rule ...
阅读全文
摘要: Design Fundamentals for Developers View more presentations from paultrani. Note: Cross posted from Bookcold's Blog.Permalink
阅读全文
摘要: 1。 测试用例中一个必需部分是对于其输出或结果进行定义 2。 程序员应当避免测试自己编写的程序 3。 编写软件的组织不应当测试自己编写的软件 4。 应当彻底检查每个测试的执行结果 5。 测试用例的编写不仅应当根据有效和预料到的输入情况,而且也应当根据无效和未预料到的输入情况 6。 检查程序是否“未做其应该做的”仅是测试的一般,测试的另一半是检查程序是否“做了其不应该做的” 7。 应避免...
阅读全文
摘要: 在vs2008中,伟大的ScottGu提供了这个小工具,供我们调试linq to sql生成的语句。在vs2010中,这个工具不好使了。搜了半天,找到了个能在vs2010下使用的小工具! 下载地址:http://www.rajavenkatesh.com/projects.aspx 安装方法: 1。 关闭vs2010,将其dll拷贝至Program Files\Microsoft Visua...
阅读全文
摘要: 转自:http://www.cnbeta.com/articles/119876.htm Google数据中心分布图 Google 搜索速度为什么能这么快?这主要因为Google在全球分布着众多的数据中心。根据现有信息,如果包括在建的数据中心,Google共有36个数据中心。 其中美国有19个、欧洲12个、俄罗斯1个、南美1个和亚洲3个(北京-Google.cn、香港-Google....
阅读全文