加入收藏 | 设为首页 | 会员中心 | 我要投稿 海豚站长网 (https://www.2ht.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

使用SQLServer复制数据库

发布时间:2022-10-14 04:31:08 所属栏目:MsSql教程 来源:互联网
导读: 原因:两个项目同时操作同一个数据库
项目1:操作数据(CRUD)Create(创建)、ReadRetrieve(读取)、Update(更新)、Delete(删除)
项目2:使用中间件Redis,并只执行ReadRetrieve(读取)。

原因:两个项目同时操作同一个数据库

项目1:操作数据(CRUD)Create(创建)、ReadRetrieve(读取)、Update(更新)、Delete(删除)

项目2:使用中间件Redis,并只执行ReadRetrieve(读取)。

结果:项目1操作数据,项目二数据里外不一致。

解决办法:将展示数据的项目连接数据库前一天的数据,就是将数据库拷贝到一个新的数据库中,单独只供展示的项目连接查询。

准备工作:

在这里我是用手动创建了一个database1的数据库,然后创建了一张表user,并添加了2条数据:

asp mssql cms_mssql复制_mssql是什么数据库

我们需要复制到一个全新的数据库 database2中

第一条命令: BACKUP DATABASE database1 TO DISK = 'd:\database1.bak'

注释:这里的database1就是需要复制的数据库名称,末尾的功能是将数据库bak文件复制到磁盘的路径,这里我是复制到d根目录:

asp mssql cms_mssql是什么数据库_mssql复制

第二条命令: RESTORE FILELISTONLY FROM DISK = 'd:\database1.bak'

注释:这是获取database1的得到逻辑文件信息,等会会用到LogicalName、PhysicalName这两个的值。

mssql是什么数据库_asp mssql cms_mssql复制

第三条命令: RESTORE DATABASE database2

FROM DISK ='d:\database1.bak'

WITH MOVE 'database1' TO 'D:\work\databases\sqlserver2012\实例根目录\MSSQL11.MSSQLSERVER\MSSQL\DATA\database2.mdf',

MOVE 'database1_log' TO 'D:\work\databases\sqlserver2012\实例根目录\MSSQL11.MSSQLSERVER\MSSQL\DATA\database2_log.ldf'

注释:

1:这是新数据库的名称,我们取名database2。

2:这是执行第一条命令时,产生的数据库备份文件的路径。

3、4:这是执行第二条命令的LogicalName,也就是在database1.bak中的LogicalName所对应的名字。

5、6:这个是新数据库PhysicalName的对应的名字,将第二条命令得到的PhysicalName复制过来,再将文件名前缀改成database2(这里我们使用的是sqlserver安装过程中悬着的实例根目录,将新复制的数据的实例也放在默认目录中,方便管理)。

mssql复制_mssql是什么数据库_asp mssql cms

执行完后,我们可以看见不光表结构有,数据也一并复制过来了:

mssql复制_asp mssql cms_mssql是什么数据库

最后将上面的命令封装到SQL server的代理中,让它定时执行:

发现的问题:因为每次执行前面第一条命令时,生成的database1.bak文件大小会累加,所以执行之前需要删除它。而且数据库如果不删除的话,新数据库的数据不会更新。所以这里我们需要:先删除.bak文件,再删除数据库,最后在复制数据库。

鼠标右键启动SQL Server 代理,然后鼠标右键作业,选择新建作业,输入作业名称:复制数据库databse1。

mssql复制_mssql是什么数据库_asp mssql cms

asp mssql cms_mssql是什么数据库_mssql复制

创建步骤: 步骤一:

点击新建作业窗口左边的步骤,然后点击窗口底部的新建,输入步骤名称:删除bak文件。需注意的是,我们使用windows的命令del来删除文件。所以类型需要选择操作系统。命令:del D:\database1.bak,最后点击确定。

asp mssql cms_mssql是什么数据库_mssql复制

步骤二:

再次新建一个步骤mssql复制,输入步骤名称:删除新数据库database2。需注意的是数据库一直被项目连接着的,所以使用drop database database2肯定会报错。所以使用下面的代码,先将进程杀掉然后在删除数据库。命令:

USE MASTER    
GO    
     
DECLARE @dbname SYSNAME    
SET @dbname = 'database2' --这个是要删除的数据库库名    
     
DECLARE @s NVARCHAR(1000)    
DECLARE tb CURSOR LOCAL   
FOR  
    SELECT s = 'kill   ' + CAST(spid AS VARCHAR)  
    FROM   MASTER..sysprocesses  

    WHERE  dbid = DB_ID(@dbname)    
     
OPEN   tb      
FETCH   NEXT   FROM   tb   INTO   @s    
WHILE @@fetch_status = 0  
BEGIN  
    EXEC (@s)   
    FETCH NEXT FROM tb INTO @s  
END    
CLOSE   tb    
DEALLOCATE   tb    
  
EXEC ('drop   database   [' + @dbname + ']')

步骤三:

再次新建一个步骤,步骤名:复制数据库,然后将第一条和第三条命令复制到命令中:

mssql复制_mssql是什么数据库_asp mssql cms

最后,设置三个步骤的流程:比如步骤一执行成功后应该执行步骤二,而步骤二执行成功后需要执行步骤三,步骤三执行成功后就退出。三个步骤都有执行成功和执行失败,也就是6种可能。应该考虑这六种可能的情况设置执行流程。

双击一个步骤,点击高级,然后设置成功的操作和失败的操作:

mssql是什么数据库_asp mssql cms_mssql复制

我这里设置的是:

asp mssql cms_mssql是什么数据库_mssql复制

最后设置计划:

mssql是什么数据库_asp mssql cms_mssql复制

完工!

(编辑:海豚站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章