(5.3.5)数据库迁移——sqlserver数据库与文件组的位置迁移(同一实例)郭大侠1

(1)将现有的数据库脱机ALTERDATABASEDB1SETOFFLINEWITHROLLBACKIMMEDIATE;(2)将数据库文件移到新的位置文件复制完成以后需要:右键-属性-安全-在组或用户名处添加AuthenticatedUsers-更改该组权限为完全权限,否则接下来的操作会报中间可能存在的问题:消息5120,级别16,状态101,第17行无法打开物理文件“D:\MSSQL\DATA\testdb.mdf”。操作系统错误5:“5(拒绝访问。)”。消息5120,级别16,状态101,第17行无法打开物理文件“D:\MSSQL\DATA\testdb_log.ldf”。操作系统错误5:“5(拒绝访问。)”。消息5181,级别16,状态5,第17行无法重新启动数据库“ctrip”。将恢复到以前的状态。消息5069,级别16,状态1,第17行ALTERDATABASE语句失败。(3)修改数据库关联文件的指向ALTERDATABASEDB1MODIFYFILE(NAME=DB1,FILENAME=X:\SQLServer\DB1.mdf);ALTERDATABASEDB1MODIFYFILE(NAME=DB1_Log,FILENAME=X:\SQLServer\DB1_Log.ldf);(4)将数据库进行联机ALTERDATABASEDB1SETONLINE;

在线修改文件位置,但也需要服务重启才能生效,或者offline=>online

(1)分离

EXECsp_detach_db'test'

(2)复制文件到自己想要的位置

(3)附加

EXECsp_attach_db@dbname=test',@filename1=@data_file,@filename2=@log_file

EXECsp_attach_db@dbname=test',@filename1='d:\test\test_data.mdf',@filename2='d:\test\test_log.mdf'

restoremove,withmove恢复数据库

USE[master]RESTOREDATABASE[test]FROMDISK=N'D:\DBBackup\testfull.bak'WITHFILE=1,MOVEN'test'TON'D:\MSSQL\test.mdf',MOVEN'test_log'TON'D:\MSSQL\test_log.ldf',NOUNLOAD,NORECOVERY,STATS=5

正文:

sqlserver迁移数据(文件组之间的互相迁移与文件组内文件的互相迁移)

每个物理文件(数据文件)对应一个文件组的情况(一对一)

如果我把数据移到另一个文件组了,不想要这个已经清空的文件组了,怎麽做?

删除原有聚集索引,创建新的聚集索引到迁移的文件组

当你移动数据到文件组[FG_Test_Id_02]上时,这时候文件组[FG_Test_Id_01]里面已经没有数据了使用下面的脚本查看

使用下面的SQL语句移除文件组[FG_Test_Id_01]就可以了

--9.移除FG_Test_Id_01文件组ALTERDATABASETESTREMOVEFILEFG_TestUnique_Id_01_data

注意:如果不使用聚集索引来移动文件组[FG_Test_Id_01]上的数据到文件组[FG_Test_Id_02]

--4.创建表,这个表的数据存放在[FG_Test_Id_01]文件组上CREATETABLEaa(idINT,cnameNVARCHAR(4000))ON[FG_Test_Id_01]GO

直接使用下面SQL语句来收缩文件会报错

--收缩一下FG_Test_Id_01文件组文件DBCCSHRINKFILE(FG_TestUnique_Id_01_data,EMPTYFILE)

报错内容

DBCCSHRINKFILE:无法移动堆页3:515。消息2555,级别16,状态1,第1行无法将文件"FG_TestUnique_Id_01_data"的所有内容移到其他位置,以完成清空文件操作。语句已终止。DBCC执行完毕。如果DBCC输出了错误信息,请与系统管理员联系。消息1105,级别17,状态2,第1行无法为数据库'Test'中的对象'dbo.aa'分配空间,因为'FG_Test_Id_01'文件组已满。请删除不需要的文件、删除文件组中的对象、将其他文件添加到文件组或为文件组中的现有文件启用自动增长,以便增加可用磁盘空间。

因为文件组[FG_Test_Id_01]里还有数据,不能清空

两个物理文件(数据文件)对应一个文件组的情况(一对多)

上面的情况是每个物理文件(数据文件)对应一个文件组的情况

下面这种情况是两个物理文件(数据文件)对于一个文件组的情况

一对一的情况使用聚集索引里移动数据,而一对多的情况使用DBCCSHRINKFILE

创建数据库

test1和test2这两个数据文件归属于主文件组primary,而数据文件test1最大大小为6MB初始大小为5MB

test2数据文件最大大小没有限制

使用下面脚本添加数据到主文件组

--1.创建表,这个表的数据存放在主文件组上CREATETABLEaa(idINT,cnameNVARCHAR(4000))GO--2.插入数据INSERTINTO[dbo].[aa]SELECT1,REPLICATE('s',3000)GO600--3.查询数据SELECT*FROM[dbo].[aa]--4.我们查看一下文件组的逻辑文件名EXEC[sys].[sp_helpdb]@dbname=TEST1--sysnameSELECTDB_NAME(database_id)ASDatabaseName,NameASLogical_Name,Physical_Name,(size*8)/1024SizeMBFROMsys.master_filesWHEREDB_NAME(database_id)='Test1'

因为第一个数据文件的最大大小限制,所以有一部分数据插入到了test2.ndf

现在修改test1数据文件的最大大小限制为20MB

执行下面的SQL语句

--5.收缩文件DBCCSHRINKFILE(test2,EMPTYFILE)--6.移除test2数据文件test2.ndfALTERDATABASETEST1REMOVEFILEtest2

在执行第五条语句的时候,执行下面脚本

数据都移动到了test1.mdf里去了

执行第六条SQL语句,删除test2.ndf文件

数据没有丢失

这里关键在于EMPTYFILE参数:DBCCSHRINKFILE(test2,EMPTYFILE)

总结

这里要根据是一对多还是一对一来选择移动数据的方法

如果是一对多:使用DBCCSHRINKFILE(要移动数据的数据文件,EMPTYFILE)

如果是一对一:创建聚集索引

大家可以做一下实验

对于同一个文件组里的多个数据文件(不一定是主文件组),

比如有有个文件组叫[FG_Test_01],里面有两个数据文件test3.ndf和test4.ndf

test3.ndf和test4.ndf都有数据

如果我运行DBCCSHRINKFILE(test4,EMPTYFILE),test4.ndf里的数据是否会移动到test3.ndf还是会移动到test1.mdf???

这个实验留给大家o(∩_∩)o

2014-1-14补充:

这个实验的测试脚本和结果

答案:

FG_TestUnique_Id_02_data.ndf里的数据会移动到FG_TestUnique_Id_01_data.ndf,不会移动到Test.mdf

因为DBCCSHRINKFILE只能在同一文件组内移动数据,而mdf只能属于主文件组primary

直接使用【1】中的迁移办法即可;

如果我们的ldf在一个不太好的磁盘里,而业务又正在允许不停机,那么用这个办法还是不错的。

(1)新增一个日志文件到其他的盘符

--(1.1)创建日志文件ALTERDATABASE[test]ADDLOGFILE(NAME='test_log1',FILENAME='D:\programfiles\sqlserver2017\sqlserverworkspace\E_Market_log1.ldf',SIZE=5MB,FILEGROWTH=0)--(1.2)把原来的日志文件停用,通过禁止自动增长的方式,代码如下,也可以用SSMS操作USE[test]GODBCCSHRINKFILE(N'test_Log',64)--这里的值是其当前ldf大小,也可以不用收缩GOUSE[master]GOALTERDATABASE[Db_Logs]MODIFYFILE(NAME=N'Db_Logs_Log',MAXSIZE=UNLIMITED,FILEGROWTH=0)--这才是核心GO--注意,只能把原日志停用,但不能删除!做完这个之后也不能随意收缩了

参考代码:在建库的时候创建多个数据与日志文件

GOCREATEDATABASEE_MarketONPRIMARY--主文件组(NAME='E_Market_data',FILENAME='D:\programfiles\sqlserver2017\sqlserverworkspace\E_Market_data.mdf',SIZE=10MB,MAXSIZE=500MB,FILEGROWTH=10%),--第一个文件组结束FILEGROUPFG--第二个文件组(NAME='FG_E_Market_data',FILENAME='D:\programfiles\sqlserver2017\sqlserverworkspace\FG_E_Market_data.ndf',SIZE=10MB,FILEGROWTH=0)--日志文件不属于任何文件组LOGON(NAME='E_Market_log',FILENAME='D:\programfiles\sqlserver2017\sqlserverworkspace\E_Market_log.ldf',SIZE=5MB,FILEGROWTH=0),--日志2的具体描述(NAME='E_Market_log1',FILENAME='D:\programfiles\sqlserver2017\sqlserverworkspace\E_Market_log1.ldf',SIZE=5MB,FILEGROWTH=0)GO

THE END
1.离线文件什么意思离线文件是指传送文件给对方用户不在线时,将在线文件转存到中间网络保存一定时间,当对方在线时主动发送给对方。 腾讯从QQ2007 正式版本起,为了满足QQ用户的离线后的文件传输需求,对全体QQ用户推出了离线传文件这一新功能。发送离线文件就是说对方不在线时,或者不在电脑前时,可以发送离线文件,然后会保存在电脑系统里,https://edu.iask.sina.com.cn/jy/lOK9i9ubvP.html
2.什么是QQ离线文件什么是QQ在线文件腾讯微信最近不少人有点迷糊这类问答,其实离线文件和在线文件的区别是在线发送文件是点对点的,就是文件的发收双方。离线文件是发送方先将文件上传至服务器,待接收方上线后会收到文件接收通知,直接从服务器进行下载。 什么是QQ离线文件: 1、离线文件是发送方先将文件上传至服务器;http://www.puhuahui.com/4363.html
3.android12下载离线文件到对应包名的目录下是不需要申请权限的一、什么是离线安装? 使用离线安装包进行软件安装的方式就叫离线安装。 离线安装包又叫做完整安装包,包含所有的安装文件。与其相对的是在线安装,即在条件允许且网络良好的条件下采用网络安装的方式。在线安装方式的缺点是在不太好的网络状况下容易出现长时间等待或安装失败的情况,这种情况下只能进行离线安装。 https://blog.51cto.com/u_16213669/7626478
4.qq离线文件如何接收怎样发送qq离线文件3、选择要发送的文件,点击确定,文件开始传送。 4、传送完成之后,聊天窗口提示离线文件上传成功,此时作为接收方也会收到提示。 QQ离线文件和在线文件有什么区别 1、文件处理方式不同 在线传送:文件是点对点的,就是文件的发收双方。 离线传送:发送方先将文件上传至服务器,待接收方上线后会收到文件接收通知,直接从服https://www.tianqi.com/toutiao/read/103521.html
5.什么是文件保密系统?一文了解文件保密系统什么是文件保密系统 “文件保密系统”是指采用计算机、网络通讯、密码加密技术对各类需要加密的文件(机要文件、研发文件、设计图纸、技术资料、财务报表、商业数据等)进行加密防止……https://www.ekongsoft.com/news/2023/3505.htm
6.什么是H5离线包,如何生成H5离线包在线生成 .amr 包 进入控制台的实时发布>离线包管理页面,将上一步中生成的.zip包上传到 MDS 发布平台,生成.amr包。具体操作步骤,参考实时发布 > 创建离线包。 重要 在新增离线包配置中,离线包客户端范围的 iOS 最低版本需低于 iOS 客户端 info.plist 文件中的Product Version字段(见下图),iOS 客户端的最低https://help.aliyun.com/document_detail/85627.html
7.在线帮助信息3.2.8.1 什么是离线策略 如果公司有笔记本电脑加入了绿盾终端,当操作员需要将电脑带回家工作或者出差时,需要使用的文件脱离了绿盾服务端就会显示为密文,操作员无法查看、使用。为此,绿盾信息安全管理软件提供了离线策略这一强大的功能。 注:即使是导入了离线策略的终端电脑也仅是本机可以查看、使用加密文件,无法外发。 http://www.amoisoft.com/onlinehelp_ld/328.htm
8.迅捷PDF转换器迅捷pdf转换器官网迅捷PDF转换器可以实现多种办公文档格式的转换,包括将PDF转换成Word、PPT、Excel、HTML、TXT、图片;将Word、图片、Excel、PPT等转换成PDF;分割合并PDF、压缩PDF文件、获取PDF文件图片、PDF解除密码以及多种电子书格式转换等.同时还可批量转换文档,实现一键轻松转换.https://www.xjpdf.com/
9.网盘文件离线存储和保存至设备有什么区别?离线存储和保存至设备是文件管理中常用的两种方式,它们在操作和功能上有一些区别。离线存储指的是将文件从网络上下载到本地设备的存储空间中,以便在没有网络连接时仍然可以访问和使用这些文件。保存至设备是将文件直接保存在设备的存储空间中,以便在任何时候都可以访问和使用这些文件。 https://yunpan.360.cn/cms/cjwt/171.html
10.腾讯QQ会员当好友不在线时,您依然可以向好友发送文件,文件会保存在我们的服务器中,当您的好友下次登录QQ时就能通过我们的提醒,立即获取您向他/她发送的文件了! C2C离线传文件扩容 离线传文件大扩容,流量步入T级时代!QQ会员独享特权,大文件统统秒传!离线文件传送功能面向所有QQ用户,QQ会员享受更大存储容量特权,会员的离线传文https://baike.sogou.com/v57414345.htm
11.百度网盘使用的是什么类型的服务器协议?百度网盘不是FTP服务器,而是一种基于云存储的文件托管服务。 百度网盘是一种云存储服务,不是FTP服务器。 百度网盘是由百度公司提供的在线存储服务,它允许用户将文件保存在互联网上的服务器上,而不是使用FTP(File Transfer Protocol)这种传统的文件传输协议,以下是对百度网盘相关信息的具体介绍: https://www.kdun.com/ask/1201053.html
12.usdoc文档在线预览解析如何实现Office文件的在线预览功能,如在线查看预览文件Word、OFD文件的在线预览查看、Excel文件的在线预览、以及PDF和PPT文件的在线预览。Office文件预览大全总结 2023-11-19 14:50:041568 原创Linux安装图形库libgdiplus,离线安装软件库 yum install安装完之后会自动清理安装包,如果只想通过yum下载软件的安装包,但是不需要https://me.csdn.net/blog/kiss_code
13.什么叫离线文件离线下载的文件!https://wenwen.soso.com/z/q405216472.htm
14.服务器拒绝了您发送离线文件是怎么回事怎么办?→MAIGOO知识总之,服务器拒绝了您发送离线文件的原因无非就是上述几种,当然购买腾讯QQ的会员功能可以免除许多限制带来的烦恼。 试试以下解决办法: 1.把文件名缩短。例如1.xls(改下后缀名,便能发了,下回来后又改回来就可以用了) 2.压缩一下再发。 3.检查QQ安全设置,降低安全等级---打开QQ的设置面板,将 “安全和隐私/安全https://www.maigoo.com/goomai/10279.html
15.10款适PC最佳文件共享软件:在线和离线传输文件当文件共享软件具有正确的功能和产品时,它们会很棒。为了帮助你找到合适的软件,我们添加了一些最佳选择。继续阅读以了解有关这些软件的更多信息。 如何在线和离线传输文件?文件共享软件是最重要的软件之一,换句话说,你甚至可以将其视为必备软件。无论你从事何种工作或工作,在某个时候你一定感到需要与他人共享文件或文档https://www.lsbin.com/15222.html