--脱机与连机数据库
--1、通过T-SQL语句分离与附加数据 要分离复制的数据库,该数据库必须是未发布的数据库
EXEC sp_detach_db 'AdventureWorks','true';
--2、保留全文索引文件和全文索引的元数据
EXEC sp_detach_db @dbname='AdventureWorks',@keepfulltextindexfile='true';
--使用创建数据库的FOR ATTACH附加数据库
use master
go
sp_detach_db mytestdb;--首先使用sp_detach_db分离mytestdb数据库
go
--得到SQL SERVER 的数据路径
DECLARE @data_path nvarchar(256)
set @data_path = (select SUBSTRING(physical_name,1,CHARINDEX(N'master.mdf',lower(physical_name))-1))
from master.sys.master_files
where database_id = 1 and file_id =1);
--执行 CREATE DATABASE FOR ATTCH 语句附加mytestdb数据库。
EXEC ('CREATE DATABASE mytestdb ON (filename = '''+ @data_path +'mytestdb.mdf' ') for attach');
go
--数据库备份和还原数据库
--1、数据库恢复模式
--1、简单恢复模式:一种开销最小的恢复模式,其不恢复事务日志,所以一旦数据库损害,这种模式会面临很大的风险
--2、完整恢复模式
--3、大容量日志恢复模式
--更改数据库的恢复模式
--使用T-SQL语句完整备份数据库
USE AdventureWorks;
GO
BACKUP DATABASE AdventureWorks
TO DISK = 'C:\SQLSserverBackups\AdventureWorks.Bak'
with format, --使用Format选项创建新的媒体
medianame = 'C_SQLSserverBackups',
name = 'Full Backup of AdventureWorks';
go
--差异数据库备份
--首先创建一个完整数据库备份
BACKUP DATABASE TestDataDB
TO TestDataDB_1
WITH INIT
GO
--随着时间的流逝
--创建一个差异数据库备份,追加这个备份
--到包含完整数据库备份的备份设备中
BACKUP DATABASE TestDataDB
TO TestDataDB_1
WITH DIFFERENTIAL
GO
--下面演示SalesGroupl文件组的SGrplFi2文件和SalesGroup2文件组的SGrp2Fi2文件创建差异文件备份
BACKUP DATABASE Sales
FILE = 'SGrplFi2',
FILE = 'SGrp2Fi2'
TO DISK = 'G:\SQL Server Backups\Sales\SalesGroupl.bck'
go
--数据库还原
--1、完整模式恢复
--2、简单模式恢复
use master;
go --确定数据库是在简单恢复模式下
ALTER DATABASE AdventureWorks SET RECOVERY SIMPLE;
--完整备份 AdventureWorks 数据库
BACKUP DATABASE AdventureWorks TO DISK = 'C:\DBBackups\AdventureWorks.bak'
with format;
go
--创建一个差异数据库备
BACKUP DATABASE AdventureWorks TO DISK = 'C:\DBBackups\AdventureWorks.bak'
WITH DIFFERENTIAL;
--还原完整数据库备份(从备份集1中)
RESTORE DATABASE AdventureWorks FROM DISK = 'C:\DBBackups\AdventureWorks.bak'
with file=1,NORECOVERY;
--还原完整数据库备份(从备份集2中)
RESTORE DATABASE AdventureWorks FROM DISK = 'C:\DBBackups\AdventureWorks.bak'
with file=2,NORECOVERY;
--文件还原
--脱机文件
ALTER DATABASE database_name modify file set offline
--备份当前的活动事务日志
BACKUP LOG database_name
to <tail_log_backup>
with norecovery
go
--还原文件
RESTORE DATABASE database_name FILE =<NAME>
FROM <file_backup_of_file_FILE1>
WITH NORECOVERY
RESTORE DATABASE database_name FILE =<NAME>....
FROM <file_backup_of_file_FILE2>
WITH NORECOVERY
--还原日志备份
RESTORE LOG database_name FROM <log_backup>
WITH NORECOVERY
RESTORE LOG database_name FROM <log_backup>
WITH NORECOVERY
RESTORE LOG database_name FROM <tail_log_backup>
WITH RECOVERY