SQL Server 2008備份大全實戰(七)

這一篇博文探討下SQL Server 2008 備份的實際操做,事實上SQL Server 2008並不關心數據是備份到物理磁盤上仍是磁帶上,在SQL Server 2008數據庫備份中,預約義的目標位置叫作設備。這裏設備是對硬盤,磁帶機等備份存儲的通稱。通俗些講,SQL Server 2008是把數據備份到備份設備中。固然,SQL Server 2008一樣也支持直接把數據備份到物理磁盤的物理文件上。能夠經過T-SQLSSMS圖形化,SMO等建立備份設備。
爲了最大化保證數據的完整性和可用性,這一篇博文的Demo所有在完整恢復模式和100兼容級別下完成,能夠經過下面的語句查看當前數據庫的恢復模式和兼容級別,好比查看AdventureWorks2008數據庫的恢復模式和兼容級別
select name,recovery_model_desc,compatibility_level from sys.databases
where DB_NAME(database_id) = 'AdventureWorks2008'
 
新建立的用戶數據庫與model 數據庫使用相同的恢復模式。若但願新數據庫使用簡單恢復模式,請將model 的恢復模式更改成簡單。默認master,msdb,tempdb爲簡單恢復模式,model爲完整恢復模式。
固然也能夠經過SSMS圖形界面查看一個數據庫的恢復模式和兼容級別,SSMS->右鍵單擊某個數據庫選擇屬性->選項,以下圖:
 
 
如何建立備份設別呢?能夠經過 sp_addumpdevice 存儲過程,語法以下:
sp_addumpdevice [ @devtype = ] 'device_type'
        , [ @logicalname = ] 'logical_name'
        , [ @physicalname = ] 'physical_name'
device_type 表示備份設備的類型,能夠使用disk(磁盤)或磁帶(tape)2個枚舉,disk表示用硬盤文件做爲備份設備。tape表示 windows 支持的任何磁帶設備。tape在將來版本中可能將再也不支持,因此儘可能使用disk
logical_name 表示備份設備的邏輯名稱。在 BACKUP RESTORE 語句中將會被使用。
physical_name 表示備份設備的物理名稱。
經過磁盤文件來建立備份設備:
use master;
go
exec sp_addumpdevice 'disk', 'DemoDB2008ToDisk', 'c:\sql2008trainning\BackupDB\DemoDB2008Device.bak';
 
還能夠經過網絡共享磁盤文件來建立備份設備:
use master;
go
exec sp_addumpdevice 'disk', 'DemoDB2008ToDisk', '\\192.168.1.159\ShareBakFromLiTao\DemoDB2008Device.bak';
 
固然也能夠經過SSMS圖形化建立備份設備,由於比較簡單,這裏就再也不演示。
下面就來演示建立各類數據庫備份,好比我有一個DemoDB2008這樣的數據庫,那麼使用備份設備DemoDB2008ToDisk建立各類備份的代碼以下:
--完整備份數據庫到備份設備
backup database DemoDB2008
to DemoDB2008ToDisk --備份設備
with name= 'DemoDB2008 完整備份',    
description= 'DemoDB2008 backup'

--差別備份數據庫到備份設備
backup database DemoDB2008
to DemoDB2008ToDisk
with differential, name= 'DemoDB2008 差別備份'

--備份事務日誌到備份設備
backup log DemoDB2008
to DemoDB2008ToDisk
with name = 'DemoDB2008 日誌備份'

--僅拷貝數據庫到備份設備
backup database DemoDB2008
to DemoDB2008ToDisk
with copy_only

--尾日誌備份--
backup log DemoDB2008
to DemoDB2008ToDisk
with name = 'DemoDB2008 尾日誌備份',norecovery
爲了演示部分備份和文件備份,這裏提供一個合適的數據庫,同時假定閱讀這篇博文的朋友已經熟悉數據庫文件類型和文件組類型,建立數據庫的代碼以下:
create database DemoDBForPartial
on primary
(
   name = N 'demoDB',
   filename = N 'c:\dbFiles\demoDB.mdf',
   size = 3,
  maxsize = unlimited,
   filegrowth = 1
),
(
   name = N 'demoDB01',
   filename = N 'c:\dbFiles\demoDB01.ndf',
   size = 5,
  maxsize = 1000,
   filegrowth = 2
),
filegroup fgJanuary    
(
   name = N 'demoDB02',
   filename = N 'c:\dbFiles\demoDB02.ndf',
   size = 10,
  maxsize = 30,
   filegrowth = 5
),
filegroup fgFebruary
(
   name = N 'demoDB03',
   filename = N 'c:\dbFiles\demoDB03.ndf',
   size = 25,
  maxsize = 928,
   filegrowth = 20
),
(
   name = N 'demoDB04',
   filename = N 'c:\dbFiles\demoDB04.ndf',
   size = 25,
  maxsize = 1024,
   filegrowth = 20
),
filegroup fgMarch
(
   name = N 'demoDB05',
   filename = N 'c:\dbFiles\demoDB05.ndf',
   size = 25,
  maxsize = 200,
   filegrowth = 20
),
(
   name = N 'demoDB06',
   filename = N 'c:\dbFiles\demoDB06.ndf',
   size = 25,
  maxsize = 50,
   filegrowth = 20
)
log on    
(
   name = N 'demoDB_log',
   filename = N 'c:\dbFiles\demoDB_log.ldf',
   size = 1,
  maxsize = 1000,
   filegrowth = 10%
)
 
首先建立備份設備DemoDBForPartialToDisk,以下:
use master;
go
exec sp_addumpdevice 'disk', 'DemoDBForPartialToDisk', 'c:\sql2008trainning\BackupDB\DemoDBForPartialDevice.bak';
 
部分備份包含主文件組、每一個讀寫文件組以及任何指定(可選)的只讀文件組中的全部數據。
第一個 部分備份 演示:因爲剛建立的數據庫 DemoDBForPartial 沒有隻讀文件組,因此這個備份只包含主文件組和每一個讀寫文件組,代碼以下:
backup database DemoDBForPartial read_write_filegroups
to DemoDBForPartialToDisk
 
第二個部分備份演示:爲了演示備份只讀文件組,先修改數據庫,代碼以下:
alter database DemoDBForPartial modify filegroup fgJanuary readonly
alter database DemoDBForPartial modify filegroup fgMarch readonly
 
接着再次進行部分備份,此次指定一個只讀文件組fgMarch,代碼以下:

backup database DemoDBForPartial read_write_filegroups,filegroup = 'fgMarch'
to DemoDBForPartialToDisk
 
文件備份包含一個或多個文件(或文件組)中的全部數據,文件備份的代碼以下:
文件組備份:
backup database DemoDBForPartial filegroup = 'primary',    filegroup = 'fgFebruary' , filegroup = 'fgmarch'    
to    DemoDBForPartialToDisk    
with name = 'demodbforpartial-完整文件和文件組備份'

backup database DemoDBForPartial file = 'demodb05',     file = 'demodb03',    filegroup = 'primary'    
to    DemoDBForPartialToDisk    
with name = 'demodbforpartial-完整文件和文件組備份'
 
文件備份:
backup database DemoDBForPartial file = 'demodb03',     file = 'demodb05'    
to    DemoDBForPartialToDisk    
with name = 'demodbforpartial-完整文件備份'
 
差別文件組備份:
backup database DemoDBForPartial filegroup = 'primary',    filegroup = 'fgFebruary' , filegroup = 'fgmarch'    
to    DemoDBForPartialToDisk    
with name = 'demodbforpartial-差別文件組備份',differential
 
若是你不習慣備份到備份設備,也能夠直接備份到磁盤文件,代碼以下:
--完整備份數據庫到磁盤文件
backup database DemoDB2008 --備份數據庫
to disk= 'c:\sql2008trainning\BackupDB\DemoDB2008.bak'
with name= 'DemoDB2008 完整備份',    
description= 'DemoDB2008 backup'

--差別備份數據庫到磁盤文件
backup database DemoDB2008
to disk = 'c:\sql2008trainning\BackupDB\DemoDB2008.bak'
with differential, name= 'DemoDB2008 差別備份'

--備份事務日誌到磁盤文件
backup log DemoDB2008
to disk = 'c:\sql2008trainning\BackupDB\DemoDB2008.bak'
with name = 'DemoDB2008 日誌備份'

--拷貝數據庫到磁盤文件
backup database DemoDB2008
to disk= 'c:\sql2008trainning\BackupDB\DemoDB2008_copy.bak'
with copy_only
相關文章
相關標籤/搜索