如何巧用系統(tǒng)存儲(chǔ)過程批量獲取數(shù)據(jù)庫中的有用信息分析_第1頁
如何巧用系統(tǒng)存儲(chǔ)過程批量獲取數(shù)據(jù)庫中的有用信息分析_第2頁
如何巧用系統(tǒng)存儲(chǔ)過程批量獲取數(shù)據(jù)庫中的有用信息分析_第3頁
如何巧用系統(tǒng)存儲(chǔ)過程批量獲取數(shù)據(jù)庫中的有用信息分析_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、如何巧用系統(tǒng)存儲(chǔ)過程批量獲取數(shù)據(jù)庫中的有用信息分析    摘要:巧妙利用存儲(chǔ)過程可以使得對(duì)數(shù)據(jù)庫的管理、以及顯示關(guān)于數(shù)據(jù)庫、基表以及用戶信息的工作容易得多,本文所介紹的就是這方面應(yīng)用的一個(gè)實(shí)例。關(guān)鍵詞:系統(tǒng)存儲(chǔ)過程;數(shù)據(jù)庫,SQL SERVER1引言在SQL SERVER數(shù)據(jù)庫維護(hù)中,通常我們可以在查詢分析器(Query analyzer)中輸入SQL的select命令從數(shù)據(jù)庫相關(guān)系統(tǒng)表(例如:sysdatabase、sysobjects、sysfiles等)中或者使用execute命令調(diào)用系統(tǒng)存儲(chǔ)過程(例如sp_helpu

2、ser 、sp_spaceusd、sp_helpdb、sp_helpfile等)來查看注冊(cè)用戶的情況并獲取有關(guān)數(shù)據(jù)庫大小、邏輯或物理文件名和存放位置等以及相關(guān)基表中的記錄數(shù)、保留或已用空間等信息。雖然所列出或報(bào)告的信息都是各有所長(zhǎng),但都存在著不同的缺陷,主要有:其一,用select命令直接打開的系統(tǒng)表,由于其中某些字段存儲(chǔ)的數(shù)據(jù)多為數(shù)字或者二進(jìn)制代碼,很難被人直觀地理解;其二,由系統(tǒng)存儲(chǔ)過程產(chǎn)生的報(bào)告因?yàn)槟承┳侄翁L(zhǎng)顯得十分難看;其三,特別是使用sp_spaceused時(shí),每次只能查詢一個(gè)基表,假如某個(gè)用戶數(shù)據(jù)庫中有幾百個(gè)基表,其查詢的難度和效率可想而知。針對(duì)以上所述侍猓收吒械接斜匾

3、嘈匆桓鍪滌玫某絳蚶賜瓿燒庋牟僮鰨河沒灰誦興淮尉涂梢苑獎(jiǎng)憧旖蕕亟康氖菘饣拘畔約澳掣鍪菘庾嵊沒那榭觥謝淼母鞣矯孀酆閑畔枷允境隼礎(chǔ)比唬飧齔絳蛐枰攬亢屠孟鐘械南低潮硨湍承低炒媧湯賜瓿桑頤侵皇嵌運(yùn)墻幸恍擅畹鬧刈楹透腦歟僂ü嘈蔥碌拇媧倘饔盟牽詈笊晌頤撬枰奈牡底柿稀辛蘇庋氖滌貿(mào)絳潁亟院蟮南低澄鞔醇蟮姆獎(jiǎng)恪?lt;B>2改造系統(tǒng)存儲(chǔ)過程基于以上的思路,首先我們主要對(duì)sp_spaceused、sp_helpdb和hp_helpfile三個(gè)系統(tǒng)存儲(chǔ)過程進(jìn)行改造,在master數(shù)據(jù)庫的storeProcedures中打開它們的源程序,并把源代碼拷貝到查詢分析器中,分別用sp_brow_one.sql

4、、sp_help_db.sql和sp_help_file.sql腳本文件名保存,然后再對(duì)它們進(jìn)行編輯和修改。(1)編輯修改sp_brow_one。目的是取消以輸出報(bào)告顯示的方式,而改用輸出參數(shù)傳遞給調(diào)用它的程序,改動(dòng)的地方主要有以下四處:將源程序16行,修改成:use master  /* 保證將sp_brow_one寫入主控?cái)?shù)據(jù)庫中*/if exists(select name from sysobjects where name='sp_brow_one' and&

5、#160;type='p')   Drop procedure sp_brow_oneGOcreate procedure sp_brow_one   objname nvarchar(50) = null, updateusage varchar(5) = false,rows nvarchar(10) output, reserved nvarchar(15)

6、0;output, data nvarchar(15) output,indexp  nvarchar(15) output, unused nvarchar(15) outputasdeclare name nvarchar(30)保留了原來的兩個(gè)輸入?yún)?shù),新增5個(gè)輸出參數(shù)和1個(gè)name變量。將源程序中的142152行取消,用符號(hào)“/*” 和 “*/ ”將其框起來。將源程序中的190200行中的五個(gè)字段名全部用變量名替換掉(例如將reserved換成re

7、served等),其它地方不要做任何改動(dòng)。將源程序中的255267行中六個(gè)字段名全部用變量名替換掉(例如將name換成name等),其它地方不要做任何改動(dòng)。(2)編輯修改sp_help_db。目的是調(diào)整輸出報(bào)告的顯示方式,將太長(zhǎng)的字段調(diào)整到合適的長(zhǎng)度,主要使用substring()和left()字符串函數(shù)。修改的地方有以下三處:將源程序的第1行修改成:use master  /* 保證將sp_help_db寫入主控?cái)?shù)據(jù)庫中*/if exists(select name from sysobjects wh

8、ere name='sp_help_db' and type='p')   Drop procedure sp_help_dbGOcreate procedure sp_help_db 將源程序中的432445修改成:select name = substring(, 1, 20),db_size = str(sum(convert(dec(15),v.size)*

9、0;          (select low from master.dbo.spt_values                    where type = 'E' and number 

10、;= 1)                     / 1048576,10,2)+ ' MB',owner = substring(suser_sname(d.sid), 1, 10),dbid = d.dbid,created = d.crdate,

11、 /*convert(char(11), d.crdate),*/status =substring(s.dbdesc,1,50)from master.dbo.sysdatabases d, #spfiledesc v, #spdbdesc swhere d.dbid = s.dbidand s.dbid = v.dbidgroup by ,d.sid,d.dbid,d.crdate,s.dbdescorder&

12、#160;by d.dbid  /* order by  */將源程序中的450456行取消,用符號(hào)“/*” 和 “*/ ”將其框起來。(3)編輯修改sp_help_file。目的與2相同;但源程序不能直接利用,必須在所調(diào)用的sysfiles基表前加上前綴(數(shù)據(jù)庫名和所有者)。由于程序改動(dòng)較大,在此全部列出:use master   /* 保證將sp_help_file寫入主控?cái)?shù)據(jù)庫中*/if exists(select&#

13、160;name from sysobjects where name='sp_help_file' and type='p')   Drop procedure sp_help_fileGOcreate procedure sp_help_file dbname sysname = NULL        

14、0;             /* file name or all files */asset nocount ondeclare cmd nvarchar(800)if dbname IS not NULLbegin   select cmd = 'use&

15、#160;' + quotename(dbname) +   '  select name=substring(name,1,20),  fileid, ' +       'filename=substring(filename,1,40),       filegroup =

16、0;substring(filegroup_name(groupid),1,10),       "size" = convert(nvarchar(15), size * 8)+ " KB",       "maxsize" = (case maxsize when -1

17、60;then "Unlimited"              else convert(nvarchar(15), maxsize * 8)+ " KB" end),       "growth" = (case s

18、tatus & 0x100000 when 0x100000 then             convert(nvarchar(3), growth) + "%"               else 

19、;convert(nvarchar(15), growth * 8) + " KB" end),       "usage" = (case status & 0x40 when 0x40 then        "log only" else "data only" end)' +   ' from ' + dbname + '.dbo.sy

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論