下面的代碼非但有圖文,簡直是視頻,地址
http://www.cnthc.com/?/article/67
http://www.cnthc.com/?/article/73--建立一個玩的數據庫
Create database Stu_db2
go
--查看數據庫
--一、經過圖形化界面查看,全部的選項的解釋 http://www.cnthc.com/?/explore/category-9 注意看《數據庫選項》這個話題
--二、經過系統內置函數DATABASEPROPERTYEX 具體可用屬性查詢地址 http://www.cnthc.com/?/article/29
--語法: DATABASEPROPERTYEX(目標數據庫名, 屬性),例:
select DATABASEPROPERTYEX('Stu_db2','isautoshrink')
--說數據庫文件若是不**的話就會無**的增長到把磁盤撐滿,這個有什麼辦法能夠看到目前數據庫文件的大小?
--能夠執行內置存儲過程 sp_spaceused來獲取數據庫大小,例:
use Stu_db2
go
exec sp_spaceused
--有不有什麼辦法能夠連數據庫的文件在那裏,文件的上限、增量等都顯示出來呢?
--使用系統內置存儲過程 sp_helpdb + 要查看的數據庫名
exec sp_helpdb Stu_db2
--刪除數據庫
drop database Stu_db2
--錯誤信息都提示得很明白了嘛,你當前正在使用這個數據庫,這就比如你躺在牀上,卻執行把牀扔了的動做同樣
--若要使用 DROP DATABASE,則鏈接的數據庫上下文不能與要刪除的數據庫或數據庫快照,例:
use master
go
drop database Stu_db2
--若是是圖形化界面操做,則須要把最下面有個「關閉現有鏈接」給勾選上
--爲了避免影響練習,再新建一個
create database Stu_db2
--修改數據庫名,若是要經過SSMS直接修改,要確保沒有任何用戶正在使用數據庫
alter database Stu_db2
modify name=Stu_db3
--若是須要一個霸佔當前數據庫,這能夠設置數據庫爲單用戶模式,用圖形界面修改,在「數據庫屬性」對話框中,單擊「選項」頁。在「**訪問」選項中,選擇「SINGLE_USER」。
--這個時候若是其餘用戶鏈接到數據庫,將出現「打開的鏈接」消息。若要更改屬性並關閉全部其餘鏈接,請單擊「是」,代碼則以下
ALTER DATABASE Stu_db3
SET SINGLE_USER WITH NO_WAIT --等待全部事務執行完成,再把數據庫設置爲單用戶,不足是顯而易見的,就是一直等待事務完成
--多用戶模式的關鍵字 MULTI_USER
ALTER DATABASE Stu_db3
SET MULTI_USER WITH NO_WAIT
--擴展數據庫
--第一:設置數據庫爲自動增加方式;
--第二:增長數據庫中數據文件和日誌文件的大小,就是修改它們的MAXSIZE屬性;
--第三:就是爲數據庫增長新的次要數據文件或日誌文件。
--最優選擇爲數據庫增長次要數據或者日誌文件,咱們執行以下T-SQL語句
use master
go
alter database Stu_db3 --指定要修改的數據庫
add file --增長數據文件
(name=Stu_db3_a, --文件在數據庫中的名字,
filename='e:\Stu_db3_a.ndf',--文件路徑和在文件系統中的名字
size=2MB, --文件初始大小
maxsize=unlimited, --文件上限
filegrowth=10% --增量
)
go
alter database Stu_db3
add log file --增長日誌文件
(name=Stu_db3_a_log,
filename='e:\Stu_db3_a.ldf',
size=10MB,
maxsize=20mb,
filegrowth=5%
)
go
--查看修改的結果
exec sp_helpdb Stu_db3
--單純修改文件的大小和增量
use master
go
alter database Stu_db3 --要修改的數據庫
modify file(
name=Stu_db3_a --要修改的文件邏輯名
,size=20 --文件大小
,filegrowth=10% --增量
)
go
/*--收縮數據庫
好比咱們一次把系統中10年前的數據所有刪除或者轉移了,只保留最近三年的,那麼數據庫必然會空出不少空間。
還有種狀況,是設計數據庫的時候由於某種緣由,設計得很大,後來發現用不上或者必須收縮。
處理方式也有四種:
第一種,圖形界面上操做,在「對象資源管理器->指定服務器實例->數據庫->指定的數據庫上面右鍵->任務->收縮
第一種是設置數據庫爲自動收縮,經過設置AUTO_SHRINK數據庫選項實現;不建議這樣作,反覆收縮會增長數據庫的碎片
*/
alter database Stu_db3
set auto_shrink on
--第二種是經過手動的執行DBCC SHRINKDATABASE 語句來收縮整個數據庫的大小;
--語法 :DBCC SHRINKDATABASE(‘要收縮的數據庫名’,可用空間的比例)
DBCC SHRINKDATABASE('Stu_db3',20) --收縮上面屢次用到的數據庫OneDb_bak,只給他留下20%的可用空間
--若是收縮當前使用的數據庫,可用0表明數據庫名,例如
use Stu_db3
go
DBCC SHRINKDATABASE(0,20)
--你無聊的話能夠試試反覆執行,看看是什麼提示
--第三種執行 DBCC SHRINKFILE 語句來手動收縮數據庫中的文件的大小。
--語法:DBCC SHRINKFILE(‘文件邏輯名’,收縮後的大小),若是未指定收縮後的大小則縮到默認大小
use Stu_db3
go
DBCC SHRINKFILE('Stu_db3_a',20) --指定收縮數據中邏輯名爲one的文件
/*--=============數據庫快照(感興趣的能夠在網上搜索下數據庫快照原理)--------
快照就是將當前數據庫原樣的複製一個只讀的數據源出來。它是當前數據庫的只讀靜態視圖,不包括那些尚未提交的事務
用處:能夠做爲數據源進行數據查詢,分析,若是元數據庫壞了,這個還能夠還原(固然,不建議用這個做爲安全保證)
使用場景:假設咱們對某企業內部辦公系統進行大量的分析,最好的作法是將目前的數據庫備份到另一個數據庫服務器上來分析。
初期無所謂,可是若是未來這個數據庫很大了,備份的操做可能很容易引發系統崩潰。 而數據庫快照則能夠很好的解決這個問題。
管理數據庫快照
*/
--例如咱們爲數據庫Stu_db2建立一個名爲Test_20140926的快照 以下
--數據庫中只有默認的一個數據文件一個日誌文件的狀況下
create database Tets
GO
USE master
GO
CREATE DATABASE Tets_20140926 --快照名
ON (
NAME=Tets --源數據庫文件的邏輯名
,FILENAME='e:\Tets_20140926.thc' --快照文件存放位置和文件名,文件後綴名隨便
)
--指明爲那個數據庫建立快照
AS SNAPSHOT OF Tets
GO
--多個數據庫文件的快照建立,有多少個數據文件就必須指定多少次,日誌文件不能作快照
create database Stu_db3_snp --建立快照的名稱
on( --第一個數據庫文件
name=Stu_db2, --邏輯文件名爲aaaa的數據文件
filename='e:\st_1.thc' --快照文件物理路徑
), --繼續第二個
(
name=Stu_db3_a, --邏輯文件名爲test2的數據文件
filename='e:\st_2.thc' --快照文件物理路徑
)
as snapshot of Stu_db3 --源數據庫爲test2
--留個做業,你把刪除快照的腳本寫出來
--若是你會insert語句和select語句的話,趕忙試試,對你的快照進行查詢和寫入的操做,看看後果是什麼
--要操做的話,你把快照當數據庫就好了,仍是use 快照名,而後就是你的操做了
--恢復快照到數據庫(再說一句,不推薦這樣作,由於咱們有更好的備份還原策略)
--恢復 數據庫 test2 來自 數據庫_快照 = 快照名
restore database Tets from database_snapshot='Tets_20140926'
/*--========附加和分離數據庫=========--
分離數據庫是指將數據庫從 SQL Server 實例中刪除,但使數據庫在其數據文件和事務日誌文件中保持不變。
以後,就可使用這些文件將數據庫附加到任何 SQL Server 實例,包括分離該數據庫的服務器。
使用場景,在教室或者公司的電腦上建立了一個數據庫,想把這個數據庫一點不變的拿到家裏的數據庫服務器上裝
使用注意事項
第一,數據庫中存在數據庫快照。必須首先刪除全部數據庫快照,而後才能分離數據庫。
第二,已複製併發布數據庫。若是進行復制,則數據庫必須是未發佈的。必須經過運行 sp_replicationdboption 禁用發佈後,才能分離數據庫。
第三,該數據庫正在某個數據庫鏡像會話中進行鏡像,除非終止該會話,不然沒法分離該數據庫。
第四,數據庫處於可疑狀態。在 SQL Server 2005 和更高版本中,沒法分離可疑數據庫;必須將數據庫設爲緊急模式,才能對其進行分離。
*/
--使用內置存儲過程sp_detach_db 來完成,例如分離數據庫「Stu_db2」,SQL語句以下
USE master
GO
EXEC sp_detach_db Stu_db3
--好比建立了登陸名「xiaotian」,默認數據庫就是這個被分離的,那麼「xiaotian」的默認數據庫就將變成master數據庫,同時也會刪除其全部的元數據。
/*--附加數據庫
一般附加好數據庫之後,數據庫的狀態會和被分離前的那一刻徹底同樣。可是有些問題須要注意:
從 SQL Server 2005 和更高版本中,附加和分離操做都會禁用數據庫的跨數據庫全部權連接。
附加數據庫時,TRUSTWORTHY 均設置爲 OFF
附加數據庫時,全部數據文件(MDF 文件和 NDF 文件)都必須可用。若是任何數據文件的路徑不一樣於首次建立數據庫或上次附加數據庫時的路徑,則必須指定文件的當前路徑。
若是附加的主數據文件是隻讀的,則數據庫引擎假定數據庫也是隻讀的。
沒法在早期版本的 SQL Server 中附加由較新版本的 SQL Server 建立的數據庫。
與任何徹底或部分脫機的數據庫同樣,不能附加正在還原文件的數據庫。
分離再從新附加只讀數據庫後,會丟失差別基準信息。這會致使 master 數據庫與只讀數據庫不一樣步。以後所作的差別備份可能致使意外結果。所以,若是對只讀數據庫使用差別備份,在從新附加數據庫後,應經過進行完整備份來創建當前差別基準。
第一種:使用SQL Server Management Studio附加數據庫很簡單。
1. 在【對象資源管理器】中找到【指定的Sql Server實例】下的【數據庫】目錄,右鍵單擊,選擇「附加」。彈出「附加數據庫窗口」;
2. 點擊窗口右邊中部的「添加」按鈕,添加要附加的數據文件;如圖3-36
3. 點擊肯定,完成數據庫附加。
*/
--第二種,用TSQL
USE master
GO
CREATE DATABASE Stu_db3 ON
( FILENAME = 'D:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\Stu_db2.mdf' ),
( FILENAME = 'D:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\Stu_db2_log.ldf' ),
( FILENAME = 'e:\Stu_db3_a.ndf' ),
( FILENAME = 'e:\Stu_db3_a.ldf' )
FOR ATTACH
GO
--若是分離出來後日志文件沒法使用了,可使用FOR ATTACH_REBUILD_LOG關鍵字指定系統重建日誌文件
CREATE DATABASE Stu_db3 ON
( FILENAME = 'D:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\Stu_db2.mdf' )
FOR ATTACH_REBUILD_LOG
GO
/*--移動數據庫文件--
使用場景:
故障恢復。例如,因爲硬件故障,數據庫處於可疑模式或被關閉。
預先安排位置須要調整。
文件所在的須要磁盤維護操做而進行的位置調整。
注意:若是要把文件移動到其餘的服務器上就只有經過上面的分離、附加或者下面要講的備份還原才能夠解決了
*/
--1.在執行文件移動前先運行以下代碼將stu_db3數據庫狀態設置爲OFFLINE
ALTER DATABASE Stu_db3 SET OFFLINE
--2.將全部的文件在Windows資源管理器中移動到新的位置。
--3.對於已移動的每一個文件,請運行如下語句
ALTER DATABASE Stu_db3
MODIFY FILE ( NAME = Stu_db3_a
, FILENAME = 'd:\Stu_db3_a.ndf' )
--4.設置完成後,恢復stu_db3數據庫狀態設置爲ONLINE
ALTER DATABASE Stu_db3 SET ONLINE --若是運行這句,你老是遇到問題,很簡單,把你玩的這個文件的權限給夠,讓當前用戶可以徹底操做便可
--還有就是跨服務器複製數據庫,有興趣能夠去玩玩,寫代碼的話不少,可是用圖形界面也能夠完成,我就不演示了
/* --備份&還原數據庫
從SQL Server 2005開始,能夠在數據庫聯機而且正在使用時進行備份。可是,存在下列**:
一、隱式或顯式引用脫機數據的任何備份操做都會失敗,例如你要備份的數據庫的一個文件組脫機。
二、數據庫仍在使用時,SQL Server 可使用聯機備份過程來備份數據庫。在備份過程當中,能夠進行多個操做;
例如:在執行備份操做期間容許使用 INSERT、UPDATE 或 DELETE 語句。
可是,若是在正在建立或刪除數據庫文件時嘗試啓動備份操做,則備份操做將等待,直到建立或刪除操做完成或者備份超時。
例如文件的添加、刪除、修改或者壓縮等操做。
三、全部的恢復模式都容許您備份完整或部分的 SQL Server 數據庫或數據庫的單個文件或文件組。不能建立表級備份。
備份方式兩種
第一種:圖形化界面操做:
第二種:寫代碼
*/
Use master
go
backup database Stu_db3 --要備份的數據庫
to disk='e:\db.bak' --備份文件的存放路徑和名字
with name='逗你玩數據庫備份' --備份集名稱
,description='數據庫徹底備份' --備註
,init --指定重寫全部備份集。noinit,不覆蓋現有備份
--差別備份
use master
go
backup database Stu_db3
to disk='e:\db-cy.bak'
with differential, --代表是差別備份
description='數據庫差別備份', --備註
init --指定不覆蓋現有備份
--校驗備份文件
RESTORE FILELISTONLY from DISK='e:\db-cy.bak' with file=1
--還原操做
USE master
GO
RESTORE DATABASE Stu_db3
FROM DISK = 'e:\db.bak'
WITH FILE = 1 --備份設備中的第一個備份集
, NORECOVERY --不對數據庫執行任何操做
, NOUNLOAD --不對數據庫作任何操做,不會滾未提交的事務
, REPLACE --覆蓋現有數據庫
GO --由於後面還有差別備份,因此必須接着還原,不然數據庫將認爲沒有還原完
RESTORE DATABASE Stu_db3
FROM DISK = 'e:\db-cy.bak'
WITH FILE = 1 --備份設備中的第一個備份集
, NORECOVERY --不對數據庫執行任何操做
, NOUNLOAD --不對數據庫作任何操做,不會滾未提交的事務
, REPLACE --覆蓋現有數據庫
GO
上面的代碼非但有圖文,簡直是視頻,地址
http://www.cnthc.com/?/article/67
http://www.cnthc.com/?/article/73數據庫