WEB开发网
开发学院数据库MSSQL Server T-SQL 备份和还原 阅读

T-SQL 备份和还原

 2009-09-14 00:00:00 来源:WEB开发网   
核心提示: Code/*Author:Terry.Sai.M.J 浪客 Location:BeiJingDateTime:GETDATE()Description:数据库的在线还原(读写文件组完整恢复模式)*/IF DB_ID('db') IS NOT NULL DROP DATABASE

Code

/*
Author:Terry.Sai.M.J 浪客
Location:BeiJing
DateTime:GETDATE()
Description:数据库的在线还原(读写文件组完整恢复模式)
*/
IF DB_ID('db') IS NOT NULL
    DROP DATABASE db;
GO

CREATE DATABASE db
ON PRIMARY
(
    NAME=db_data,
    FILENAME='c:\1.mdf'
),
FILEGROUP FG
(
    NAME=db_data_fg,
    FILENAME='c:\2.ndf'
)
LOG ON
(
    NAME=db_log,
    FILENAME='c:\1.ldf'
)
GO

--在主文件组下创建表T
CREATE TABLE db.dbo.T(ID INT PRIMARY KEY) ON [PRIMARY];

--插入记录
INSERT INTO db.dbo.T SELECT 1
GO

--主文件组在线,那么就视为数据库在线
--创建文件db_data_fg备份
BACKUP DATABASE db FILE='db_data_fg' TO DISK='c:\1.bak' WITH FORMAT

--进行在先还原,指定NORECOVERY 以后,就只能按顺序进行前滚,同时文件离线还原状态.
RESTORE DATABASE db FILE='db_data_fg' FROM DISK='c:\1.bak' WITH NORECOVERY

--创建表失败,因为离线
CREATE TABLE db.dbo.T1(ID INT PRIMARY KEY) ON fg;

--主文件组不受影响,因为只是FG离线还原,只有企业版才支持哈.这种情况下 生产环境中,不至于数据库全部挂了.
SELECT * FROM db.dbo.T

--备份日志,使用COPY_ONLY,因为是要获取的日志是离线状态时候的,COPY_ONLY仅复制备份是在 SQL Server 2005 中引入的,用于在执行特殊目的的备份(例如在联机文件还原前备份日志)时使用
--如果是只读文件的话,明显不会出现差异数据,所以不需要日志备份了
--简单恢复模式的话,日志都不能备份,所以也是一样
--顺便提一句,如果数据库是文件损坏,而且损坏时候都在线,要使用NO_TRUNCATE获取日志
BACKUP LOG db TO DISK='c:\2.bak' WITH FORMAT,COPY_ONLY;

--恢复LOG
RESTORE LOG db FROM DISK='c:\2.bak' WITH RECOVERY

--FG终于在线了,恭喜下,创建一个T1表
CREATE TABLE db.dbo.T1(ID INT PRIMARY KEY) ON fg;
GO

DROP DATABASE db;

上一页  1 2 3 4 5 6 7  下一页

Tags:SQL 备份 还原

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接