摘自:http://blog.itpub.net/post/1626/15010
一、四個(gè)系統(tǒng)數(shù)據(jù)庫(kù)的介紹
二、三種備份和恢復(fù)
三、兩種數(shù)據(jù)導(dǎo)入導(dǎo)出方法
四、數(shù)據(jù)庫(kù)維護(hù)計(jì)劃和作業(yè)的應(yīng)用(前提都是sqlserver agent服務(wù)要啟動(dòng))
五、安全性介紹
六、sql腳本的生成
七、事件探查器的應(yīng)用
八、日志的截?cái)?BR>
一、四個(gè)系統(tǒng)數(shù)據(jù)庫(kù)的介紹
1、Master數(shù)據(jù)庫(kù)
Master數(shù)據(jù)庫(kù)記錄了Sqlserver所有的服務(wù)器級(jí)系統(tǒng)信息,所有的注冊(cè)帳戶和密碼,以及所有的系統(tǒng)設(shè)置信息,還記錄了所有用戶定義數(shù)據(jù)庫(kù)的存儲(chǔ)位置和初始化信息。
2、Tempdb數(shù)據(jù)庫(kù)
Tempdb記錄了所有的臨時(shí)表、臨時(shí)數(shù)據(jù)和臨時(shí)創(chuàng)建的存儲(chǔ)過(guò)程。Tempdb數(shù)據(jù)庫(kù)是一個(gè)全局資源,沒(méi)有專(zhuān)門(mén)的權(quán)限限制,允許所有可以連上Sqlserver服務(wù)器的用戶使用。
在Tempdb數(shù)據(jù)庫(kù)存放的所有數(shù)據(jù)信息都是臨時(shí)的。每當(dāng)連接斷開(kāi)時(shí),所有的臨時(shí)表和臨時(shí)存儲(chǔ)過(guò)程都將自動(dòng)丟棄。每次系統(tǒng)啟動(dòng)時(shí)Sqlserver都會(huì)根據(jù)Model數(shù)據(jù)庫(kù)重新創(chuàng)建Tempdb數(shù)據(jù)庫(kù)。
3、Model數(shù)據(jù)庫(kù)
Model數(shù)據(jù)庫(kù)是用戶建立新數(shù)據(jù)庫(kù)的模板,它包含了將復(fù)制到每個(gè)用戶數(shù)據(jù)庫(kù)中去的系統(tǒng)表。每當(dāng)創(chuàng)建數(shù)據(jù)庫(kù)的語(yǔ)句create database執(zhí)行時(shí),服務(wù)器總是通過(guò)復(fù)制model數(shù)據(jù)庫(kù)來(lái)建立新數(shù)據(jù)庫(kù)的前面部分,新數(shù)據(jù)庫(kù)的后面部分被初始化成空白的數(shù)據(jù)頁(yè),以供用戶存放數(shù)據(jù)。
4、Msdb數(shù)據(jù)庫(kù)
Msdb數(shù)據(jù)庫(kù)主要被sqlserver agent用來(lái)進(jìn)行復(fù)制、作業(yè)調(diào)度以及管理報(bào)警等活動(dòng)。該數(shù)據(jù)庫(kù)常被用來(lái)通過(guò)調(diào)度任務(wù)排除故障。
5、說(shuō)明:在具體應(yīng)用中可以在企業(yè)管理器里將這四個(gè)系統(tǒng)數(shù)據(jù)庫(kù)隱藏起來(lái),可以避免用戶誤操作,也可以起到讓用戶知道操作系統(tǒng)數(shù)據(jù)庫(kù)帶來(lái)的后果。
二、三種備份和恢復(fù)
1、通過(guò)企業(yè)管理器的備份和還原數(shù)據(jù)庫(kù)。
2、在查詢(xún)分析器里執(zhí)行sp_detach_db 'dbname',true分離數(shù)據(jù)庫(kù),將操作系統(tǒng)文件*.mdf(主數(shù)據(jù)文件)和*.ldf(日志文件)拷貝出來(lái),當(dāng)然你也可以通過(guò)停止sqlserver服務(wù)來(lái)拷貝操作系統(tǒng)文件。
通過(guò)sp_attach_db(兩個(gè)操作系統(tǒng)文件都完好)或sp_attach_single_file_db(主數(shù)據(jù)文件完好,日志文件破壞)來(lái)附加數(shù)據(jù)庫(kù)(如果在附加中有問(wèn)題,執(zhí)行下列步驟)。
mssql里附加數(shù)據(jù)庫(kù)出錯(cuò)的解決方法在QA里執(zhí)行sp_attach_db或者sp_attach_single_file_db,出現(xiàn)提示:錯(cuò)誤1813:未能打開(kāi)新數(shù)據(jù)庫(kù)'dbname',create database 將終止。設(shè)備激活錯(cuò)誤。物理文件名'd:\sql server\mssql\data\dbname _log.ldf'可能有誤! 按下面的步驟處理:1.新建一個(gè)同名的數(shù)據(jù)庫(kù)2.再停掉sqlserver服務(wù)(注意不要分離數(shù)據(jù)庫(kù))3.用原數(shù)據(jù)庫(kù)的數(shù)據(jù)文件覆蓋掉這個(gè)新建的數(shù)據(jù)庫(kù)4.再重啟sqlserver服務(wù)5.此時(shí)打開(kāi)企業(yè)管理器時(shí)會(huì)出現(xiàn)置疑,先不管,執(zhí)行下面的語(yǔ)句(注意修改其中的數(shù)據(jù)庫(kù)名)6.完成后一般就可以訪問(wèn)數(shù)據(jù)庫(kù)中的數(shù)據(jù)了。這時(shí),數(shù)據(jù)庫(kù)本身一般還有問(wèn)題,解決辦法是:利用數(shù)據(jù)庫(kù)的腳本創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù),然后通過(guò)DTS將數(shù)據(jù)導(dǎo)進(jìn)去就行了use mastergosp_configure 'allow updates',1 reconfigure with overridegoupdate sysdatabases set status =32768 where name='置疑的數(shù)據(jù)庫(kù)名'gosp_dboption '置疑的數(shù)據(jù)庫(kù)名', 'single user', 'true'godbcc checkdb('置疑的數(shù)據(jù)庫(kù)名') goupdate sysdatabases set status =28 where name='置疑的數(shù)據(jù)庫(kù)名'gosp_configure 'allow updates', 0 reconfigure with overridego sp_dboption '置疑的數(shù)據(jù)庫(kù)名', 'single user', 'false'go 也可以通過(guò)企業(yè)管理器來(lái)附加數(shù)據(jù)庫(kù)。3、查詢(xún)分析器里執(zhí)行backup database 'dbname' to disk='路徑'來(lái)備份數(shù)據(jù)庫(kù),restore database 'dbname' from disk='路徑'來(lái)還原數(shù)據(jù)庫(kù)。(以上提到的sql語(yǔ)句里的符號(hào)如''等都應(yīng)該是半角的。這里的操作實(shí)際上是上面1里對(duì)應(yīng)的sql語(yǔ)句操作。)
三、兩種數(shù)據(jù)導(dǎo)入導(dǎo)出方法
1、通過(guò)DTS來(lái)做
2、bcp實(shí)用工具來(lái)做
例如(hostname表示機(jī)器名,user表示sqlserver登陸用戶名,resu表示對(duì)應(yīng)的用戶登陸的密碼):
exec master..xp_cmdshell 'bcp dbname..table_name out d:\test.xls -c -Shostname -Uuser -Presu'
四、數(shù)據(jù)庫(kù)維護(hù)計(jì)劃和作業(yè)的應(yīng)用(前提都是sqlserver agent服務(wù)要啟動(dòng))
1、數(shù)據(jù)庫(kù)維護(hù)計(jì)劃
2、作業(yè)
/*在遠(yuǎn)程機(jī)器操作系統(tǒng)的計(jì)算機(jī)管理里建立一個(gè)用戶名為kyle的用戶,密碼為1234,同時(shí)在那臺(tái)機(jī)器的非系統(tǒng)盤(pán)里建一個(gè)名為backup的共享文件夾,為了安全另外設(shè)置這個(gè)文件夾只有這個(gè)kyle用戶可以訪問(wèn)。*/
declare @sql varchar(500)
select @sql='\\10.2.0.12\backup\dbname'+'_db_'+convert(varchar(10),getdate(),112) +
substring(convert(varchar(10),getdate(),108),1,2) +'.bak'
exec master..xp_cmdshell 'net use \\10.2.0.12\backup 1234 /user:remotehost\kyle'
backup database dbname to disk=@sql --備份數(shù)據(jù)庫(kù),這里的10.2.0.12為遠(yuǎn)程機(jī)器的ip,remotehost為遠(yuǎn)程機(jī)器的機(jī)器名,dbname為本地sqlserver服務(wù)器要備份的數(shù)據(jù)庫(kù)
go
declare @sql varchar(500)
select @sql='del '+'\\10.2.0.12\backup\dbname'+'_db_'+convert(varchar(10),dateadd(day,-7,getdate()),112) + substring(convert(varchar(10),dateadd(day,-7,getdate()),108),1,2) +'.bak'
exec master..xp_cmdshell @sql --刪除7天前的備份,也就是只保留7個(gè)最新備份
go
五、安全性介紹
1、兩種登陸方式:
標(biāo)準(zhǔn)登陸方式(sqlserver和windows),采用sqlserver提供的用戶名和密碼登陸連接,可用sp_denylogin 'builtin\administrators'拒絕操作系統(tǒng)管理員登陸連接(sp_grantlogin 'builtin\administrators'反轉(zhuǎn)),也稱(chēng)非信任登陸機(jī)制;這種認(rèn)證方式是兩種方式中最安全的。
集成登陸方式(僅windows),將windows的用戶和工作組映射為sqlserver的登陸方式,也稱(chēng)信任機(jī)制。
2、一個(gè)特殊帳戶:sa,為系統(tǒng)默認(rèn)帳戶,不能刪除,擁有最高的管理權(quán)限,可以執(zhí)行sqlserver服務(wù)器范圍內(nèi)的所有操作,所以一定要給sa加上密碼,密碼推薦不少于6位,最后是字母、數(shù)字和特殊符號(hào)的組合。
3、兩個(gè)特殊數(shù)據(jù)庫(kù)用戶:
dbo,數(shù)據(jù)庫(kù)的擁有者,在安裝sqlserver時(shí),被設(shè)置到model數(shù)據(jù)庫(kù)中,不能被刪除,所以dbo在每個(gè)數(shù)據(jù)庫(kù)中都存在。dbo是數(shù)據(jù)庫(kù)的最高權(quán)力者,對(duì)應(yīng)于創(chuàng)建該數(shù)據(jù)庫(kù)的登陸用戶,即所有的數(shù)據(jù)庫(kù)的dbo都對(duì)應(yīng)于sa帳戶;
guest,這個(gè)用戶可以使任何已經(jīng)登陸到sqlserver服務(wù)器的用戶都可以訪問(wèn)數(shù)據(jù)庫(kù),即使它還沒(méi)有成為本數(shù)據(jù)庫(kù)的用戶。所有的系統(tǒng)數(shù)據(jù)庫(kù)除model以外都有g(shù)uest用戶。所有新建的數(shù)據(jù)庫(kù)都沒(méi)有這個(gè)用戶,如果油必要添加guest用戶,請(qǐng)用sp_grantdbaccess來(lái)明確建立這個(gè)用戶。
4、還原數(shù)據(jù)庫(kù)的時(shí)候之所以要?jiǎng)h除本數(shù)據(jù)庫(kù)的用戶如user,然后在安全性→登陸里重新建這個(gè)用戶和指定相應(yīng)的訪問(wèn)權(quán)限,是因?yàn)檫@個(gè)用戶在master里不存在。當(dāng)然你也可以用sp_addlogin 'user','resu'來(lái)新建user用戶,sp_change_users_login 'update_one','user','user'來(lái)指定在master中的對(duì)應(yīng)。
5、具有system administrators服務(wù)器角色的成員擁有與sa一樣的權(quán)限,具有db_owner數(shù)據(jù)庫(kù)角色的用戶具有對(duì)本數(shù)據(jù)庫(kù)的完全操作權(quán)限。
六、sql腳本的生成
說(shuō)明:可以選擇生成某個(gè)具體數(shù)據(jù)庫(kù)對(duì)象的腳本,也可以生成整個(gè)數(shù)據(jù)庫(kù)對(duì)象的腳本。
七、事件探查器的應(yīng)用
說(shuō)明:追蹤對(duì)后臺(tái)數(shù)據(jù)庫(kù)的每一個(gè)請(qǐng)求,以此可以定位前臺(tái)頁(yè)面的哪個(gè)屬性對(duì)應(yīng)后臺(tái)表的哪個(gè)字段。
八、日志的截?cái)?BR>backup log dbname with no_log
dbcc shrinkdatabase('dbname')