第一篇:sqlserver日志文件總結(jié)及充滿處理
sqlserver日志文件總結(jié)及充滿處理 文章來(lái)源:sqlserver論壇 作者:hansbj
交易日志(Transaction logs)是數(shù)據(jù)庫(kù)結(jié)構(gòu)中非常重要但又經(jīng)常被忽略的部分。由于它并不像數(shù)據(jù)庫(kù)中的schema那樣活躍,因此很少有人關(guān)注交易日志。
交易日志是針對(duì)數(shù)據(jù)庫(kù)改變所做的記錄,它可以記錄針對(duì)數(shù)據(jù)庫(kù)的任何操作,并將記錄結(jié)果保存在獨(dú)立的文件中。對(duì)于任何每一個(gè)交易過(guò)程,交易日志都有非常全面的記錄,根據(jù)這些記錄可以將數(shù)據(jù)文件恢復(fù)成交易前的狀態(tài)。從交易動(dòng)作開(kāi)始,交易日志就處于記錄狀態(tài),交易過(guò)程中對(duì)數(shù)據(jù)庫(kù)的任何操作都在記錄范圍,直到用戶點(diǎn)擊提交或后退后才結(jié)束記錄。每個(gè)數(shù)據(jù)庫(kù)都擁有至少一個(gè)交易日志以及一個(gè)數(shù)據(jù)文件。
出于性能上的考慮,SQL Server將用戶的改動(dòng)存入緩存中,這些改變會(huì)立即寫(xiě)入交易日志,但不會(huì)立即寫(xiě)入數(shù)據(jù)文件。交易日志會(huì)通過(guò)一個(gè)標(biāo)記點(diǎn)來(lái)確定某個(gè)交易是否已將緩存中的數(shù)據(jù)寫(xiě)入數(shù)據(jù)文件。當(dāng)SQL Server重啟后,它會(huì)查看日志中最新的標(biāo)記點(diǎn),并將這個(gè)標(biāo)記點(diǎn)后面的交易記錄抹去,因?yàn)檫@些交易記錄并沒(méi)有真正的將緩存中的數(shù)據(jù)寫(xiě)入數(shù)據(jù)文件。這可以防止那些中斷的交易修改數(shù)據(jù)文件。
維護(hù)交易日志
因?yàn)楹芏嗳私?jīng)常遺忘交易日志,因此它也會(huì)給系統(tǒng)帶來(lái)一些問(wèn)題。隨著系統(tǒng)的不斷運(yùn)行,日志記錄的內(nèi)容會(huì)越來(lái)越多,日志文件的體積也會(huì)越來(lái)越大,最終導(dǎo)致可用磁盤空間不足。除非日常工作中經(jīng)常對(duì)日志進(jìn)行清理,否則日志文件最終會(huì)侵占分區(qū)內(nèi)的全部可用空間。日志的默認(rèn)配置為不限容量,如果以這種配置工作,它就會(huì)不斷膨脹,最終也會(huì)占據(jù)全部可用空間。這兩種情況都會(huì)導(dǎo)致數(shù)據(jù)庫(kù)停止工作。
對(duì)交易日志的日常備份工作可以有效的防止日志文件過(guò)分消耗磁盤空間。備份過(guò)程會(huì)將日志中不再需要的部分截除。截除的方法是首先把舊記錄標(biāo)記為非活動(dòng)狀態(tài),然后將新日志覆蓋到舊日志的位置上,這樣就可以防止交易日志的體積不斷膨脹。如果無(wú)法對(duì)日志進(jìn)行經(jīng)常性的備份工作,最好將數(shù)據(jù)庫(kù)設(shè)置為“簡(jiǎn)單恢復(fù)模式”。在這種模式下,系統(tǒng)會(huì)強(qiáng)制交易日志在每次記錄標(biāo)記點(diǎn)時(shí),自動(dòng)進(jìn)行截除操作,以新日志覆蓋舊日志。
截除過(guò)程發(fā)生在備份或?qū)⑴f標(biāo)記點(diǎn)標(biāo)為非活動(dòng)狀態(tài)時(shí),它使得舊的交易記錄可以被覆蓋,但這并不會(huì)減少交易日志實(shí)際占用的磁盤空間。就算不再使用日志,它依然會(huì)占據(jù)一定的空間。因此在維護(hù)時(shí),還需要對(duì)交易日志進(jìn)行壓縮。壓縮交易日志的方法是刪除非活動(dòng)記錄,從而減少日志文件所占用的物理硬盤空間。
通過(guò)使用DBCC SHRINKDATABASE語(yǔ)句可以壓縮當(dāng)前數(shù)據(jù)庫(kù)的交易日志文件,DBCC SHRINKFILE語(yǔ)句用來(lái)壓縮指定的交易日志文件,另外也可以在數(shù)據(jù)庫(kù)中激活自動(dòng)壓縮操作。當(dāng)壓縮日志時(shí),首先會(huì)將舊記錄標(biāo)記為非活動(dòng)狀態(tài),然后將帶有非活動(dòng)標(biāo)記的記錄徹底刪除。根據(jù)所使用的壓縮方式的不同,你可能不會(huì)立即看到結(jié)果。在理想情況下,壓縮工作應(yīng)該選在系統(tǒng)不是非常繁忙的時(shí)段進(jìn)行,否則有可能影響數(shù)據(jù)庫(kù)性能。
恢復(fù)數(shù)據(jù)庫(kù)
交易記錄備份可以用來(lái)將數(shù)據(jù)庫(kù)恢復(fù)到某一指定狀態(tài),但交易記錄備份本身不足以完成恢復(fù)數(shù)據(jù)庫(kù)的 任務(wù),還需要備份的數(shù)據(jù)文件參與恢復(fù)工作?;謴?fù)數(shù)據(jù)庫(kù)時(shí),首先進(jìn)行的是數(shù)據(jù)文件的恢復(fù)工作。在整個(gè)數(shù)據(jù)文件恢復(fù)完成前,不要將其設(shè)為完成狀態(tài),否則交易日志就不會(huì)被恢復(fù)。當(dāng)數(shù)據(jù)文件恢復(fù)完成,系統(tǒng)會(huì)通過(guò)交易日志的備份將數(shù)據(jù)庫(kù)恢復(fù)成用戶希望的狀態(tài)。如果在數(shù)據(jù)庫(kù)最后一次備份后,存在多個(gè)日志文件的備份,備份程序會(huì)按照它們建立的時(shí)間依次將其恢復(fù)。
另一種被稱為log shipping的過(guò)程可以提供更強(qiáng)的數(shù)據(jù)庫(kù)備份能力。當(dāng)log shipping配置好后,它可以將數(shù)據(jù)庫(kù)整個(gè)復(fù)制到另一臺(tái)服務(wù)器上。在這種情況下,交易日志也會(huì)定期發(fā)送到備份服務(wù)器上供恢復(fù)數(shù)據(jù)使用。這使得服務(wù)器一直處于熱備份狀態(tài),當(dāng)數(shù)據(jù)發(fā)生改變時(shí)它也隨之更新。另一個(gè)服務(wù)器被稱作監(jiān)視(monitor)服務(wù)器,可以用來(lái)監(jiān)視按規(guī)定時(shí)間間隔發(fā)送的shipping信號(hào)。如果在規(guī)定時(shí)間內(nèi)沒(méi)有收到信號(hào),監(jiān)視服務(wù)器會(huì)將這一事件記錄到事件日志。這種機(jī)制使得log shipping經(jīng)常成為災(zāi)難恢復(fù)計(jì)劃中使用的方案。
性能優(yōu)化
交易日志對(duì)數(shù)據(jù)庫(kù)有重要作用,同時(shí)它對(duì)系統(tǒng)的整體性能也有一定影響。通過(guò)幾個(gè)選項(xiàng),我們可以對(duì)交易日志的性能進(jìn)行優(yōu)化。由于交易日志是一個(gè)連續(xù)的磁盤寫(xiě)入過(guò)程,在這當(dāng)中不會(huì)發(fā)生讀取動(dòng)作。因此將日志文件放在一個(gè)獨(dú)立的磁盤,對(duì)優(yōu)化性能有一定作用。
另一項(xiàng)優(yōu)化措施與日志文件的體積有關(guān)。我們可以設(shè)置日志文件的體積不超過(guò)硬盤空間的百分之幾,或者確定它的大小。如果將其設(shè)置的過(guò)大會(huì)浪費(fèi)磁盤空間,而如果設(shè)置的過(guò)小則會(huì)強(qiáng)制記錄文件不斷嘗試擴(kuò)展,導(dǎo)致數(shù)據(jù)庫(kù)性能下降。
事務(wù)日志文件Transaction Log File是用來(lái)記錄數(shù)據(jù)庫(kù)更新情況的文件,擴(kuò)展名為ldf。
在 SQL Server 7.0 和 SQL Server 2000 中,如果設(shè)置了自動(dòng)增長(zhǎng)功能,事務(wù)日志文件將會(huì)自動(dòng)擴(kuò)展。
一般情況下,在能夠容納兩次事務(wù)日志截?cái)嘀g發(fā)生的最大數(shù)量的事務(wù)時(shí),事務(wù)日志的大小是穩(wěn)定的,事務(wù)日志截?cái)嘤蓹z查點(diǎn)或者事務(wù)日志備份觸發(fā)。
然而,在某些情況下,事務(wù)日志可能會(huì)變得非常大,以致用盡空間或變滿。通常,在事務(wù)日志文件占盡可用磁盤空間且不能再擴(kuò)展時(shí),您將收到如下錯(cuò)誤消息:
Error:9002, Severity:17, State:2
The log file for database '%.*ls' is full.除了出現(xiàn)此錯(cuò)誤消息之外,SQL Server 還可能因?yàn)槿鄙偈聞?wù)日志擴(kuò)展空間而將數(shù)據(jù)庫(kù)標(biāo)記為 SUSPECT。有關(guān)如何從此情形中恢復(fù)的其他信息,請(qǐng)參見(jiàn) SQL Server 聯(lián)機(jī)幫助中的“磁盤空間不足”主題。
另外,事務(wù)日志擴(kuò)展可能導(dǎo)致下列情形:
· 非常大的事務(wù)日志文件。
· 事務(wù)可能會(huì)失敗并可能開(kāi)始回滾。
· 事務(wù)可能會(huì)用很長(zhǎng)時(shí)間才能完成。
· 可能發(fā)生性能問(wèn)題。
· 可能發(fā)生阻塞現(xiàn)象。
原因
事務(wù)日志擴(kuò)展可能由于以下原因或情形而發(fā)生:
· 未提交的事務(wù)
· 非常大的事務(wù)
· 操作:DBCC DBREINDEX 和 CREATE INDEX
· 在從事務(wù)日志備份還原時(shí)
· 客戶端應(yīng)用程序不處理所有結(jié)果
· 查詢?cè)谑聞?wù)日志完成擴(kuò)展之前超時(shí),您收到假的“Log Full”錯(cuò)誤消息
· 未復(fù)制的事務(wù)
日志文件滿而造成SQL數(shù)據(jù)庫(kù)無(wú)法寫(xiě)入文件時(shí),可用兩種方法:
一種方法:清空日志。
1.打開(kāi)查詢分析器,輸入命令
DUMP TRANSACTION 數(shù)據(jù)庫(kù)名 WITH NO_LOG
2.再打開(kāi)企業(yè)管理器--右鍵你要壓縮的數(shù)據(jù)庫(kù)--所有任務(wù)--收縮數(shù)據(jù)庫(kù)--收縮文件--選擇日志文件--在收縮方式里選擇收縮至XXM,這里會(huì)給出一個(gè)允許收縮到的最小M數(shù),直接輸入這個(gè)數(shù),確定就可以了。
另一種方法有一定的風(fēng)險(xiǎn)性,因?yàn)镾QL SERVER的日志文件不是即時(shí)寫(xiě)入數(shù)據(jù)庫(kù)主文件的,如處理不當(dāng),會(huì)造成數(shù)據(jù)的損失。
1: 刪除LOG
分離數(shù)據(jù)庫(kù) 企業(yè)管理器->服務(wù)器->數(shù)據(jù)庫(kù)->右鍵->分離數(shù)據(jù)庫(kù)
2:刪除LOG文件
附加數(shù)據(jù)庫(kù) 企業(yè)管理器->服務(wù)器->數(shù)據(jù)庫(kù)->右鍵->附加數(shù)據(jù)庫(kù)
此法生成新的LOG,大小只有500多K。
注意:建議使用第一種方法。
如果以后,不想要它變大。
SQL2000下使用:
在數(shù)據(jù)庫(kù)上點(diǎn)右鍵->屬性->選項(xiàng)->故障恢復(fù)-模型-選擇-簡(jiǎn)單模型。
或用SQL語(yǔ)句:
alter database 數(shù)據(jù)庫(kù)名 set recovery simple
另外,數(shù)據(jù)庫(kù)屬性有兩個(gè)選項(xiàng),與事務(wù)日志的增長(zhǎng)有關(guān):
Truncate log on checkpoint
(此選項(xiàng)用于SQL7.0,SQL 2000中即故障恢復(fù)模型選擇為簡(jiǎn)單模型)
當(dāng)執(zhí)行CHECKPOINT 命令時(shí)如果事務(wù)日志文件超過(guò)其大小的70% 則將其內(nèi)容清除在開(kāi)發(fā)數(shù)據(jù)庫(kù)時(shí)時(shí)常將此選項(xiàng)設(shè)置為True
Auto shrink
定期對(duì)數(shù)據(jù)庫(kù)進(jìn)行檢查當(dāng)數(shù)據(jù)庫(kù)文件或日志文件的未用空間超過(guò)其大小的25%時(shí),系統(tǒng)將會(huì)自動(dòng)縮減文件使其未用空間等于25% 當(dāng)文件大小沒(méi)有超過(guò)其建立時(shí)的初始大小時(shí)不會(huì)縮減文件縮減后的文件也必須大于或等于其初始大小對(duì)事務(wù)日志文件的縮減只有在對(duì)其作備份時(shí)或?qū)runcate log on checkpoint 選項(xiàng)設(shè)為True 時(shí)才能進(jìn)行。
注意:一般立成建立的數(shù)據(jù)庫(kù)默認(rèn)屬性已設(shè)好,但碰到意外情況使數(shù)據(jù)庫(kù)屬性被更改,請(qǐng)用戶清空日志后,檢查數(shù)據(jù)庫(kù)的以上屬性,以防事務(wù)日志再次充滿。
第二篇:日志和文件接入規(guī)范
數(shù)據(jù)接入規(guī)范-日志和文件
修訂歷史
日期
修改說(shuō)明
部門
修改人
數(shù)據(jù)接入需求
基于數(shù)據(jù)采集需求,初步判斷數(shù)據(jù)的接入源是否可以從日志和文件進(jìn)行獲取。聯(lián)系技術(shù)研發(fā)部同事,請(qǐng)求數(shù)據(jù)源接入的位置參數(shù),通過(guò)配置化方式定期讀取服務(wù)器指定位置的日志和文件,通過(guò)程序清洗日志,分割成字段裝載到數(shù)據(jù)倉(cāng)庫(kù)貼源層。
數(shù)據(jù)接入流程
1.數(shù)據(jù)中心分析組接到TAPD數(shù)據(jù)接入需求之后,分析接入數(shù)據(jù)屬于數(shù)據(jù)接口列表的哪個(gè)系統(tǒng),在對(duì)應(yīng)的系統(tǒng)標(biāo)題下添加模板,參照APP-app_login_log。
和需求發(fā)起人進(jìn)行溝通,確定提供數(shù)據(jù)的方式(數(shù)據(jù)庫(kù)、文件、接口等),讓需求發(fā)起人補(bǔ)充詳細(xì)的數(shù)據(jù)口徑,補(bǔ)充到需求要求里面,指定數(shù)據(jù)倉(cāng)庫(kù)組或平臺(tái)組的一個(gè)人進(jìn)行轉(zhuǎn)發(fā)。
2.數(shù)據(jù)倉(cāng)庫(kù)組或平臺(tái)組根據(jù)需求描述。跟數(shù)據(jù)源提供方(可以是需求發(fā)起方、也可以是技術(shù)研發(fā)部門)溝通,讓其補(bǔ)充模板里的位置參數(shù)。
3.數(shù)據(jù)源提供方根據(jù)模板要求,提供位置配置參數(shù)。
4.數(shù)據(jù)倉(cāng)庫(kù)組或平臺(tái)組在接入數(shù)據(jù)后,整理數(shù)據(jù)格式,編寫(xiě)日志清洗轉(zhuǎn)換腳本,并補(bǔ)充裝載目標(biāo)表信息。
5.數(shù)據(jù)中心分析組對(duì)最終接入的數(shù)據(jù)進(jìn)行驗(yàn)收,并通知需求發(fā)起人如何獲得接入數(shù)據(jù)。
數(shù)據(jù)源接入模板
需求要求(分析組補(bǔ)充)
tapd需求單號(hào):1002513
提起人:xxx(Richard.chen)
需求單號(hào)內(nèi)容:
???
提供數(shù)據(jù)方式:
數(shù)據(jù)庫(kù)、文件、接口
詳細(xì)的數(shù)據(jù)口徑:???
位置配置參數(shù)(技術(shù)研發(fā)部補(bǔ)充)
配置參數(shù)
參數(shù)取值
服務(wù)器地址
192.168.1.1
端口類型
ftp
端口號(hào)
系統(tǒng)用戶名
user
密碼
pwd
日志路徑
日志文件通配符
xxx/yyyymmdd/AppLog
app_login_log_[yyyymmdd].json
日志內(nèi)容分割規(guī)則
文字描述
接入模型字段(倉(cāng)庫(kù)組補(bǔ)充)
字段名
注釋
字段類型
必填
必填
必填
必填
必填
必填
抽取參數(shù)(倉(cāng)庫(kù)組補(bǔ)充)
配置參數(shù)
參數(shù)取值
抽數(shù)周期
每天
抽數(shù)時(shí)間
7:00
文件名匹配條件
1:全量匹配抽?。ㄆヅ渫ㄅ浞闯槿。?/p>
2:日期匹配抽取(僅抽取通配符日期字段匹配數(shù)據(jù)日期條件的文件)
數(shù)據(jù)日期格式
Yyyymmdd
Yyyy-mm-dd
數(shù)據(jù)日期條件
1:上一天日期
2:當(dāng)前時(shí)間日期
3:當(dāng)前時(shí)間歸屬周周日
4:當(dāng)前時(shí)間歸屬月一號(hào)
日志清洗轉(zhuǎn)換腳本(倉(cāng)庫(kù)組補(bǔ)填)
補(bǔ)充腳本位置即可,如t8t-bi-dsc\log-app\log-app.py
裝載目標(biāo)表(倉(cāng)庫(kù)組補(bǔ)填)
配置參數(shù)
參數(shù)取值
stg層表名稱
必填
stg層表描述
必填
ods層表名稱
必填
ods層表描述
必填
數(shù)據(jù)接口列表
PC
H5
APP
app_login_log
l
需求單號(hào)(分析組補(bǔ)充)
tapd需求單號(hào):xxxxxxx
提起人:xxx(Richard.chen)
l
位置配置參數(shù)(技術(shù)研發(fā)部補(bǔ)充)
配置參數(shù)
參數(shù)取值
服務(wù)器地址
192.168.1.1
端口類型
ftp
端口號(hào)
系統(tǒng)用戶名
user
密碼
pwd
日志路徑
日志文件通配符
xxx/yyyymmdd/AppLog
app_login_log_[yyyymmdd].json
日志內(nèi)容分割規(guī)則
文字描述
l
接入模型字段(倉(cāng)庫(kù)組補(bǔ)充)
字段名
注釋
字段類型
必填
必填
必填
必填
必填
必填
l
抽取參數(shù)(倉(cāng)庫(kù)組補(bǔ)充)
配置參數(shù)
參數(shù)取值
抽數(shù)周期
每天
抽數(shù)時(shí)間
7:00
文件名匹配條件
1:全量匹配抽?。ㄆヅ渫ㄅ浞闯槿。?/p>
2:日期匹配抽取(僅抽取通配符日期字段匹配數(shù)據(jù)日期條件的文件)
數(shù)據(jù)日期格式
Yyyymmdd
Yyyy-mm-dd
數(shù)據(jù)日期條件
1:上一天日期
2:當(dāng)前時(shí)間日期
3:當(dāng)前時(shí)間歸屬周周日
4:當(dāng)前時(shí)間歸屬月一號(hào)
l
日志清洗轉(zhuǎn)換腳本(倉(cāng)庫(kù)組補(bǔ)填)
補(bǔ)充腳本位置即可,如t8t-bi-dsc\log-app\log-app.py
l
裝載目標(biāo)表(倉(cāng)庫(kù)組補(bǔ)填)
配置參數(shù)
參數(shù)取值
stg層表名稱
必填
stg層表描述
必填
ods層表名稱
必填
ods層表描述
必填
app_diary_log
小程序
第三篇:課題:SQLServer存儲(chǔ)過(guò)程返回值總結(jié)
SQLServer存儲(chǔ)過(guò)程返回值總結(jié)
1.存儲(chǔ)過(guò)程沒(méi)有返回值的情況(即存儲(chǔ)過(guò)程語(yǔ)句中沒(méi)有return之類的語(yǔ)句)
用方法 int count = ExecuteNonQuery(..)執(zhí)行存儲(chǔ)過(guò)程其返回值只有兩種情況
(1)假如通過(guò)查詢分析器執(zhí)行該存儲(chǔ)過(guò)程,在顯示欄中假如有影響的行數(shù),則影響幾行count就是幾
(2)假如通過(guò)查詢分析器執(zhí)行該存儲(chǔ)過(guò)程,在顯示欄中假如顯示'命令已成功完成。'則count =-1;在顯示欄中假如有查詢結(jié)果,則count =-1
總結(jié):A.ExecuteNonQuery()該方法只返回影響的行數(shù),假如沒(méi)有影響行數(shù),則該方法的返回值只能是-1,不會(huì)為0。
B.不論ExecuteNonQuery()方法是按照CommandType.StoredProcedure或者CommandType.Text執(zhí)行,其效果和A一樣。
2.獲得存儲(chǔ)過(guò)程的返回值--通過(guò)查詢分析器獲得
(1)不帶任何參數(shù)的存儲(chǔ)過(guò)程(存儲(chǔ)過(guò)程語(yǔ)句中含有return)
---創(chuàng)建存儲(chǔ)過(guò)程
CREATE PROCEDURE testReturn
AS
return 145
GO
---執(zhí)行存儲(chǔ)過(guò)程
DECLARE @RC int
exec @RC=testReturn
select @RC
---說(shuō)明
查詢結(jié)果為145
(2)帶輸入?yún)?shù)的存儲(chǔ)過(guò)程(存儲(chǔ)過(guò)程語(yǔ)句中含有return)
---創(chuàng)建存儲(chǔ)過(guò)程
create procedure sp_add_table1
@in_name varchar(100), @in_addr varchar(100), @in_tel varchar(100)
as
if(@in_name = '' or @in_name is null)
return 1
else
begin
insert into table1(name,addr,tel)values(@in_name,@in_addr,@in_tel)
return 0
end
---執(zhí)行存儲(chǔ)過(guò)程
<1>執(zhí)行下列,返回1
declare @count int exec @count = sp_add_table1 '','中三路','123456' select @count
<2>執(zhí)行下列,返回0
declare @count int exec @count = sp_add_table1 '','中三路','123456' select @count
---說(shuō)明
查詢結(jié)果不是0就是1
(3)帶輸出參數(shù)的存儲(chǔ)過(guò)程(存儲(chǔ)過(guò)程中可以有return可以沒(méi)有return)
例子A:
---創(chuàng)建存儲(chǔ)過(guò)程
create procedure sp_output
@output int output
as
set @output = 121
return 1
---執(zhí)行存儲(chǔ)過(guò)程
<1>執(zhí)行下列,返回121
declare @out int
exec sp_output @out output
select @out
<2>執(zhí)行下列,返回1
declare @out int
declare @count int exec @count = sp_output @out output
select @count
---說(shuō)明
有return,只要查詢輸出參數(shù),則查詢結(jié)果為輸出參數(shù)在存儲(chǔ)過(guò)程中最后變成的值;只要不查詢輸出參數(shù),則查詢結(jié)果為return返回的值
例子B:
---創(chuàng)建存儲(chǔ)過(guò)程
create procedure sp_output
@output int output
as
set @output = 121
---執(zhí)行存儲(chǔ)過(guò)程
<1>執(zhí)行下列,返回121
declare @out int
exec sp_output @out output
select @out
<2>執(zhí)行下列,返回0
declare @out int
declare @count int
exec @count = sp_output @out output
select @count
---說(shuō)明
沒(méi)有return,只要查詢輸出參數(shù),則查詢結(jié)果為輸出參數(shù)在存儲(chǔ)過(guò)程中最后變成的值;只要不查詢輸出參數(shù),則查詢結(jié)果為0
總結(jié):
(1)存儲(chǔ)過(guò)程共分為3類:
A.返回記錄集的存儲(chǔ)過(guò)程---------------------------其執(zhí)行結(jié)果是一個(gè)記錄集,例如:從數(shù)據(jù)庫(kù)中檢索出符合某一個(gè)或幾個(gè)條件的記錄
B.返回?cái)?shù)值的存儲(chǔ)過(guò)程(也可以稱為標(biāo)量存儲(chǔ)過(guò)程)-----其執(zhí)行完以后返回一個(gè)值,例如:在數(shù)據(jù)庫(kù)中執(zhí)行一個(gè)有返回值的函數(shù)或命令
C.行為存儲(chǔ)過(guò)程----用來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的某個(gè)功能,而沒(méi)有返回值,例如:在數(shù)據(jù)庫(kù)中的更新和刪除操作
(2)含有return的存儲(chǔ)過(guò)程其返回值為return返回的那個(gè)值
(3)沒(méi)有return的存儲(chǔ)過(guò)程,不論執(zhí)行結(jié)果有無(wú)記錄集,其返回值是0
(4)帶輸出參數(shù)的存儲(chǔ)過(guò)程:假如有return則返回return返回的那個(gè)值,假如要select輸出參數(shù),則出現(xiàn)輸出參數(shù)的值,于有無(wú)return無(wú)關(guān)
--------------------3.獲得存儲(chǔ)過(guò)程的返回值--通過(guò)程序獲得
---------------------------SqlParameter[] cmdParms = {..,new SqlParameter(“@return”,SqlDbType.Int)};cmdParms[cmdParms.Length1].Direction = ParameterDirection.Output或者 cmdParms[cmdParms.Length1].Value;
分類: asp.net
第四篇:MDF文件損壞及沒(méi)有日志文件恢復(fù)的總結(jié)
MDF文件損壞及沒(méi)有日志文件恢復(fù)的總結(jié)
大體思路是這樣的:
1。重建日志
先建一個(gè)同名的數(shù)據(jù)庫(kù),并且對(duì)應(yīng)的文件名也得相同,停掉數(shù)據(jù)庫(kù),然后到建立的這個(gè)數(shù)據(jù)庫(kù)的目錄下將對(duì)應(yīng)的兩個(gè)文件刪除,然后把MDF拷貝到這個(gè)目錄下。
啟動(dòng)數(shù)據(jù)庫(kù),便看到這個(gè)數(shù)據(jù)庫(kù)處于置疑狀態(tài)。
2。消除置疑狀態(tài) USE MASTER GO
SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE--表示可以更改系統(tǒng)表
GO
UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='置疑的數(shù)據(jù)庫(kù)名'--設(shè)置數(shù)據(jù)庫(kù)為緊急模式
Go
sp_dboption '置疑的數(shù)據(jù)庫(kù)名', 'single user', 'true'--設(shè)置數(shù)據(jù)庫(kù)為單用戶模式
Go
DBCC CHECKDB('置疑的數(shù)據(jù)庫(kù)名')
--檢查數(shù)據(jù)庫(kù)錯(cuò)誤
Go
update sysdatabases set status =28 where name='置疑的數(shù)據(jù)庫(kù)名'--恢復(fù)數(shù)據(jù)庫(kù)為正常模式
Go
sp_configure 'allow updates', 0 reconfigure with override Go
sp_dboption '置疑的數(shù)據(jù)庫(kù)名', 'single user', 'false' Go 這里是最好的恢復(fù),MDF沒(méi)有損壞,上面的語(yǔ)句基本可以滿足
假如MDF有損壞,并且做DBCC里有N多錯(cuò)誤,數(shù)據(jù)庫(kù)無(wú)法完整修復(fù)里可以考慮允許丟失數(shù)據(jù)修復(fù),方法如下
use master
declare @databasename varchar(255)
set @databasename='要恢復(fù)的數(shù)據(jù)庫(kù)名稱'
exec sp_dboption @databasename, N'single', N'true'--將目標(biāo)數(shù)據(jù)庫(kù)置為單用戶狀態(tài)
dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)
dbcc checkdb(@databasename,REPAIR_REBUILD)
exec sp_dboption @databasename, N'single', N'false'--將目標(biāo)數(shù)據(jù)庫(kù)置為多用戶狀態(tài)
如果順利的話,應(yīng)該能解決問(wèn)題。如果運(yùn)氣實(shí)在不好,以上搞完之后DBCC還是出現(xiàn)錯(cuò)誤,那可以用終極辦法
對(duì)表做允許數(shù)據(jù)丟失的修復(fù),具體方法如下
use master
declare @databasename varchar(255)
set @databasename='要恢復(fù)的數(shù)據(jù)庫(kù)名稱'
exec sp_dboption @databasename, N'single', N'true'--將目標(biāo)數(shù)據(jù)庫(kù)置為單用戶狀態(tài)
exec sp_msforeachtable ?DBCC CHECKTABLE(''?'',REPAIR_ALLOW_DATA_LOSS)?
exec sp_dboption @databasename, N'single', N'false'--將目標(biāo)數(shù)據(jù)庫(kù)置為多用戶狀態(tài)
如果你的運(yùn)氣霉到家了,搞完上面的DBCC還是有問(wèn)題,那么可以這樣
把數(shù)據(jù)庫(kù)導(dǎo)成一個(gè)新庫(kù)來(lái)代替舊庫(kù)
企業(yè)管理器--右鍵你的數(shù)據(jù)庫(kù)--所有任務(wù)--導(dǎo)出數(shù)據(jù)--目標(biāo)標(biāo)數(shù)據(jù)庫(kù)選擇新建
--選擇“在兩個(gè)sql數(shù)據(jù)庫(kù)之間復(fù)制對(duì)象和數(shù)據(jù)”--把“包含擴(kuò)展屬性”選上,其他的根據(jù)需要選擇--最后完成這幾步一般會(huì)出現(xiàn)各種各樣的問(wèn)題,大致有這么幾種
1。出現(xiàn)“未能在數(shù)據(jù)庫(kù) 'approve_new' 中運(yùn)行 BEGIN TRANSACTION,因?yàn)樵摂?shù)據(jù)庫(kù)處于回避恢復(fù)模式。sp_dboption 命令失敗?!?/p>
出現(xiàn)這樣問(wèn)題的解決: 將數(shù)據(jù)庫(kù)分離后再附加(或者重啟數(shù)據(jù)庫(kù)服務(wù))2。由于文件不可訪問(wèn),或者內(nèi)存或磁盤空間不足,所以無(wú)法打開(kāi)數(shù)據(jù)庫(kù) 'approve_new'。詳細(xì)信息請(qǐng)參閱 SQL Server 錯(cuò)誤日志。
1)在查詢分析器里執(zhí)行如下語(yǔ)句
sp_configure 'allow updates', 1 go reconfigure with override go use master go update sysdatabases set status = 32768 where name = 'UFDATA_003_2006' go sp_configure 'allow updates', 0 go reconfigure with override
2)再在查詢分析器里執(zhí)行如下語(yǔ)句 use master dbcc rebuild_log('數(shù)據(jù)庫(kù)名', '日志物理路徑')--重建日志
第五篇:SQLServer數(shù)據(jù)庫(kù)入門學(xué)習(xí)總結(jié)
SQL Server數(shù)據(jù)庫(kù)入門學(xué)習(xí)總結(jié)
經(jīng)過(guò)一段時(shí)間的學(xué)習(xí),也對(duì)數(shù)據(jù)庫(kù)有了一些認(rèn)識(shí)。
數(shù)據(jù)庫(kù)基本是由表,關(guān)系,操作組成;對(duì)于初學(xué)者首先要學(xué)的:
1.數(shù)據(jù)庫(kù)是如何存儲(chǔ)數(shù)據(jù)的表,約束,觸發(fā)器
2.數(shù)據(jù)庫(kù)是如何操作數(shù)據(jù)的
insert,update,delete T-sql 函數(shù) 存儲(chǔ)過(guò)程 觸發(fā)器
3.數(shù)據(jù)庫(kù)是如何顯示數(shù)據(jù)的select
SQLServer數(shù)據(jù)庫(kù)學(xué)習(xí)總結(jié)
1.SQL基礎(chǔ)
SQL Server2000安裝、配置,服務(wù)器啟動(dòng)、停止,企業(yè)管理器、查詢分析器
第一代數(shù)據(jù)庫(kù)--網(wǎng)狀數(shù)據(jù)庫(kù)和層次數(shù)據(jù)庫(kù);第二代數(shù)據(jù)庫(kù)--關(guān)系數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)(DB);數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS);數(shù)據(jù)庫(kù)系統(tǒng)(DBS)
SQL Server 2000 提供了不同版本:企業(yè)版、標(biāo)準(zhǔn)版、個(gè)人版、開(kāi)發(fā)版
SQL Server中的數(shù)據(jù)類型:整數(shù):int,smallint,tinyint,bigint;浮點(diǎn)數(shù):real,float,decimal;二進(jìn)制:binary,varbinary;邏輯:bit;字符:char,nchar,varchar,nvarchar;文本和圖形:text,ntext,image;日期和時(shí)間:datetime,smalldatetime;貨幣:money,smallmoney
數(shù)據(jù)庫(kù)的創(chuàng)建和刪除;數(shù)據(jù)庫(kù)表的創(chuàng)建、修改和刪除
數(shù)據(jù)完整性:實(shí)體完整性:Primary Key,Unique Key,Unique Index,Identity Column;域完整性:Default,Check,Foreign Key,Data type,Rule;參照完整性:Foreign Key,Check,Triggers,Procedure;用戶定義完整性:Rule,Triggers,Procedure;Create Table中得全部列級(jí)和表級(jí)約束
SQL Server中有5種約束:主鍵約束(Primary Key Constraint)、默認(rèn)約束(Default Constraint)、檢查約束(Check Constraint)、唯一性約束(Unique Constraint)、外鍵約束(Foreign Key Constraint).關(guān)系圖
數(shù)據(jù)庫(kù)設(shè)計(jì)的步驟:需求分析、概念結(jié)構(gòu)設(shè)計(jì)、邏輯結(jié)構(gòu)設(shè)計(jì)、數(shù)據(jù)庫(kù)物理設(shè)計(jì)、數(shù)據(jù)庫(kù)實(shí)施、數(shù)據(jù)庫(kù)運(yùn)行和維護(hù)
兩個(gè)實(shí)體之間的聯(lián)系:一對(duì)一(1:1)、一對(duì)多(1:n)、多對(duì)多(m:n)
實(shí)體關(guān)系模型--E-R圖
數(shù)據(jù)庫(kù)規(guī)范化:將數(shù)據(jù)庫(kù)的結(jié)構(gòu)精簡(jiǎn)為最簡(jiǎn)單的形式;從表中刪除冗余列;標(biāo)識(shí)所有依賴于其他數(shù)據(jù)庫(kù)的數(shù)據(jù)。
數(shù)據(jù)庫(kù)三范式:第一范式就是無(wú)重復(fù)的列;第二范式就是非主屬性非部分依賴于主關(guān)鍵字;第三范式就是屬性不依賴于其他非主屬性
2.SQL語(yǔ)句
SQL全稱是“結(jié)構(gòu)化查詢語(yǔ)言(Structured Query Language)”
SQL的4個(gè)部分:
數(shù)據(jù)定義語(yǔ)言DDL(Data Definition Language)用來(lái)定義數(shù)據(jù)的結(jié)構(gòu):create、alter、drop。
數(shù)據(jù)控制語(yǔ)言DCL(Data Control Language)用來(lái)控制數(shù)據(jù)庫(kù)組件的存取許可、存取權(quán)限等得命令:grant、revoke。
數(shù)據(jù)操縱語(yǔ)言DML(Data Manipulation Language)用來(lái)操縱數(shù)據(jù)庫(kù)中得數(shù)據(jù)的命令:insert、update、delete。
數(shù)據(jù)查詢語(yǔ)言DQL(Data Query Language)用來(lái)查詢數(shù)據(jù)庫(kù)中得數(shù)據(jù)的命令:select。
SQL中得運(yùn)算符
:算術(shù)運(yùn)算符、位運(yùn)算符、比較運(yùn)算符、邏輯運(yùn)算符、通配運(yùn)算符、字符串連接符、賦值運(yùn)算符
3.查詢
簡(jiǎn)單查詢,使用TOP子句
查詢結(jié)果排序order by
帶條件的查詢where,使用算術(shù)表達(dá)式,使用邏輯表達(dá)式,使用between關(guān)鍵字,使用in關(guān)鍵字,模糊查詢like
在查詢中使用聚合函數(shù):sum(x),avg(x),min(x),max(x),count(x),count(*)使用分組查詢group by,having子句
distinct關(guān)鍵字
列別名
select top 6 * from sales order by qty desc select au_id,au_fname,au_lname
from
authors
where
state in('ks','ca','mi')
select au_fname,au_lname,phone from authors where au_id like '72[234]-%' select
簡(jiǎn)單子查詢:嵌套子查詢、相關(guān)子查詢;子查詢的select語(yǔ)句中不能使用order by子句,roder by子句只能對(duì)最終查詢結(jié)果排序。type,sum(price),avg(price),count(*)
from
titles
group
by
type
having
type in('business','psycheology')嵌套子查詢:執(zhí)行過(guò)程,先執(zhí)行子查詢,子查詢得到的結(jié)果不被顯示,而是傳給外層查詢,作為外層查詢的條件,然后執(zhí)行外層查詢,并顯示結(jié)果。
嵌套子查詢的執(zhí)行不依賴于外層查詢,子查詢只執(zhí)行一次。
帶有比較運(yùn)算符的子查詢,帶有in和not in的子查詢,帶有any或all的子查詢
相關(guān)子查詢:子查詢?yōu)橥鈱硬樵兊拿恳恍袌?zhí)行一次,外層查詢將子查詢引用的列的值傳給了子查詢。
相關(guān)子查詢的執(zhí)行依賴于外層查詢,子查詢需要重復(fù)的執(zhí)行。
帶有exists和not exists的相關(guān)子查詢。
多表聯(lián)接查詢:內(nèi)聯(lián)接(inner join)、外聯(lián)接((left、right、full)outer join)、自聯(lián)接(self join)和交叉聯(lián)接(cross join)
在查詢上創(chuàng)建新表:select into語(yǔ)句首先創(chuàng)建一個(gè)新表,然后用查詢的結(jié)果填充新表。
表別名
select coursename from course where courseid in(select distinct courseid from grade where grade>10)
select studname from student where sudbirthday > any(select studbirthday from student where class = '信息系')and class<>'信息系'
select studname from student where exists(select * from grade where studid = student.studid and courseid = '01')
select stud1.* from student as stud1 join student as stud2 on stud2.studname = 'mm' and stud1.studsex = stud2.studsex
select * into girls from student where studsex='m'
4.視圖、索引和事務(wù)
視圖是由一個(gè)或多個(gè)數(shù)據(jù)表(基本表)導(dǎo)出的虛擬表或者查詢表,是關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)提供給用戶以多種角度觀察數(shù)據(jù)庫(kù)中數(shù)據(jù)的重要機(jī)制。
視圖的好處:能夠簡(jiǎn)化用戶的操作;視圖能夠?qū)C(jī)密數(shù)據(jù)提供安全保護(hù)。
創(chuàng)建視圖時(shí),視圖的名稱存在sysobjects表中。有關(guān)視圖中所定義列的信息添加到syscolumns表中,而有關(guān)視圖相關(guān)性的信息添加到sysdepends表中。另外,create view語(yǔ)句的文本添加到syscomments表中。
在通過(guò)視圖向表中插入數(shù)據(jù)時(shí),如果insert語(yǔ)句列表中包含有視圖中沒(méi)有選擇的列和不允許為空值的列,這種操作是不允許的。
創(chuàng)建視圖:create view view_employee as select emp_id,fname,lname from employee 使用視圖:select * from view_employee
修改視圖:alter view view_employee as select emp_id,fname,job_id from employee where job_id>10
刪除視圖:drop veiw view_employee 查看視圖結(jié)構(gòu):exec sp_help view_employee
查看視圖定義信息:exec sp_helptext 'view_employee'
索引提供了一種基于一列或多列的值對(duì)表的數(shù)據(jù)行進(jìn)行快速訪問(wèn)的方法。索引提供的是表中得邏輯順序。
聚集索引基于數(shù)據(jù)行的鍵值在表內(nèi)排序和存儲(chǔ)這些數(shù)據(jù)行。當(dāng)數(shù)據(jù)表以某列為關(guān)鍵字建立聚集索引時(shí),表中得數(shù)據(jù)行就以該列(聚集索引鍵)的排序次序進(jìn)行存儲(chǔ)。每個(gè)表只能有一個(gè)聚集索引。
非聚集索引具有完全獨(dú)立于數(shù)據(jù)行的結(jié)構(gòu),一個(gè)表可以建立多個(gè)非聚集索引。
創(chuàng)建聚集索引:create clustered index studid_ind on stud(studid)
創(chuàng)建非聚集索引:create unique index studfullname_ind on stud(fname desc,lname)刪除索引:drop index stud.studid_ind 查看stud表上得索引:exec sp_helpindex stud
事務(wù)是一種機(jī)制,是一個(gè)操作序列,它包含了一組數(shù)據(jù)庫(kù)操作命令,并且所有的命令作為一個(gè)整體一起向系統(tǒng)提交或撤銷操作請(qǐng)求。
事務(wù)的特性:原子性(Atomicity)、一致性(Consistenty)、隔離性(Isolation)、永久性(Durability)。事務(wù)分類:顯示事務(wù)、隱性事務(wù)、自動(dòng)提交事務(wù)。
視圖、索引和事務(wù)的創(chuàng)建、使用、修改和刪除
5.Transact—SQL編程
全局變量:由系統(tǒng)定義和維護(hù),其名稱以@@字符開(kāi)頭
局部變量:由用戶定義和賦值,其名稱以@字符開(kāi)頭
輸出語(yǔ)句:print
邏輯控制語(yǔ)句:begin...end;break;case;continue;goto;if...else;return;while 常用函數(shù):行集函數(shù),聚合函數(shù),標(biāo)量函數(shù)
轉(zhuǎn)換函數(shù):convert(dt,e,s),cast()
數(shù)學(xué)函數(shù):絕對(duì)值abs(n),向上取整ceiling(n),向下取整floor(n),指定次冪power(n,y),四舍五入round(n,length),求符號(hào)sign(n),平方根sqrt(n)日期
和
時(shí)
間
函
數(shù)
:dateadd(datepart,num,date),datediff(datepart,date1,date2),datename(datepart,date),datepart(datepart,date),getdate(),year(date),month(date),day(date)
字符串函數(shù):lower(e),upper(e),left(e,i),right(e,i),replace(s1,s2,s3)用3替換1中的2,replicate(e,i)重復(fù)指定次數(shù),stuff(s1,start,length,s2)用2替換1中指定位置,substring(expression,start,length)元數(shù)
據(jù)
函
數(shù)
:db_id('database_name'),db_name(datebase_id),object_id('obj_name'),object_name(obj_id),col_length('table','column'),col_name(table_id,col_id)聚合函數(shù):avg(expr),count(expr),count(*),max(expr),min(expr),sum(expr)select au_lname,au_fname,contory = case state when 'u
t' then 'utah' when 'ca' then 'california' else 'world'
end,city from authors order by state desc
while(select avg(price)from titles)<30 begin
update titles set price = price * 2
if(select max(price)from titles)>50 break else continue end
print '價(jià)格太高'
begin
insert into jobs values('a',80,234)if @@error<>0 print '數(shù)據(jù)插入失敗' else goto M end
M:print '數(shù)據(jù)插入成功'
6.游標(biāo)
游標(biāo)是一種能從包含多條數(shù)據(jù)記錄的結(jié)果集中每次提取一條記錄的機(jī)制。將批操作變成行操作,對(duì)結(jié)果集中得某行進(jìn)行操作。
declare author_csr cursor read_only for--定義只讀游標(biāo)
select au_fname,au_lname from authors where state = 'ca' order by au_fname,au_lname declare @lname varchar(20),@fname varchar(20)--定義變量
open author_csr--打開(kāi)游標(biāo)
fetch next from author_csr into @lname,@fname--執(zhí)行一次數(shù)據(jù)讀取操作
while @@fetch_status=0--循環(huán)游標(biāo)讀取數(shù)據(jù)
begin
print 'author name:'+@lname+''+@fname fetch next from author_csr into @lname,@fname end
close author_csr--關(guān)閉游標(biāo)
deallocate author_csr--釋放游標(biāo)
7.存儲(chǔ)過(guò)程
存儲(chǔ)過(guò)程(stored procedure)類似c語(yǔ)言中的函數(shù),是一組為了完成特定功能的SQL語(yǔ)句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中。用戶通過(guò)指定存儲(chǔ)過(guò)程的名字餅給出參數(shù)來(lái)執(zhí)行它。
常用的系
統(tǒng)
存
儲(chǔ)
過(guò)
程
:sp_database,sp_helpdb,sp_renamedb,sp_tables,sp_column,sp_help,sp_helpconstraint,sp_helpindex,sp_stored_procedure,sp_password 創(chuàng)建存儲(chǔ)過(guò)程:
create as
select @total=count(jy.askbookid)from book,jyls jy where bookname like @book_name and book.isbn=jy.isbn and jy.starttime>=@starttime and endtime<=@endtime procedure book_num
(@book_name
varchar(26),@starttime
datetime,@endtime datetime,@total int output)使用存儲(chǔ)過(guò)程:
declare @book_name char(26),@total int
set @book_name='面向?qū)ο蠓治龊驮O(shè)計(jì)'
exec book_num @book_name,'2007-01-01','2007-11-01',@total output select @book_name as bookname,@total as num
8.觸發(fā)器
觸發(fā)器是一種特殊類型的存儲(chǔ)過(guò)程,主要是通過(guò)實(shí)踐進(jìn)行觸發(fā)而被執(zhí)行。
觸發(fā)器的主要作用就是能夠?qū)崿F(xiàn)由主鍵和外鍵所不能保證的復(fù)雜的參照完整性和數(shù)據(jù)的一致性。其他功能:強(qiáng)化約束,跟蹤變化,級(jí)聯(lián)運(yùn)行,存儲(chǔ)過(guò)程調(diào)用。
SQL Server 2000支持兩種類型觸發(fā)器:
after觸發(fā)器:要求只有執(zhí)行某一操作之后,觸發(fā)器才被執(zhí)行,且只能在表上定義。
instead of觸發(fā)器:表示并不執(zhí)行其所定義的操作,而僅是執(zhí)行觸發(fā)器本身。既可以在表上定義,也可以在視圖上定義,但對(duì)同一操作只能定義一個(gè)instead of觸發(fā)器。
工作原理:
當(dāng)觸發(fā)insert觸發(fā)器時(shí),新的數(shù)據(jù)行就會(huì)被插入到觸發(fā)器表和inserted表中。觸發(fā)器通過(guò)檢查inserted表來(lái)確定是否執(zhí)行觸發(fā)器動(dòng)作或如何執(zhí)行。
當(dāng)在定義有觸
發(fā)器的表上執(zhí)行update語(yǔ)句時(shí),原始行被移入到deleted表,更新行被移入inserted表。觸發(fā)器檢查deleted表和inserted表以及被更新的表,來(lái)確定是否更新了多行以及如何執(zhí)行觸發(fā)器動(dòng)作。
當(dāng)觸發(fā)deleted觸發(fā)器后,從受影響的表中刪除的行將被放置到一個(gè)特殊的deleted表中。
create trigger update_smoke_t_sale on smoke_t_sale for update as
declare @newsalenum int,@smokeproductname varchar(40)select @newsalenum= salenum from inserted
select @smokeproductname=smokeproductname from inserted if update(salenum)--判斷是否更新
begin update smoke_t_sale
set
saletotalprice=@newsalenum
*
saleprice
where smokeproductname=@smokeproductname
insert into smoke_log(logContent)values('更新成功')end else
print '未更新'
9.數(shù)據(jù)庫(kù)高級(jí)管理
SQL Server安全體系結(jié)構(gòu),4個(gè)等級(jí):客戶機(jī)操作系統(tǒng)的安全性,SQL Server的登錄安全性,數(shù)據(jù)庫(kù)的使用安全性,數(shù)據(jù)對(duì)象的使用安全性 SQL Server驗(yàn)證模式:windows身份驗(yàn)證模式和混合模式(windows身份驗(yàn)證和SQL Server身份驗(yàn)證)
登錄賬戶:用戶登錄(連接)SQL Server服務(wù)器的賬戶和密碼。
角色管理:服務(wù)器角色(負(fù)責(zé)管理和維護(hù)SQL Server的組);數(shù)據(jù)庫(kù)角色(是對(duì)某個(gè)數(shù)據(jù)庫(kù)具有相同訪問(wèn)權(quán)限的用戶賬戶和組的集合)
數(shù)據(jù)庫(kù)用戶:對(duì)于每個(gè)要求訪問(wèn)數(shù)據(jù)庫(kù)的登錄賬戶,必須在要訪問(wèn)的數(shù)據(jù)庫(kù)中建立該數(shù)據(jù)庫(kù)的訪問(wèn)賬戶,且與其登錄賬戶鏈接關(guān)聯(lián),才可進(jìn)入該數(shù)據(jù)庫(kù)訪問(wèn)。
權(quán)限管理:是指用戶是否能進(jìn)行訪問(wèn)數(shù)據(jù)庫(kù)資源的相應(yīng)操作。權(quán)限包括:語(yǔ)句權(quán)限、對(duì)象權(quán)限和暗示權(quán)限。
授予權(quán)限:
grant 語(yǔ)句 [...] to 安全賬戶[...]
grant 權(quán)限 [...] on 表或視圖[(列[,...])]|on 存儲(chǔ)過(guò)程|on用戶自定義函數(shù) to 安全賬戶[,...] 拒絕權(quán)限:
deny 語(yǔ)句 [...] to 安全賬戶[...]
deny 權(quán)限 [...] on 表或視圖[(列[,...])]|on 存儲(chǔ)過(guò)程|on用戶自定義函數(shù) to 安全賬戶[,...] 撤銷權(quán)限:
revoke 語(yǔ)句 [...] from 安全賬戶[...]
revoke 權(quán)限 [...] on 表或視圖[(列[,...])]|on 存儲(chǔ)過(guò)程|on用戶自定義函數(shù) from 安全賬戶[,...]
備份和恢復(fù):
數(shù)據(jù)庫(kù)備份設(shè)備,在進(jìn)行數(shù)據(jù)庫(kù)備份之前,首先要?jiǎng)?chuàng)建備份設(shè)備。包括:磁盤、磁帶和命名管道
SQL Server 備份策略:只備份數(shù)據(jù)庫(kù)、備份數(shù)據(jù)庫(kù)和事務(wù)日志、差異備份。
backup database medicaldb to disk='medical_bk1' with name='medicaldb backup' description='medicaldb fullbackup' init restore database medicaldb from medical_bk1
導(dǎo)入導(dǎo)出:
DTS(Data Transformation Service)是SQL Server提供的數(shù)據(jù)傳輸服務(wù)。使用戶可以將來(lái)自完全不同數(shù)據(jù)源的數(shù)據(jù)析取、轉(zhuǎn)換并合并到單個(gè)或多個(gè)目的。
分離與附加:創(chuàng)建可移動(dòng)的數(shù)據(jù)庫(kù)。