2013年9月 的存档
2013九月27

数据库压缩备份

sqlserver2008开始提供压缩备份,好处是备份与还原时间缩短,备份文件也很小,测试结果显示文件小了2/3,不过不好的地方在于CPU要大量计算,CPU要占不少资源,不过若放在晚上执行的话,cpu可以忽略。

SELECT name,backup_start_date,backup_finish_date,compressed_backup_size
FROM msdb..backupset;
 

备份压缩 (SQL Server)

2013九月27

触发器的替代-cdc数据变更记录更好的方式

sql server 评论关闭

SQL Server 2008提供了内建的方法“”变更数据捕获“”(Change Data Capture 即CDC)以实现异步跟踪用户表的数据修改,而且这一功能拥有最小的性能开销。可以用于其他数据源的持续更新,例如将OLTP数据库中的数据变更迁移到数据仓库数据库。

--开启cdc
EXEC sys.sp_cdc_enable_db

--net_changes说的是针对一行记录,如果有多个更改的话,那么以最后的一条为准。
EXEC sys.sp_cdc_enable_table @source_schema='dbo',@source_name='frmuser',@capture_instance='frmuser',@supports_net_changes=0,@role_name=null 

--确认表已经被跟踪  

SELECT is_tracked_by_cdc FROM sys.tables
WHERE name = 'frmuser' and schema_id = SCHEMA_ID('dbo')  

EXEC sys.sp_cdc_help_change_data_capture 'dbo', 'frmuser' 

--更改表数据查询效果
UPDATE a
SET a.isvalid  = 0
FROM frmuser a
WHERE Account ='sa'

SELECT TOP 50 *
FROM [cdc].[frmuser_CT]

DECLARE @FromLSN varbinary(10) =
sys.fn_cdc_map_time_to_lsn
( 'smallest greater than or equal' , '2013-09-27 08:30')  

DECLARE @ToLSN varbinary(10) =
sys.fn_cdc_map_time_to_lsn
( 'largest less than or equal' , '2013-09-27 23:59:59')  

--注意若在上面的日期范围内无数据的话,将提示参数不足
SELECT
CASE __$operation
WHEN 1 THEN 'DELETE'
WHEN 2 THEN 'INSERT'
WHEN 3 THEN 'Before UPDATE'
WHEN 4 THEN 'After UPDATE'
END   ,a.*
FROM [cdc].[fn_cdc_get_all_changes_frmuser]
(@FromLSN, @ToLSN, 'all')   a

--撤销CDC
EXEC sys.sp_cdc_disable_table 'dbo',
'FactInternetSales','All'

EXEC sys.sp_cdc_disable_db
更改是不会永远保存,会定期清除
捕获和清除作业都是使用默认参数创建的。将立即启动捕获作业。它连续运行,每个扫描周期最多可处理 1000 个事务,并在两个周期之间停顿 5 秒钟。清除作业在每天凌晨 2 点运行一次。它将更改表项保留三天(4320 分钟),可使用单个删除语句最多删除 5000 项。
 

 
 
 
 
2013九月25

windows复制

windows server 评论关闭

Windows Vista、Windows 7以及Windows Server 2008提供了强大的复制功能,可以进行数据复制与同步

 
将指定目录下指定类型的文件按原有目录结构存放至新位置
robocopy G:\教程\书籍\Dropbox\goodasong M:\test *.txt  /s 

同步文件夹:每次只复制新更改的,让源与目录保持一致
ROBOCOPY E:\TeamCity\buildAgent\work\BatchFiles\BUBRM.Web  J:\robot /XO /MIR
/XO: 排除较旧的文件,已同步的文件不再同步
/MIR: 镜像目录树,让源与目录保持一致,如源删除了则目录也要删除。

在robocopy命令后加上"/save:任务名",可以将当前操作保存为任务文件,通过使用"/job:任务名"就可以方便的进行调用
 

/s:除了空文件夹以外的所有子目录
/e :全部目录 
/xf:指定不执行复制操作的文件类型
/max:10000000 可以选择文件大小上限,其单位为byte。如果是"/min",限定了文件大小的下限。两个参数可以同时使用,限制出所需复制的文件大小的范围。
/maxage:5 将D:Document下修改时间在5天内的文件
如:robocopy D:\Document H:\Project /maxage:5 /minage:1
 
robocopy D:\Document H:\Project /mir
表示清理目标文件夹内有而源文件夹里没有的文件和文件夹。通过这个命令,能保证源文件夹和目标文件夹在结构与内容上完全相同。
 
/move:移动文件
/create:拷贝一个多级目录的目录树,或者说只需要它的结构,而不需要它的内容
参数"/xa:h"表示将具有隐藏属性的排除出欲复制的范围,与之相对应的是参数"/ia",表示只复制包括指定属性的文件。
可用的属性有;R只读、A存档、S系统、H隐藏等。
2013九月24

mongodb主从复制配置

准备:
1,主服务器和从服务器的admin数据库中必须有全局用户。
2,主服务器的local数据库和从服务器的local数据均有名为repl且密码相同的用户名。
3,主服务器和从服务器必须开启安全认证:–auth
步骤:
分别连接上主从服务器设置账号
  >use admin
   >db.addUser('sa','LifeIsGood')
   >use local
   >db.addUser('repl','repl')
   >exit
开启:
主服务器重新启动,带参数–auth –master
从服务器重新启动,带参数–auth –slave –source 172.16.88.241

注:从服务器不能进行数据更新操作,只能查询

http://docs.mongodb.org/manual/core/master-slave/

2013九月23

mongodb安装成服务及账号建立

mongodb 评论关闭

一、安装成服务

1、解压mongodb-win32-x86_64-2.4.6.zip到 D:\mongodb
2、在D:\mongodb下创建目录data 与 logs
3、在D:\mongodb\logs下创建mongodb.log文件
4、配置为服务
1)开始–运行–cmd
2)cd D:\Mongodb\bin
3)D:\Mongodb\bin>mongod –logpath D:\MongoDB\logs\MongoDB.log –logappend –dbpath D:\MongoDB\data –directoryperdb –serviceName MongoDB –install
4) net start mongodb

二、账号建立
1,利用mongoVUE连接上去,在admin的users建立账号
2,让mongodb进入授权模式,在启动时增加参数auth
net stop mongodb
sc delete mongodb
mongod –logpath D:\MongoDB\logs\MongoDB.log –logappend –dbpath D:\MongoDB\data –directoryperdb –serviceName MongoDB –install –auth

2013九月22

MongoDB资料汇总专题

mongodb 评论关闭
2013九月22

mongodb 更改数据类型

mongodb 评论关闭

db.bmdMessage.find( { '_id' : { $type : 2 } } ).forEach( function (x) { x._id=ObjectId(x._id); db.bmdMessage.save(x); });

注意:_id的类型创建了则不允许更改。
参考:
修改MongoDB 字段的类型
官方文档

2013九月20

vs2012 fake功能

ASP.NET 评论关闭

    在测试过程中,被测试的功能并不总是很简单,可能这个功能块有多个逻辑组成,如其中一个逻辑A是要查询数据库返回一个列表,那么在编写测试方法时就不得不考虑连接数据库的事情,并且,若数据库发生更改的话,做的测试也需要相应的更改。此时利用fake来假冒逻辑A即可,即是将逻辑A查询数据库的方法做一委托,用自定义的代码返回值即可,这就实现了与数据库的无关性。

Stub:接口模拟
Shim:具体方法模拟
在测试时
1要引入 Microsoft.QualityTools.Testing.Fakes;
2,要在模拟上下文中操作,只有这样类用到有模拟的方法才会自动调用我们所实现的
using (ShimsContext.Create())

 

Microsoft Fakes 可以提供成员模拟的方法.以方便进行单元测试

如果不使用模拟方法我们要关心很多东西,如数据库的数据变化,接口调用导致的变化,文件、及其它资源的访问等问题。

使用模拟我们则可以只关系我们需要测试的那部分逻辑。

clip_image001

一 、Stub 和 Shim

Microsoft Fakes 提供了两种模拟类型成员的方式.以下两种方式的替代实现,都可以由委托来重新实现.

1.Stub Type,存根类型,可以动态地为接口及非密封的virtual或属性附加委托,以重新定义其实现,生成的类为强类型.

2.Shim Types,填充类型,解决了密封类或static成员的问题,T的填充类型ShimT可以为T的每个成员提供一个替代实现

二 、选择原则

由于Stub和Shim的实现方式不同,所以它们也有不同的要求,下面总结了选择它们的一些原则:

性能方面:运行时使用Shim重写会影响性能,Stub由于使用的是虚方法,则无此问题

对static方法/sealed类型:Stub类型只可以重写虚方法,因此,它不适用于static方法/sealed方法/sealed类中的方法,等

Internal类型:对于标记了InternalsVisibleToAttribute的内部类型,Fakes也可以起作用

private方法:如果private方法的签名上的所有类型都是可见类型,那么可以通过Shim来替换实现.Stub只能替换可见方法.

接口和抽象方法:Stub可以提供接口或抽象方法的替代实现.Shim则不能,因为没有实际的方法体.

所以建议在一般情况下使用Stub来支持那些可测试性做的非常好的类型,而用Shim来解决那些耦合很大,可测试性很差的代码或三方组件.

三、如何使用Fakes

假设我们在项目ClassLibrary1中有以下几个类

   1: public interface IDataAccess
   2: {
   3:     int Read();
   4: }
   5:  
   6: public class MyDataAccess : IDataAccess
   7: {
   8:     public int Read()
   9:     {
  10:         return Tools.GetNum();
  11:     }
  12: }
  13:  
  14: public class Tools
  15: {
  16:     static public int GetNum()
  17:     {
  18:         return 1;
  19:     }
  20: }
  21:  
  22: public class MyClass
  23: {
  24:      public static int GetMyData(IDataAccess obj)
  25:      {
  26:          //其它逻辑
  27:          return obj.Read();
  28:      }
  29: }

我们要使用Fakes进行测试只需要在测试项目中引用 ClassLibrary1,并且在之上右键->建立 Fakes即可使用Fakes

 

之后我们就可以使用类似以下代码来模拟一个IDataAccess的实例 ,MyClass.GetMyData  这个static方法的实现

前者即使用Stub,后者即Shim

   1: [TestClass]
   2: public class UnitTest1
   3: {
   4:     [TestMethod]
   5:     public void StubTest()
   6:     {
   7:         IDataAccess stockFeed = new ClassLibrary1.Fakes.StubIDataAccess()
   8:                                     {
   9:                                         Read = () => { return 2; }
  10:                                     };
  11:         Assert.AreEqual(2, MyClass.GetMyData(stockFeed));
  12:  
  13:     }
  14:     [TestMethod]
  15:     public void ShimTest()
  16:     {
  17:         using (ShimsContext.Create())
  18:         {
  19:             ClassLibrary1.Fakes.ShimMyClass.GetMyDataIDataAccess = (inc) => { return 2; };
  20:             Assert.AreEqual(2, MyClass.GetMyData(null));
  21:         }
  22:  
  23:     }
  24:  
  25: }

Stub 与其它Mock差不多,只是使用委托来改变方法实现

而Shim则需要建立 ShimsContext的作用域

2013九月5

源代码跟踪

ASP.NET 评论关闭