實驗一:DB2實驗環境設置(2學時) sql
實驗任務:
A. 安裝DB2數據庫系統。
B. 創建擁有系統管理權限(SYSADM)的新用戶(inst1)和組(adm1)。
C. 創建新的DB2實例(inst1)。
D. 增長一些新的系統變量,而且更新 數據庫管理器配置文件(DBM CFG)以反映剛剛建立的新的系統管理用戶組。
一. 安裝DB2數據庫系統
將DB2 數據庫系統安裝在本地機器上。
二. 創建新用戶
1. 在控制面板中雙擊「用戶賬戶」選項,按如下要求建立新用戶:
用戶名:inst1
全名:inst1 Instance SysAdmin
描述:System Administrator for inst1 Instance
密碼:inst1
用戶組:Administrators
2. 退出用戶當前登錄的系統,而後以用戶inst1的管理員身份登錄到操做系統。在之後的實驗中,當要求登錄到系統中時,除特別說明外都是要求以inst1身份登錄。
三. 建立實例
1. 用db2ilist命令查看實例。
在DB2的Windows版本安裝完成後,系統會自動創建一個默認名爲DB2的實例。能夠打開DB2命令窗口並輸入db2ilist命令,來查看該實例是否存在。
選擇開始菜單—>程序—>IBM DB2—>命令行工具—>命令窗口;輸入db2ilist。該命令會顯示DB2是該主機的一個實例。
2. 新建inst1實例
在命令窗口中輸入以下命令,並回車,可完成該實例的建立。
db2icrt inst1
3. 再次輸入db2ilist命令,將會發現inst1實例已成功建立。
4. 輸入exit退出DB2命令窗口。
三. 創建DB2系統管理員用戶組adm1
要求:
組名:adm1 (adm1應小寫)
描述:inst1 Instance SysAdmin Group
成員:db2admin;inst1
四. 設置環境
1. 檢查當前DB2環境變量,並將創建的實例inst1設置爲系統默認實例。
打開控制面板的「系統屬性」窗口,選擇「高級」標籤頁,而後點擊「環境變量」按鈕;彈出的環境變量窗口被分爲上下兩部分,上半部分所定義的用戶變量隻影響當前用戶,而系統變量則影響每個用戶。查看系統變量中DB2INSTANCE所對應的值,默認狀況下爲DB2,現將其改成inst1(雙擊系統變量列表框中「DB2INSTANCE DB2」,在編輯系統變量窗口的變量值一欄中輸入inst1,而後點擊「肯定」按鈕)。
2. 啓動DB2-inst1和DB2DAS - DB2DAS00服務,並將其啓動類型設置爲自動。
雙擊「控制面板」à「管理工具」à「服務」窗口。在服務列表中分別右鍵單擊「DB2 - inst1」,和「DB2DAS - DB2DAS00」,在彈出菜單中選擇「屬性」,並在「屬性」窗口中,將「常規」標籤頁中的「啓動類型」設爲自動;而後單擊啓動按鈕,啓動相應服務。(DAS也能夠經過db2admin start和db2admin stop來啓動和關閉)。
3. 檢查DB2環境變量
在Windows操做系統的命令提示符窗口中,輸入 set | more命令,檢查DB2環境變量是否設置正確。假如不對重複上面必要的步驟予以糾正。
4. 檢查DB2註冊表變量
在DB2命令窗口輸入db2set -all命令來檢查DB2註冊表變量。DB2ADMINSERVER的值應爲DB2DAS00, DB2SYSTEM的值與主機名相同。
(注:使用帶-all 選項的db2set命令能夠查看系統中設置的全部配置文件註冊表變量。)
5. 設置DB2COMM變量
爲了對實例inst1和全局註冊表變量提供tcp/ip協議的支持,輸入以下命令設置DB2COMM變量:
db2set DB2COMM=TCPIP –i inst1
db2set DB2COMM=TCPIP -g
注:
要設置當前實例的一個參數時輸入格式爲 db2set parameter=value
要爲特定實例設置參數值時輸入格式爲 db2set parameter=value –i instance_name
要設置一個全局級的註冊表變量時輸入格式爲 db2set parameter=value –g
要查看可以被設置的全部配置文件註冊表變量,可輸入db2set -lr
6. 再次查看註冊表變量。
在DB2命令窗口中輸入db2set –all,注意在輸出列表中實例級的註冊表變量旁邊標以「[i]」,全局級的註冊表變量旁邊標以「[g]」。
7. 重啓操做系統,並以用戶inst1登錄(用戶密碼按照先前所設都爲inst1)。
五. 使用DB2控制中心來查看和設置數據庫管理器配置參數
選擇開始菜單à程序àIBM DB2à通常管理工具à控制中心,打開「控制中心」窗口。
1. 查找inst1實例
在控制中心窗口中選擇主機名左邊的「+」號;選擇「實例」左邊的「+」號,若是「實例」下沒有列出inst1,則右鍵單擊「實例」,在彈出菜單中選擇「添加」,在「添加實例」窗口中的「遠程實例名」欄輸入「inst1」,點擊「應用」按扭,再點擊「取消」按扭。
2. 查看數據庫管理器配置文件。
右鍵單擊控制中內心的「inst1」實例,在彈出菜單中選擇「配置參數」,則打開「DBM配置」窗口,在該窗口下,能夠查看或更改數據庫管理器配置文件。
(1) 「管理」下的AUTHENTICATION 參數。選擇該參數所對應的值,並點擊值右邊的省略號按扭,在彈出的「更改 DBM 配置參數-AUTHENTICATION」窗口中列出5個值:「服務器」、 「客戶機」、「服務器加密」、「Kerberos」和「Kerberos加密」。其中「服務器」選項是指驗證過程將在服務器上進行,這是DB2默認的身份鑑別方式。點擊「取消」按鈕關閉「更改 DBM 配置參數-AUTHENTICATION」窗口。
(2) 「管理」下的SYSADM_GROUP參數。該參數爲實例定義具備系統管理SYSADM權限的組名,值必須是一個由用戶管理器建立的組名。默認狀況下SYSADM_GROUP並無值,這意味着Windows的管理員用戶將會繼承DB2的SYSADM權限。要想更改這種默認的設置,能夠先創建一個用戶組,該組擁有一些特定成員,而後將該組名設置爲SYSADM_GROUP參數值,只有該組的成員才擁有SYSADM權限。
(3) 「環境」下的NODETYPE參數。該參數值爲「帶有本地和遠程客戶機的數據庫分區服務器」,該值由DB2設置的,且不能被更改。
3. 將SYSADM_GROUP參數更新爲adm1
在「DBM 配置」窗口中選擇SYSADM_GROUP的值,而後點擊該值右邊的省略號按鈕,在系統管理權限組下輸入「adm1」,點擊「肯定」按鈕。而後點擊「DBM 配置」窗口中「肯定」按鈕,再點擊彈出的「DB2 消息」窗口的「關閉」按鈕。
爲使新設置的數據庫管理器配置參數生效,須要從新啓動inst1實例。方法:右鍵單擊inst1,並在彈出菜單中選擇「中止」,點擊「肯定」按鈕,再點擊「關閉」按鈕。右鍵單擊inst1,並在彈出菜單中選擇「啓動」。若是系統顯示錯誤的消息,請閱讀相關的錯誤信息,並在下一步修正該錯誤。
4. 更新TCP/IP服務名(SVCENAME參數),設置它的值爲55000。
上一步若是收到一個SQL5043N錯誤信息,表示未能成功啓動對一個或多個通訊協議的支持(儘管核心數據庫管理器功能啓動成功)。
在本實驗第四部分的第5步中,曾將db2comm參數值設爲tcpip。當inst1實例啓動時,DB2會試着啓動該通訊協議,可是卻未能找到一個服務端口來使用。所以在數據庫管理器配置文件中,須要設置參數SVCENAME,來指定一個端口號或者一個服務文件入口名,來爲前來訪問的TCP/IP客戶端服務。
在控制中心中右鍵單擊inst1,並在彈出菜單中選擇「設置通訊」,在「設置通訊-inst1」窗口中令TCP/IP複選框選中,而且單擊該複選框右邊的「屬性」按鈕,在「配置 TCP/IP – inst1」窗口中的服務名一欄輸入inst1(或者其餘名),再在端口號一欄中輸入 55000 ,連續單擊「肯定」按鈕關閉這些配置窗口。
5. 從新啓動實例。
方法同4中所述。
數據庫
實驗二:建立數據庫/表空間(2學時)
實驗任務:
A. 創建數據庫;
B. 創建表空間;
C. 執行腳本文件來創建多個表空間;
D. 訪問那些包含表空間信息的SYSCAT視圖;
E. 列出表空間相關信息;
F. 列出容器相關信息。
一. 建立數據庫
1. 查看create database指令語法
建立數據庫能夠經過DB2命令create database來完成。經過在線幫助工具能夠查看create database指令語法。
(1) 選擇菜單「工具」à「命令中心」,或相應的圖標來啓動「命令中心」;
(2) 在「命令中心」中選擇「交互式」標籤頁,而且在「命令」下的文本框中輸入「 ? create database」;
(3) 選擇菜單「交互式—>執行」(或ctrl+enter,或點擊左上角工具欄的齒輪圖標)。
(4) 從Create database命令語法能夠看出,該命令能夠指定:數據庫名﹑數據庫位置(控制文件﹑設定文件﹑事務日誌文件以及默認的表格空間要創建在什麼位置)﹑數據庫別名﹑國別區碼﹑排序集﹑默認數據塊大小,該語句也可爲編目表空間﹑臨時表空間﹑用戶表空間指定特定值。
此外,也能夠經過「建立數據庫嚮導」來建立一個新數據(本實驗採用該方法)。
2. 經過「建立數據庫嚮導」建立數據庫。
(1) 在「控制中心」中,右鍵單擊inst1下的「數據庫」,在彈出菜單中選擇「建立—>使用嚮導建立數據庫」;
(2) 在嚮導的「名稱」頁面中,數據庫名一欄輸入MUSICDB,其它值均按默認設置,點擊「下一步」按鈕;
(3) 分別選擇嚮導左邊的「用戶表」﹑「目錄表」﹑「臨時表」標籤頁,並點擊相應頁面的「下一步」按鈕完成相關設置。「用戶表」﹑「目錄表」﹑「臨時表」默認使用的表空間類型爲SMS,即各頁面中的「低維護-自動增長(系統管理的表空間)(L)」選項。
(4) 在嚮導的「性能」頁面中,由於MUSICDB的表空間均按照系統缺省設置,因此此時不能修改數據塊大小或者預取大小。(若是爲用戶表﹑目錄表﹑臨時表設置了特定的容器,則能夠經過「性能」頁面設置數據塊或預取大小)。點擊「下一步」按鈕開始數據庫「區域」的設置。
(5) 嚮導的「區域」頁面能夠設置數據庫的語言環境和整理順序,系統已自動設置完成這些選項,直接點擊「下一步」按鈕。
(6) 在嚮導「總結」頁面中,會顯示前幾步所設的建立數據庫的參數。點擊「顯示命令」按鈕便可查看建立該數據庫的所有命令。單擊「上一步」則回到前面步驟修改建立參數。點擊「總結」頁面的「完成」按鈕,則生成數據庫。
等待一小段時間,系統就會彈出「DB2消息」窗口提示數據庫已經建立完畢,而且詢問是否啓動「配置顧問程序」來調整數據庫。點擊「否」按鈕關閉該窗口。這時,所建立的MUSIC數據庫會出如今控制中心對象樹中「數據庫」節點下。
3. 查看數據庫信息。
系統數據庫目錄包含了當前實例下全部數據庫的條目信息,能夠在「命令中心」輸入命令「list db directory」來查看系統數據庫目錄中MUSICDB的信息。
(1) 數據庫創建時若是未設置別名,系統會自動爲它設置一個與數據庫名相同的別名。MUSICDB的別名爲MUSICDB。
(2) 目錄條目類型的「間接」是指該數據庫爲本地數據庫(運行在同一主機),而「遠程」是指數據庫運行在另外一個遠程系統中。本實驗中MUSICDB的目錄條目類型爲「間接」。
4. 查看數據庫的鏈接狀態。
(1) 在「命令中心」輸入以下命令來檢查如今的鏈接狀態:get connection state
執行該命令後,輸出窗口顯示鏈接狀態爲「可鏈接而未鏈接」。
(2) 輸入以下命令鏈接到MUSICDB:
connect to MUSICDB
(3) 再次輸入命令「get connection state」檢查鏈接狀態,輸出窗口顯示鏈接狀態爲「可鏈接並已鏈接」,並列出相應的「SQL受權標識」及「本地數據庫別名」等信息。
5. 修改數據庫配置文件
每個數據庫都有它本身的數據庫配置文件,該文件包含了該數據庫的相關信息和配置參數。要查看MUSICDB數據庫配置文件,可在控制中心的對象樹中右鍵單擊「MUSICDB」,並在彈出菜單中選擇「配置參數」。藉助彈出的「數據庫配置—MUSICDB」窗口,能夠看查或更改相應的參數值。
(1) 在「命令中心」中輸入命令「update db cfg for MUSICDB using maxlocks 20 num_freqvalues 12」,該命令將每一個應用程序的最大鎖列表的百分比設爲20,並指定當RUNSTAS命令上指定了With Distribution 選項時,將收集的最高頻出現的值的數目設爲12。
(2) 查看MAXLOCKS和NUM_FREQVALUES的當前值與延遲值是否相同。
connect to MUSICDB
get db cfg for MUSICDB show detail
經過輸出窗口可見這兩個參數的當前值和延遲值是一致的。
6. 查看錶空間及表空間容器等信息
(1) 數據庫建立時,三個表空間也同時被建立,在命令中心中輸入命令list tablespaces,可查看這些表空間的相關信息。結果以下:
SYSCATSPACE——ID 0
TEMPSPACE1——ID 1
USERSPACE1——ID 2
(2) 表空間容器信息能夠經過命令list tablespace containers獲取。
要查看MUSICDB中標識爲0的表空間容器信息,可輸入命令:list tablespace containers for 0。該容器類型爲路徑/目錄,此目錄爲X:/inst1/NODE0000/SQL00001/SQLT0000.0。
(3) 要查看臨時表空間(ID=1)和默認用戶表空間(ID=2)的容器信息,可用下列語句實現:
list tablespace containers for 1
list tablespace containers for 2
臨時表空間的默認路徑爲X:/inst1/NODE0000/SQL00001/SQLT0001.0
用戶表空間的默認路徑爲X:/inst1/NODE0000/SQL00001/SQLT0002.0
7. 查看系統目錄表和視圖
在命令中心中輸入命令list tables for system列出系統目錄表和視圖,這些表和視圖存儲在SYSCATSPACE表空間中。
SYSCAT模式擁有全部創建在系統目錄表上的視圖,可經過該模式的這些視圖來訪問系統目錄表。例如在命令中心中輸入以下命令查看全部模式爲「SYSIBM」(即系統目錄表)的表名和表標識號:
select tabname, tableid from syscat.tables where tabschema='SYSIBM' and type='T'
二. 創建表空間
數據庫MUSICDB須要額外的幾個表空間,本節先經過「控制中心」來建立其中一個表空間。其他表空間經過的腳本命令文件來建立。
1. 經過嚮導創建表空間dms01
(1) 在控制中心的左邊的對象樹上,右鍵單擊數據庫「MUSICDB」下的「表空間」,在彈出菜單中選擇「建立」;
(2) 在「建立表空間嚮導」的第一頁中,指定新表空間的名稱爲dms01,並點擊「下一步」;
(3) 在嚮導的「類型」頁面,選擇表空間的類型爲常規,並點擊「下一步」;
(4) 在「空間管理」頁面,選擇該表空間爲「數據庫管理表空間」,並在下一步的「容器」頁面中,點擊「添加」按鈕,彈出「定義容器」窗口。
(5) 選擇容器大小的計算單位爲4KB頁,並在大小一欄輸入160,選擇驅動器爲X:,在容器一欄輸入dms/dms01,而後點擊「肯定」按鈕。繼續點擊「下一步」按鈕;
(6) 在嚮導的「讀/寫」頁面,將數據塊大小設置爲4 個4KB頁面;
(7) 設置完該表空間的全部性質後,單擊「總結」頁面的「顯示SQL」按鈕查看剛纔所做的設定,SQL語句應爲:CREATE REGULAR TABLESPACE DMS01 PAGESIZE 4 K MANAGED BY DATABASE USING ( FILE 'X:/dms01' 106 ) EXTENTSIZE 4 OVERHEAD 10.5 PREFETCHSIZE 4 TRANSFERRATE 0.33 BUFFERPOOL "IBMDEFAULTBP" DROPPED TABLE RECOVERY OFF,點擊「關閉」按鈕關閉「顯示SQL」窗口;
(8) 點擊向導的完成按鈕。
在命令中心中輸入命令list tablespaces show detail檢查新建立的表空間。(應先執行connect to MUSICDB)
2. 執行腳本命令文件來建立其它表空間。
(1) 在加載並執行腳本以前,首先要檢查命令中心的選項和工具設置,並完成下面設置:
在命令中心中,選擇「命令中心—>選項」菜單,選擇「命令中心選項」窗口的「執行」標籤頁,確保「自動落實SQL語句」和「若發生錯誤則中止執行」兩選項都被選中,選擇「結果」標籤頁,確保「詳細(將命令文本回送執輸出)」選項被選中,而後點擊「肯定」按鈕。
選擇「工具—>工具設置」菜單,選擇「工具設置」窗口的「通常」標籤頁,確保該頁面的「使用語句終止符;」選項被選中。關閉「工具設置」窗口。
(2) 經過執行腳本文件CRTBLSP建立其他表空間。
在命令中心中,選擇「腳本」標籤頁,選擇菜單「腳本—>導入」;
確保「導入」窗口中的系統名一欄與Windows系統名一致。選擇目錄和文件列表框找到CRTBLSP腳本,單擊「肯定」按鈕。該腳本將建立dms02,dms03,dms04,dms05,dms06和sms01六個表空間,執行該腳本。
3. 查看錶空間信息。
(1) 在控制中心對象樹中右鍵單擊MUSICDB下的表空間,並在彈出菜單中選擇「刷新」。在控制中內心並不能查看到表空間的標識號,但可經過在命令中心中輸入list tablespace看到。
表空間及其關聯的標識號以下:
SYSCATSPACE—ID 0
TEMPSPACE1—ID 1
USERSPACE1—ID 2
DMS01—ID 3
DMS02—ID 4
DMS03—ID 5
DMS04—ID 6
DMS05—ID 7
DMS06—ID 8
SMS01—ID 9
在命令中心中輸入命令:list tablespaces show detail,查看錶空間的詳細信息。
(2) SMS表空間並不使用預先格式好的容器,所以SMS的目錄容器所在的文件系統中可用空間的變更會直接影響到SMS表格空間的容量,而DMS表空間則要設置預留空間的大小。
查看標識號爲3的表空間的容器的詳細信息:
list tablespace containers for 3 show detail
容器類型爲文件,且該文件爲X:/dms/dms01。
查看標識號爲9的表空間的容器的詳細信息:
list tablespace containers for 9 show detail
容器類型爲路徑/目錄,且路徑爲x:/sms/sms01和x:/sms/sms02
(3) 表空間的信息也可經過視圖SYSCAT.TABLESPACES來訪問,該視圖中包含表空間信息的列有:
TBSPACE-表空間名
DEFINER-表空間建立者的用戶名
TBSPACEID-表空間的內部標識號
TBSPACETYPE-表空間類型,D表明DMS,S表明SMS
DATATYPE-表空間可存儲的數據的類型。L表明只能存儲大對象數據對象,A表明全部永久對象,T表明只能存儲臨時表。
在命令中心中輸入下列SQL語句,可實現上述信息的查詢:
select tbspace, definer, tbspaceid, tbspacetype, datatype from syscat.tablespaces
(4) 特定的表所相關的表空間信息能夠經過SYSCAT.TABLES視圖來訪問,該視圖中包含表空間信息的列有:
TBSPACEID-該表所在的主表空間內部標識號;
TBSPACE-該表所在的主表空間名稱;
INDEX_TBSPACE-包含該表索引的表空間;
LONG_TBSPACE-包含該表大對象數據的表空間。
爲列出表SYSIBM.SYSTABLES所在表空間的信息,可在命令中心輸入以下SQL語句:
select tabname, tbspaceid, tbspace, index_tbspace, long_tbspace
from syscat.tables
where tabname=’SYSTABLES’
在命令中心中輸入命令connect reset斷開與MUSICDB的鏈接。
api
實驗三:建立數據庫對象(2學時)
實驗任務:
A. 創建表;
B. 創建索引;
C. 創建視圖;
D. 創建別名;
E. 對其中一表添加參照完整性約束;
F. 對其中一表添加檢查約束;
G. 對其中一表添加觸發器;
H. 訪問這些對象相關的系統編目信息。
一. 建立表
1. 利用嚮導建立表artists。
(1) 在控制中心刷新表空間,並確保在開始建立表以前,能看到全部的表空間。
(2) 在控制中心的MUSICDB數據庫對象列表中,右鍵單擊「表」,並在彈出菜單中選擇「建立」,則彈出「建立表嚮導」對話框。
(3) 在「建立表嚮導」中,在「表名」處輸入artists,而後單擊「下一步」定義列。
ü 在列定義窗口中,點擊「添加」按鈕,在「添加列」對話框中,輸入列名artno,在數據類型中,選擇SMALLINT,去掉「可空」前面的選擇(該列不能爲空),點擊「應用」按鈕,繼續定義其它列。
ü 定義列name,選擇數據類型爲VARCHAR,長度爲50,容許爲空;
ü 定義classification列,數據類型爲CHARACTER,長度爲1,不容許爲空;
ü 定義bio列,數據類型CLOB,LOB單位選擇KBytes,長度爲100。LOB選項的「記錄」和「壓縮」均選上,並選擇「可空」;
ü 定義picture列。數據類型爲BLOB,LOB單位爲Kbytes,長度爲500。選擇LOB選項的「壓縮」選項,選擇「可空」。
(4) 在繼續下面操做前,要確保上述定義的列具備下列的性質。若是沒有,則用「更改」按鈕進行更改(此處定義錯誤,可能會使後續結果不正確)。
Column name Data type Length Nullable LOB option
----------- --------- ---------- -------- ----------
artno smallint No
name varchar 50 Yes
classification character 1 No
bio clob 100KBytes Yes Logged,Compact
picture blob 500 KBytes Yes Compact
(5) 按「下一步」進入表空間窗體,爲artists表定義表空間。
在表空間處,選擇DMS01表空間;選擇「使用單獨的索引空間」,並選擇DMS02表空間;選擇「使用獨立的長空間」並選擇DMS03表空間。而後單擊「下一步」,在新表上定義鍵。
(6) 按「添加主鍵」,在可用列中,選擇ARTNO列,並按下 > 按鈕,將ARTNO加入到「選擇的列」中(只有非空列才被選擇,因此,主鍵必須被定義爲非空)。
(7) 在「總結」窗口,按下「顯示SQL」,則會出現以下的SQL語句。其中,約束名會有所不一樣。
CREATE TABLE INST1.ARTISTS ( ARTNO SMALLINT NOT NULL , NAME VARCHAR (50) , CLASSIFICATION CHARACTER (1) NOT NULL , BIO CLOB (100 K ) LOGGED COMPACT ,
PICTURE BLOB (500 K ) NOT LOGGED COMPACT ,
CONSTRAINT CC1044760857306 PRIMARY KEY ( ARTNO) ) IN "DMS01" INDEX IN
"DMS02" LONG IN "DMS03" ;
(8) 按「完成」建立該表。
2. 利用Create Table語句建立表albums。
在「命令中心」中輸入下列語句,建立數據表stock(須要先鏈接到數據庫,即connect to musicdb)。
create table albums
(title varchar (50),
artno smallint not null,
itemno smallint not null)
in dms04
index in dms05;
在控制中心左邊的對象樹中右鍵單擊MUSICDB下的「表」,在彈出菜單中選擇「刷新」,再在右邊的內容面板中找到artists表和albums表,查看這兩個表。若是表不符合要求,則將其刪除,而後再返回上面步驟從新創建。
3. 導入腳本文件建立其他表。
在「命令中心」的腳本模式下導入CRTABLES的腳本文件建立其他表,在執行它以前,先查看腳本內容,注意表STOCK、CONCERTS、REORDER將分別把表數據和索引放在哪些表空間。
按Ctrl+Enter執行腳本文件。
4. 查看所建表的信息。
在控制中心左邊的對象樹中右鍵單擊MUSICDB下的「表」,在彈出菜單中選擇「刷新」,而後再在右邊內容面板中查看腳本所建立的表,確保這些表都創建得正確。
要查看錶的詳細信息,能夠在內容面板中右鍵單擊所要查看的表,在彈出菜單中選擇「改變」。使用此方法查看albums表。
5. 經過在命令中心中導入執行GRANTS腳本,將inst1模式下全部表的select權限授予public,並在腳本執行完畢後檢查權限授予是否成功。
注意查看該腳本的具體內容,以及相應的SQL語句的寫法。
6. 查看模式inst1全部表的列信息(選作)。
(1) 表的列信息能夠經過SYSCAT.COLUMNS視圖查詢到。在DB2命令行處理器輸入以下指令執行X:/cf23下的tabchk.sql腳本,並將輸出結果重定向到tabchk.file中。
打開「開始菜單—>程序—>IBM DB2—>命令行工具—>命令窗口」,輸入:
X:
Cd /cf23(數據文件所在目錄)
db2 connect to musicdb
db2 –tf tabchk.sql > tabchk.file
more tabchk.file
或者輸入 db2 select tabname, colname, typename from syscat.columns where tabschema = 'inst1' order by 1, 2 > tabchk.file
(2) 檢查輸出文件tabchk.file與 tabchk.master內容上的差異(須確保兩文件的內容沒有任何差異)。首先在命令提示符下輸入指令:
fc /w tabchk.file tabchk.master | more
若是輸出消息顯示「FC:找不到相異處」,tabchk.file與tabchk.master相一致。若是輸出顯示兩個文件某些行不相同,則應仔細檢查相應錯誤,刪除創建不當的表,並返回到上步從新創建。
7. 查看模式inst1表空間的信息(選作)。
(1) 某個表所相關的表空間信息能夠經過SYSCAT.TABLES視圖來得到。輸入一條SQL語句來從SYSCAT.TABLES獲取模式inst1下全部表的表名(TABNAME)、存儲該表數據的表空間(TBSPACE)、存儲該表索引的表空間(INDEX_TBSPACE)信息,並將結果集按表名排序。完整的SQL語句爲:
select tabname, tbspace, index_tbspace from syscat.tables where tabschema= 'inst1' order by tabname
X:/cf23下的腳本文件tbschk.sql包含該SQL語句,在DB2命令窗口中進入x:/cf23目錄下,輸入:
db2 –tf tbschk.sql > tbschk.file
more tbschk.file
(2) 檢查輸出文件tbschk.file與 tbschk.master內容上的差異。
fc /w tbschk.file tbschk.master | more
若是輸出消息顯示「FC:找不到相異處」,tbschk.file與tbschk.master相一致。若是輸出顯示兩個文件某些行不相同,則應仔細檢查相應錯誤,刪除創建不當的表,並返回到上步從新創建。
二. 建立索引
1. 在stock表的itemno列上創建名爲item的索引。
控制中心的對象列表中右鍵單擊MUSICDB下的「索引」,並在彈出菜單中選擇「建立」,在「建立索引」窗口中按下列要求填入相關信息。其中,索引模式爲inst1;索引名爲item;表模式爲inst1;表名爲stock。
在「可用的列」中選擇itemno並單擊「>」按鈕將該列加入到「選擇的列」中,而後點擊「肯定」按鈕。
2. 爲albums表的itemno列創建惟一索引。其中,索引模式爲inst1;索引名爲itemno;表模式爲inst1;表名爲albums;
在「可用的列」中選擇itemno並單擊「>」按鈕將該列加入到「選擇的列」中,而且選中「惟一」複選框,而後點擊「肯定」按鈕。
有關索引的信息能夠經過SYSCAT.INDEXES視圖獲取。
三. 創建視圖
1. 在控制中心中創建一名爲music的視圖。
控制中心的對象列表中右鍵單擊MUSICDB下的「視圖」,在彈出菜單中選擇「建立」;
選擇視圖的模式爲inst1;
視圖名一欄中輸入music;
點擊SQL語句框右邊的「清除」按鈕,並輸入:
as select title, classification, name from inst1.albums, inst1.artists where inst1.artists.artno= inst1.albums.artno ;
點擊「肯定」按鈕。
2. 利用Create View語句建立視圖inventory。
在「命令中心」中,輸入下列語句,創建視圖inventory。
connect to musicdb;
create view inventory (type, itemno, totcost, totqty)
as select type, itemno, sum (price * qty), sum(qty)
from stock group by type, itemno;
3. 查看視圖信息
(1) 在控制中心的對象樹中右鍵單擊MUSICDB下的「視圖」,並在彈出菜單中選擇「刷新」,而後可見在右邊的內容面板中列出了新創建的視圖。
(2) 視圖的相關信息能夠經過SYSCAT.VIEWS和SYSCAT.TABLES來獲取。List tables一樣能夠列出數據庫中的視圖(類型爲V)。
在「命令中心」中輸入以下命令,查看新創建的視圖是否列出:
connect to MUSICDB;
list tables for user;
或者connect to MUSICDB;
select viewschema, viewname from syscat.views where definer=user;
四. 創建別名
1. 在控制中心中爲artists表創建別名singers,爲reorder表創建別名emptystock。
2. 別名的相關信息能夠經過視圖SYSCAT.TABLES來獲取,此外list tables命令也能獲取當前鏈接的用戶下的別名列表。
輸入以下命令列出別名列表:
connect to MUSICDB;
list tables for user;
或者select tabname, type from syscat.tables where tabschema=user;
五. 添加參照完整性約束條件
本部分實驗在表artists與albums之間以及albums與stock之間添加參照完整性約束。
1. 修改albums表,而且爲它定義與表artists的參照完整性約束。
(1) 在該表itemno列上創建主鍵。
在控制中心中右鍵點擊albums表並在彈出菜單中選擇「改變」,再在「改變表—albums」窗口中選擇「鍵」標籤頁,點擊「添加主鍵」按鈕,在「定義主鍵」窗口「可用的列」中選擇itemno,而後點擊「>」按鈕,並點擊「肯定」按鈕。
(2) 爲該表定之外鍵。
點擊「添加外鍵」按鈕,在「添加外鍵」窗口中,表模式一欄選擇inst1,表名一欄選擇artists,注意這時主鍵框內顯示該表主鍵爲artno,再選擇「可用的」列中artno,點擊「>」按鈕使該列成爲外鍵,選擇「刪除時」一欄爲CASCADE,約束名爲fkartno,點擊「肯定」按鈕。
2. 在命令中心腳本模式下執行CRRI腳本,該腳本修改STOCK表併爲其定義參照完整性約束。(在運行腳本前,請仔細查看相關SQL語句的書寫方法。)
3. 經過SYSCAT.REFERENCES視圖查看參照完整性約束的相關信息(選作)。
在命令中心中輸入以下SQL語句獲取inst1模式下全部參照完整性約束的名稱、所在表名、參照表的模式、參照表名、刪除規則、外鍵所在列名、主鍵所在列名:
select constname, tabname, reftabschema, reftabname, deleterule, fk_colnames, pk_colnames
from syscat.references
where tabschema='inst1'
4. 經過SYSCAT.TABLES視圖查看參照完整性約束的相關信息(選作)。
在命令中心中輸入以下SQL語句,其中CHILDREN爲參照該表的全部表的個數,PARENTS爲該表所要參照的表的個數:
select tabname, parents, children
from syscat.tables
where tabschema='inst1' and (parents>0 or children>0) order by 2,3 desc
5. 參照完整性約束定義結果檢查(選作)
在DB2命令窗口中執行腳本richk.sql,經過SYSCAT.TABLES視圖得到當前鏈接的用戶模式參照完整性約束的相關信息,richk.sql的內容爲:
select substr(tabname, 1, 18), parents, children
from syscat.tables
where tabschema = user order by tabname
db2 –tf richk.sql > richk.file
more richk.file
而後檢查該輸出文件的內容與richk.master有無差異:
fc /w richk.file richk.master | more
若是輸出顯示兩文件內容存在差別,則應仔細檢查相關信息後從新修改表。
六. 爲stock表添加檢查約束
1. 修改stock表併爲該表添加檢查約束cctype。
該約束確保stock表type字段的取值必須是字符'D'、'C'、'R'之一。
在控制中心中右鍵單擊stock表,在彈出菜單中選擇「改變」,在「改變表—stock」窗口中選擇「檢查約束」標籤頁,點擊「添加」按鈕,再在檢查條件框中輸入:
type in ('D', 'C', 'R')
約束名一欄輸入cctype,點擊「肯定」按鈕關閉「添加檢查約束」窗口,再點擊「肯定」按鈕關閉「改變表—stock」窗口。
2. 檢查約束的相關信息可經過SYSCAT.CHECKS、SYSCAT.COLCHECKS、SYSCAT.TABCONST和SYSCAT.TABLES這些視圖獲取。
在命令中心中輸入:
select constname, tabname, colname from syscat.colchecks
3. 在命令中心中輸入以下SQL語句,列出的約束中,TYPE爲K表示是一個檢查約束,TYPE爲P表示是一主鍵,TYPE爲F表示是一外鍵
select constname, tabname, type from syscat.tabconst
4. DB2命令窗口中輸入以下命令執行腳本ckchk.sql,並將輸出結果重定向到ckchk.file:
Db2 –tf ckchk.sql > ckchk.file
More ckchk.file
而後檢查該輸出文件的內容與ckchk.master有無差異:
fc /w ckchk.file ckchk.master | more
七. 爲 reorder表建立觸發器,當stock表某一存貨少於6時,reorder表中將會插入一條新記錄(選作)
1. 將要創建的觸發器應具有下列性質:
ü 觸發器名爲reorder;
ü 觸發時機爲更新stock表某些記錄的qty字段值後該字段值小於或等於5;
ü 新記錄變量new經過n來引用;
ü 該觸發器將新記錄變量的itemno值和當前時間截插入到reorder表;
ü 應爲for each row mode db2sql觸發器。
右鍵單擊控制中心MUSICDB下的「觸發器」,在彈出菜單中選擇「建立」,在建立觸發器窗口中,輸入觸發器模式選爲inst1,表或視圖模式選爲inst1,觸發器名爲reorder,表或視圖名稱選爲stock,觸發操做的時間選爲「以後」,致使執行觸發器的操做設爲「更新列」並選擇qty列,而後選擇「觸發操做」標籤頁,在「新行的相關名」中輸入n,在觸發操做框內填入以下SQL語句:
when (n.qty<=5)
insert into reorder values (n.itemno, current timestamp)
點擊「顯示SQL」按鈕查看完整的SQL語句。
點擊「肯定」按鈕,而後在控制中心查看該觸發器是否列出。
2. 觸發器的相關信息能夠經過SYSCAT.TRIGGERS和SYSCAT.TRIGDEP獲取。
在命令中心中輸入以下SQL語句:
select trigname, tabname,trigevent from syscat.triggers
其中trigevent爲I表示觸發操做爲insert,D表示觸發操做爲delete,U表示觸發操做爲update。
在命令中心中輸入下列SQL語句:
select trigname, btype, bschema, bname from syscat.trigdep服務器
實驗四:移動與操縱數據(4學時)
實驗任務:
A. 學習Insert、Select和Update等SQL語句的應用;
B. 使用import工具從一文件讀取數據寫入表格;
C. 使用load工具從一文件讀取數據快速寫入表格;
D. 創建異常表;
E. 管理檢查約束,觸發器以及檢查暫掛狀態。
一. 數據插入、刪除
1. 利用SQL語句插入數據,並查看結果。
(1) 將下列數據插入到表albums中(一次插入一行)
TITLE ARTNO ITEMNO
Greatest Hits 1 1
Voice in the Wind 2 5
在「控制中心」,右鍵單擊表albums,選擇「內容採樣」,查看錶中結果。
(2) 將下列數據插入到表artists中
ARTNO NAME CLASSIFICATION BIO PICTURE
99 Double Dare R
Patti & Cartwheels S
1 Alabama C
2 Bogguss, Suzy S
3 Black, Clint C
Brooks, Garth C
5 Chapin-Carpenter, Mary R
6 Gill, Vince C
7 Jackson, Alan C
8 Judds C
在「控制中心」,右鍵單擊表artists,選擇「內容採樣」,查看錶中結果。
(3) 從新進行⑴的插入操做,並查看albums表中的插入結果。
(4) 將下列數據一次插入到表albums中
TITLE ARTNO ITEMNO
American Pride 1
Something Up My Sleeve 2 4
Put Yourself in My Shoes 5 7
在「控制中心」,右鍵單擊表albums,選擇「內容採樣」,查看錶中結果。
2. 刪除數據
(1) 刪除表artists中ARTNO爲99的記錄信息。
(2) 將表albums中TITLE爲Voice in the Wind的記錄刪除。
(3) 將CLASSIFICATION爲R的演員的唱片集從albums表中刪除。
二. 使用import工具導入數據到artists表,稍後執行腳本文件導入數據到albums和stock表。首先用用戶名inst1登錄。
1. 使用import工具導入數據到artists表。
(1) 導入數據
在控制中心中右鍵單擊artists表,在彈出菜單中選擇「導入」。在「導入表—artists」窗口中,按要求輸入下列信息:
ü 「導入文件」一欄輸入X:/....../artists.exp;
ü 「導入文件類型」設爲集成交換格式(IXF);
ü 「導入方式」設爲INSERT;
ü 「消息文件」一欄輸入X:/cf23/art.msg,單擊「肯定」按鈕。
(2) Windows命令提示符窗口中輸入more < art.msg,查看消息文件中的警告或錯誤信息,並注意有多少行數據成功插入表中。
2. 在「命令中心」的腳本模式下分別運行腳本imp_albu和imp_sto,該腳本將數據導入到albums表和stock表中。腳本執行完畢後查看消息文件albums.msg和sto.msg是否有任何附加信息,並注意分別有多少行數據成功插入表中。
三. 建立異常表—artists,albums,stock
全部的異常表將存儲在SMSEXP表空間,注意異常表的定義與原表很是類似,前N列的列名和數據類型與原表精確匹配。第N+1列爲可選列,數據類型爲timestamp。第N+2列也爲可選列,且只有在第N+1列存在時才能被建立,該列必須定義成32KB或更大的CLOB類型,用來存放致使該行被拒的特定約束信息。
在命令中心腳本模式下導入並執行腳本crexptab,該腳本分別爲artists、albums、stock建立異常表artexp、albexp、stoexp。
四. 備份數據庫
後面的實驗將使用Load Replace 命令裝入數據,要使該操做可恢復,須要先將現有的數據進行備份。數據庫備份與恢復的細節將會在之後的實驗有所涉及。
在db2命令窗口中輸入以下命令實現數據庫備份操做:
X:
Cd /
Md X:/backup
Db2 force application all
Db2 backup db MUSICDB to X:/backup
五. 使用load插入模式載入數據到concerts表
右鍵單擊concerts表,在彈出菜單中選擇「裝入(L)」;在「類型」頁,選擇「將數據附加到表中」,在「文件」頁,輸入下列信息:
ü 要載入文件爲concerts.exp;
ü 文件格式爲ixf格式;
ü 載入數據使用插入模式;
ü 載入過程當中全部消息重定向到concerts.msg文件當中。
ü 在「調度任務執行」中,選擇「當即執行而不保存歷史任務」
在「總結」頁面,查看相應的SQL語句,並點擊「完成」。
查看消息文件concerts.msg,注意有多少行成功載入並插入到表中:
more < concerts.msg
六. 使用load工具的替換模式載入數據到表artists中
在命令中心運行腳本load_art,將數據裝入到artists表中。
ü 本次載入使用了與前次import不一樣的IXF輸入文件,且使用了替換選項將先前導入的行替換掉。,在帶有異常選項的載入過程當中,全部違反惟一限制(主鍵或惟一索引)的數據行將會放入artists的異常表artexp中。
ü 查看artexp表中是否存有那些違反artists上惟一鍵索引的數據行,在命令中新腳本模式下導入並執行selexp。
ü 查看消息文件X:/cf23/load_art.msg內容:
more < load_art.msg
七. 使用SET INTEGRITY命令管理檢查暫掛狀態
1. 用Set Integrity 管理檢查暫掛狀態
(1) 在命令中心導入並執行腳本seltab,該腳本將對錶artists、stock、albums執行查詢操做,查看執行結果。
(2) 上述腳本執行後返回SQL0668緣由代碼1,命令中心中輸入:
? SQL0668
由於這些表處於檢查暫掛狀態,全部對這些表的數據操做都不能執行,輸出信息同時提示用戶執行SET INTEGRITY語句以消除表的檢查暫掛狀態。
(3) 在命令中心中執行腳本listtbst查看這些表上檢查約束的狀態。Artists表處於檢查暫掛狀態。
(4) SET INTEGRITY語句可被用來檢查數據是否違反參照完整性約束,處於檢查暫掛狀態的表(artists表)應被指定一個與它對應的異常表。在命令中心中導入並執行setcsts_arts腳原本檢查artists表中參照完整性約束。
(5) 警告「sql3601」。在命令中心中輸入? Sql3601,由幫助信息可知set integrity語句致使一個或多個表處於檢查暫掛狀態。
(6) 命令中心中導入並執行listtbst腳本,執行後可見albums和stock表處於檢查暫掛狀態。
(7) 命令中心中輸入並執行腳本setcsts_2,爲albums和stock表設置完整性,檢查它們上的參照完整性,並指定它們的異常表。
(8) 對artists、stock、albums表執行查詢操做以確認這些表已消除檢查暫掛狀態,在命令中心中導入並執行腳本listtbst和seltab,執行結果代表檢查暫掛狀態都以消除。
2. 將異常表中的數據放回原來表中
(1) 爲解除檢查暫掛狀態,那些違反約束的行被移動到異常表中。在命令中心中導入並執行腳本selexp察看異常表中的數據。
(2) 從stock移動到Stoexp的數據以及從albums移動到albexp的數據,這些數據的外鍵值都沒法與artists表中的主鍵相匹配。執行下列SQL語句在artists表中插入一行數據:
insert into artists (artno, name, classification) values (100, 'Patti & Cart Wheels', 'S')
(3) 如今要將stoexp和albexp表中的行分別插入到表stock和albums中,首先執行腳本selexp查看兩異常表中數據,檢查兩異常表的MSG列,注意並不須要將N+1和N+2列數據插入到stock和albums表。
(4) 在命令中心中導入並執行腳本insexp將stoexp和albexp中的數據插入到表stock和albums,insexp腳本也會對stock和albums執行查詢操做以檢查異常表中數據是否成功插入到原表。
八. 理解檢查約束的強制執行
上節實驗中爲stock表的TYPE列添加的檢查約束cctype,要查看該約束的內容,能夠在「命令中心」中右鍵單擊表stock並在彈出菜單中選擇「改變」,再在「改變表—stock」窗口中選擇「檢查約束」標籤頁,選擇cctype約束而後單擊「更改」按鈕,查看該約束的定義。
在命令中心中輸入並執行以下SQL語句:
insert into stock values (302, 'V',100.00, 20)
輸出結果返回SQL0545,該錯誤代碼代表由於插入的數據不知足檢查約束inst1.stock.cctype,因此要請求的操做不被容許。
在命令中心中輸入並執行以下SQL語句:
insert into stock values (302, 'C',100.00, 20)
由於'C'知足檢查約束cctype,因此該SQL語句成功執行。
九. 理解觸發器的強制執行
回顧上節實驗中在表stock的QTY列上建立的觸發器reorder。選擇命令中心的「腳本」標籤頁,而後輸入並執行下列SQL語句:
select substr(text,1,200) from syscat.triggers where tabname='stock'
在命令中心中輸入並執行下列SQL語句來修改stock表中itemno等於302的元組的qty字段值:
update stock set qty=3 where item=302
注意執行該語句後沒有消息顯示觸發器是否被觸發。
查看reorder表,檢查在更新stock表qty列後觸發器reorder是否被觸發。在「命令中心」中輸入:
terminate
connect to musicdb
select * from reorder
上節實驗爲表reorder創建了別名emptystock,在命令中心中輸入並執行下列SQL語句:
select * from emptystock
輸出結果代表對別名emptystock執行的查詢操做會直接轉化成對reorder表的操做。app
實驗五:數據查詢(2學時)
實驗任務:
A. 簡單查詢和鏈接查詢;
B. 子查詢;
C. 列函數和標量函數應用;
D. 分組;
E. 排序。
一. 利用SQL語句實現數據查詢
打開「命令中心」,在「交互式」頁面中,輸入Connect to MUSICDB,鏈接到數據庫。而後針對下列內容,寫出相應的SQL查詢語句。
各SQL語句,包括Select、Insert、Update和Delete等,也能夠經過「命令中心」中的「SQL助手」完成。
1. 從artists表中,查詢CLASSIFICTION爲C或B的演員的信息。
2. 查詢名(NAME)爲Beatles的演員的唱片集的名稱,並將結果按唱片集名稱的升序排列。
3. 查詢全部音樂會的信息,包括時間、地點以及演員的名稱。
4. 查詢CLASSIFICTION爲C的演員所舉辦的音樂會的信息,包括時間、地點。
5. 查詢在Paris舉辦的音樂會的演員名字,及這些演員所出版的唱片集名稱。
6. 查詢CLASSIFICTION爲B的演員的唱片集的名稱、庫存數量,並按庫存數量的升序排列結果。
7. 查詢全部albums表中,有唱片集的演員的數量。
8. 按唱片類型(TYPE)分別統計唱片的數量、平均價格、最高價格及最低價格。
9. 按唱片類型(TYPE)分別統計唱片最低價格不小於10.00元的唱片的數量。
tcp
實驗六:數據庫恢復(2學時)
實驗任務:
A. 爲數據庫和表空間建立備份鏡像;
B. 從備份鏡像恢復數據庫;
C. 對數據庫或表空間進行徹底的前滾恢復;
D. 在異常狀態下從新激活數據庫。
一. 決定DB2目前的日誌配置參數
1. 本實驗開始以前應先在命令中心中執行腳本recovrst,將數據庫的配置參數設置成本實驗所需的值。
2. 在命令中心中輸入並執行connect to musicdb,激活MUSICDB數據庫。
3. 控制中心中右鍵單擊MUSICDB數據庫,在彈出菜單中選擇「配置參數」,再在「數據庫配置—MUSICDB」窗口中查看「日誌」下的LOGFILSIZ的值,該參數的值被設置爲6,遠小於 Windows平臺下它的默認值250。
4. 查看主日誌文件的數目,DB2將於何時分配這些主日誌文件?
在「數據庫配置—MUSICDB」窗口中的「日誌」下可查看到LOGPRIMARY參數值爲3,當咱們發出ACTIVE DATABASE命令或者第一個應用程序鏈接到數據庫時,DB2將會分配這三個主日誌文件,且其中每一個日誌文件的大小爲LOGFILSIZ+2個4KB頁,所以全部主日誌文件將佔據3*(6+2)*4KB,即96KB空間。
5. 查看輔助日誌文件的數目,DB2將於什麼時候分配這些輔助日誌文件?
輔助日誌文件會在事務未提交但主日誌文件寫滿的時候根據須要一次分配一個(直到數據庫配置參數LOGSECOND規定的數目),本實驗中LOGSECOND爲默認值2,所以系統最多容許兩個輔助日誌文件。輔助日誌文件的大小一樣由參數LOGFILSIZ指定。
6. 查看當前系統所使用的日誌類型(循環日誌仍是歸檔日誌),哪些參數能夠提供日誌類型的相關信息。
LOGRETAIN和USEREXIT可被用來設置系統採用何種日誌類型,本實驗中這兩個參數均被設爲默認值否,所以系統採用循環日誌方式。若是LOGRETAIN被設爲Recovery或者USEREXIT被設爲Yes,那麼系統將採用歸檔日誌方式。
7. 考慮循環日誌可以支持崩潰恢復、版本恢復、前滾恢復中的哪些類型?
循環日誌只能支持崩潰恢復和版本恢復,但還不能支持前滾恢復!
8. 考慮日誌文件保存在哪裏?
配置參數中的LOGPATH指定日誌文件的保存路徑,所以本實驗的日誌文件保存在X:/inst1/NODE0000/SQL00001/SQLOGIR下。
9. 數據庫的工做單元可能被意外地中斷,假如部分工做單元的全部變動完成和提交以前發生了電源故障,那麼系統就須要執行崩潰恢復再次回到一致狀態。命令restart database能夠實現這個功能。若是AUTORESTART被設置成開(默認方式),那麼崩潰發生後,應用程序首次鏈接到數據庫時將會自動啓動崩潰恢復機制。本實驗AUTORESTART參數被設置爲開。
10. Windows命令提示符下,進入目錄X:/inst1/NODE0000/SQL00001。
11. 輸入命令:dir /w,查看該路徑下有哪些文件和目錄。
12. 輸入命令cd SQLOGDIR和dir /w能夠查看到該目錄下有三個日誌文件,這與參數設置相符。
13. 選擇命令中心的「交互式」標籤頁,再選擇「命令中心—>選項」菜單,在「命令中心選項」窗口中選擇「執行」標籤頁,確保「自動落實SQL語句」未被選中。點擊「肯定」按鈕。
執行connect to musicdb
執行update stock set qty=qty+1
14. 若是上步執行後系統顯示錯誤則跳到下一步,若是沒有顯示錯誤信息,則繼續執行:
update stock set qty=qty-1,這時系統會返回SQL0964C。
15. 爲查看詳細的錯誤信息,輸入並執行 ? SQL0964。回答爲何更新操做會失敗。
16. 選擇命令中心的「交互式」標籤頁,再選擇「命令中心—>選項」菜單,在「命令中心選項」窗口中選擇「執行」標籤頁,選中「自動落實SQL語句」,點擊「肯定」按鈕。
17. 本實驗中日誌文件故意被設置得很小,因此上面的更新操做未能成功完成,在命令中心中輸入並執行以下命令:
rollback
18. 進入日誌保存目錄,查看該目錄下的文件有幾個:
cd X:/inst1/NODE0000/SQL00001/SQLOGIR
dir /w
可查看到該目錄下如今多了兩個文件,當採用循環日誌且主日誌文件已滿時,DB2就會分配這兩個多出來的文件做爲輔助日誌文件。
輸入cd / ,進入根目錄下。
二. 循環日誌條件下的數據庫恢復
1. 在Windows命令提示符下輸入md /restore 在X驅動器下創建一個目錄用來保存數據庫備份。
2. 試圖對MUSICDB數據庫進行聯機備份。
在控制中心中右鍵單擊MUSICDB數據庫,在彈出菜單中選擇「備份」。
在「備份嚮導」窗口中,選擇「映象」標籤頁,選擇「介質類型」爲文件系統,點擊「添加」按鈕,路徑一欄輸入x:/restore
點擊向導的「選項」標籤頁,這時注意「可用性」下的「聯機」選項爲灰色不可選,只能進行脫機備份。
3. 對MUSICDB數據庫進行脫機備份,
在上步的「備份嚮導」窗口中「選項」標籤頁中選擇可用性爲「脫機」,不要選中「在啓動脫機操做以前停頓數據庫」選項;
點擊備份嚮導的「調度」標籤頁,選擇「當即運行而不保存歷史任務」,而後點擊「完成」按鈕。
4. 系統返回SQL01035代表備份失敗,根據提示消息可知目前正有另外一個程序在鏈接並使用要脫機備份的數據庫,點擊「DB2 消息」窗口的「關閉」按鈕。
5. 爲了確保所要備份的數據庫的完整性,脫機備份要求獨佔該數據庫。由於剛纔咱們經過命令中心鏈接到數據庫且該鏈接一直保持到如今,因此脫機備份不能成功。在命令中心中輸入以下命令強制全部用戶或應用程序切斷與該數據庫的鏈接:
force application all
terminate
6. 按照第三步從新脫機備份數據庫MUSICDB,此次備份成功。
7. 記錄此次備份的時間截。
在控制中心中選擇「工具—>日誌」菜單,在「日誌」窗口中選擇「數據庫歷史」標籤頁,點擊「數據庫」一欄右邊的「…」省略號按鈕,選擇相應的系統名、實例名、數據庫名,而後點擊「肯定」按鈕;
按「開始日期」排序MUSICDB全部事件列表,那麼本次備份應在列表最上端,記錄下該備份的開始日期及時間;
關閉「日誌」窗口,而後回到控制中心來。
8. 若是要使用restore命令而不是控制中心來恢復數據庫,且備份目錄下存在數據庫的多個備份鏡象,那麼,爲了指定用哪一份(什麼時候產生的)備份文件,備份的時間截信息就是必須的。
若是使用磁盤備份數據庫,那麼備份鏡象的文件名就包含着時間截信息,若是使用磁帶或者Tivoli Storage Manager管理的設備做爲備份的存儲介質,那麼備份鏡像的頭部也包含着相關的時間信息。
9. 另一種查看備份相關信息的方法是使用list backup命令,回顧上節實驗咱們使用load工具以前也備份了數據庫MUSICD。命令中心中輸入以下命令:
terminate ;
list backup all for musicdb ;
10.查看上步命令的輸出列表,注意全部的時間截及表空間信息。
11.在list backup命令中能夠不使用ALL 關鍵字,能夠指定一個特定的時間截或對象名來限制輸出結果,例如要查看某時間之後對MUSICDB進行的全部備份,能夠輸入:
12.list backup since yyyymmddhh for MUSICDB
13.數據庫管理器所維護的有關備份的歷史信息若是從不刪除會變得很是多,經過prune history命令能夠整理那些備份的相關信息。命令行處理器或命令中心中輸入命令查看的prune的在線幫助信息:? Prune
14.在Windows命令提示符下輸入以下命令,能夠發現備份的目錄結構及文件名與備份的數據庫名、實例名、時間截之間的對應關係:
x:
cd restore
dir
cd MUSICDB.0
dir
cd inst1
dir
cd NODE0000
dir
cd CATN0000
dir
cd yyyymmdd
dir
可見備份文件名的格式都爲「hhmmss.001」。
15.本實驗中數據庫MUSICDB備份後其中數據還未通過任何改動,如今的數據與備份中的數據徹底相同。首先執行下面SQL語句選擇出編號爲77的藝術家的名字和他的專輯名:
select name, title from artists a, albums b where a.artno =77 and a.artno= b.artno;
16.將編號爲77的藝術家的名字改成「Melanie and the Mechanics」,而且將編號爲261的專輯名改成「Unmaterial Girl」:
update artists set name='Melanie and the Mechanics' where artno=77;
update albums set title ='Unmaterial Girl' where itemno=261;
17.執行下列鏈接查詢查看上步的修改結果:
select name, title from artists a, albums b where a.artno =77 and a.artno= b.artno;
可見此次的輸出與前面的查詢結果不一樣。
18.假如如今MUSICDB所在的磁盤出現故障,咱們將使用剛剛建立的備份鏡像對MUSICDB進行恢復。輸入「?restore」命令得到恢復命令的幫助信息。
19.恢復前爲確保當前沒有用戶或應用程序鏈接到MUSICDB數據庫,命令中心中輸入並執行以下命令:
force application all;
terminate;
20.從X:/restore目錄下讀取備份文件對MUSICDB進行恢復。
在控制中心中右鍵單擊MUSICDB數據庫,在彈出菜單中選擇「復原」;
選擇「復原數據嚮導」窗口的「介紹」頁面,選擇「復原到現有數據庫」;
選擇嚮導的「復原對象」頁面,選擇「復原整個數據庫」;
選擇嚮導的「可用的映象」頁面,選擇剛剛備份的映象,而後點擊「>」按鈕;
選擇嚮導的「調度」頁面,選擇「當即運行而不保存歷史任務」;
選擇嚮導的「總結」頁面,點擊「顯示命令」按鈕查看所有restore命令;
點擊向導的「完成」按鈕,等待一段時間後系統彈出「DB2 消息」窗口顯示命令成功完成,點擊「肯定」按鈕關閉該消息窗口。
21.從新鏈接到數據庫,輸入並執行下列鏈接查詢語句:
connect to MUSICDB;
select name, title from artists a, albums b where a.artno =77 and a.artno= b.artno;
可見此次查詢的輸出結果反映的是更新前的原數據,因此恢復操做成功完成。
22.上面的恢復操做雖然復原了更新前的數據,可是由於DB2使用了循環日誌方式,沒法前滾,因此沒法救回備份後對數據庫所做的更新。
三. 歸檔日誌條件下的數據庫恢復
1. 在Windows命令提示符下輸入以下命令建立數據庫的備份目錄(X:/RESTORE):
MD /RESTORE
2. 更改數據庫配置文件以採用歸檔日誌方式。
在命令中心中輸入並執行下列命令:
update db cfg for musicdb using logretain recovery
四. 從新設置實驗環境
完成下列任務以確保剩餘實驗的環境設置正確:
1. 在命令中心中導入並執行X:/cf23/clrec腳本。
2. 檢查數據庫配置文件,確保目前數據庫採用循環日誌方式。
命令中心中輸入並執行下列語句:
connect to musicdb
get db cfg for musicdb
可見輸出結果中「恢復狀態的日誌保留」爲NO。ide
實驗七:管理權限(2學時)
實驗任務:
A. 熟悉DB2 UDB中PUBLIC組的默認特權;
B. 學會管理DB2權限(SYSADM,SYSCYRL,SYSMAINT和DBADM),熟悉各類權限的操做能力;
C. 可以對單個用戶和組授予特權;
D. 清楚什麼時候組特權可用和什麼時候須要我的特權等。
一. 默認的PUBLIC特權
1. 創建新用戶user1
(1) 使用Windows控制面板中的用戶管理程序按下列要求建立一個新用戶:
用戶名:user1
密碼:user1
全名:USER1
描述:DB2 User
(2) 在命令中心中輸入以下命令確保沒有應用程序或用戶鏈接到INST1實例:
force application all;
terminate;
(3) 將stock表的更新權限授予user1用戶:
connect to musicdb;
grant update on stock to user1;
2. 從DB2的控制中心,肯定當前數據庫的全部用戶的默認權限。
從DB2控制中心,選擇MUSICDB數據庫,右鍵選擇」權限」,而後分別選擇「組」和「用戶」頁,查看有哪些組和用戶,分別具備什麼樣的權限?
(1) 具備受權的任一個ID用戶能夠對MUSICDB進行的操做包括:建立數據庫、添加新的PACKAGES,鏈接到數據,以及隱式地建立模式等。
(2) NOFENCE列包含一個「not」符號,這表示PUBLIC組不具備建立NOT FENCED用戶自定義函數的特權,該工做須要授予某個用戶,和建立用戶自定義函數相關的另外一個命令CREATE EXTERNAL ROUTINE也不缺省地授予PUBLIC的特權。
(3) 在LOAD列上也具備「not」符號,表示PUBLIC組不可以進行LOAD操做,只有SYSADM,DBADM,或在數據庫上具備LOAD及與LOAD操做相關的其餘操做特權的用戶,能夠進行LOAD操做。
(4) 要查看全部的受權信息,能夠經過SYSCAT.DBAUTH視圖來進行。
3. 創建一個以不一樣用戶鏈接到數據庫MUSICDB的對話。
打開DB2命令窗口,輸入「title user1」。以user1用戶鏈接到數據MUSICDB
db2 connect to musicdb user user1 using user1
輸入下列SQL語句:
db2 「select substr(tbspace,1,18) from syscat.tablespaces」
因爲PUBLIC組中,SELECT是默認的特權,天然user1用戶也可以執行查詢操做。
4. 驗證建表權限
(1) 輸入下列SQL語句:
db2 "create table test1 (partno integer, subpart integer) in DMS04"
該語句不可以成功執行,由於user1用戶在DMS04表空間上沒有USE特權。
(2) user1用戶要想實現上述操做,能夠經過其餘用戶對其受權實現,假設corp_spy用戶具備相應的權限,能夠實現對user1用戶的受權。在DB2的命令窗口中輸入下列命令便可:
title corp_spy
db2 connect to musicdb
db2 grant use of tablespace dms04 to user user1
(3) user1用戶能夠從新輸入下列命令來實現上述操做:
db2 "create table test1 (partno integer, subpart integer) in DMS04"
此時,該語句就會成功執行。
5. 在命令中心,列出表空間DMS04中的所建立的全部表。
(1) user1能夠經過下列方法可查看MDS04表空間的ID:
在控制中心,在MUSICDB數據庫下選擇Views,而後選擇TABLESPACES視圖,並用右鍵查看其內容,能夠看到DMS04的ID爲6。
(2) 在命令中心的交互頁面,輸入下列命令:
minate
connect to musicdb
select tabschema, name from syscat.tables where tbspaceid = 6
6. 以用戶inst1身份,經過GUI將表user1.test1從數據庫中刪除。這裏須要清楚的是,inst1之因此可以刪除該表,是由於該用戶具備系統管理員權限。
7. 撤銷PUBLIC的默認權限。
在控制中心,在MUSICDB數據庫的用戶和組左側單擊+號,選擇DB Group,而後在內容部分選擇PUBLIC,右鍵選擇change,而後去掉其鏈接數據庫、建立表、建立包等選項。
8. 再以user1用戶建立表test1:
db2 create table test1 (partno integer, subpart integer) in DMS04
因爲CREATETAB特權被撤銷,因此用戶user1不可以再建立該數據表。可是此時user1與數據庫的鏈接仍然處於活動狀態。
二. DB2的權限
1. Inst1既是Windows的管理員,又是DB2的系統管理員。用inst1的Windows管理權限建立四個新的用戶:usersys,userctl,usermnt和userdba,密碼與用戶名相同。在DB2的命令窗口,輸入下列命令:
net user usersys usersys /add
net user userctl userctl /add
net user usermnt usermnt /add
net user userdba userdba /add
而後輸入下列命令:
net localgroup STAFF /add
net localgroup STAFF userdba /add
下面以usersys來做數據庫系統管理員。首先經過inst1實例的數據庫管理器配置參數,查看一下當前的系統管理員組是不是AMD1。
2. 在DB2命令窗口中輸入下列命令,能夠查看ADM1組中的用戶。
net localgroup ADM1
這些用戶具備數據庫管理員權限。要是其餘用戶也要具備該權限,須要將其加入到ADM1組中。
3. 在DB2命令窗口中輸入下列命令,將usersys添加到ADM1組中,並可經過net localgroup ADM1命令查看加入usersys用戶後ADM1組中用戶的變化。
net localgroup ADM1 usersys /add
4. 在DB2命令窗口中輸入title usersys。
5. 從usersys對話,能夠確認usersys已經具備了相應的權限。
db2 connect to musicdb user usersys using usersys
db2 select name from inst1.artists
db2 grant delete on inst1.artists to public
db2 revoke delete on inst1.artists from public
db2 get snapshot for locks on musicdb |more
雖然在第一部分中的Revoke已經撤銷了部分public特權,但這些語句所有可以成功執行,由於數據庫系統管理員能夠完成任何工做。
6. 做爲具備sysadm權限的用戶,usersys能夠更新數據庫管理器配置文件。如:
db2 update dbm cfg using sysctrl_group ctrl1 sysmaint_group maint1
該更改生效,須要執行下列語句:
db2 force application all
db2 terminate
db2stop
db2start
從控制中心,能夠查看到更改後配置參數。
7. 在DB2命令窗口,建立一個名爲CTRL1的組,併爲之添加一個成員userctl,而後建立一個MAINT1組,並添加一個用戶usermnt。
net localgroup CTRL1 /add
net localgroup MAINT1 /add
net localgroup CTRL1 userctl /add
net localgroup MAINT1 usermnt /add
8. 經過title命令分別爲userctl和usermnt兩個標題分別爲userct和usermn命令提示窗口。
9. 在userctl的命令窗口中,輸入下列語句以查看該用戶具備的權限:
db2 connect to musicdb user userctl using userctl
db2 get authorizations
咱們會發現該用戶具備SYSCTRL權限,即系統控制權限。
10. 在usermntl的命令窗口中,輸入下列語句以查看該用戶具備的權限:
db2 connect to musicdb user usermnt using usermnt
db2 get authorizations
usermnt用戶具備SYSMAINT權限,即系統維護權限。
11. 在userctl的命令窗口中,輸入下列語句(此時不要作其餘任何受權操做):
db2 create table test1 (col1 char(1))
db2 drop table inst1.reorder
db2 select * from inst1.music
這三個語句均不可以成功執行,都會遇到權限錯誤。由於SYSCTRL權限不可以訪問數據庫對象,而SYSMAINT權限是SYSCTRL的子集,對SYSCTRL不能完成的操做,SYSMAINT也不能實現。
12. 在userctl的命令窗口中,執行下列SQL語句:
db2 select name from inst1.artists
該語句會成功執行,由於從表artists中查詢數據的特權被授予了PUBLIC,該特權能夠經過控制中心,在用戶和組的查看。須要清楚,和SYSCTRL權限相關的特權不是對特定表的,而是面向實例的。
13. 在userctl的命令窗口中,爲MUSICDB數據庫指定一個新的別名:
db2 catalog db musicdb as ctrlsdb
14. 在userctl和usermnt的命令窗口中輸入db2 terminate命令。
15. 將userdba添加爲數據庫管理員。在控制中心,右鍵點擊MUSICDB數據庫,選擇Authorities,而後單擊ADD命令,在用戶頁面,選擇用戶userdba,併爲其添加DBADM權限。添加後能夠經過控制中心,在DBAUTH視圖中查看到該用戶的權限。
16. 將userctl的的命令窗口標題改成userdba。
Title userdba
17. 在userdba的命令窗口中,輸入下列命令,鏈接到MUSICDB數據,並執行以下操做:
db2 connect to musicdb user userdba using userdba
db2 select name from inst1.artists
db2 create table test1 (col1 char(1))
db2 create table inst1.dlc (col1 char(1))
db2 drop table inst1.dlc
三. DB2用戶和組特權
1. 以userdba用戶身份,將下列內容插入到inst1.artists表中。
db2 insert into inst1.albums values('DB2 Connect is My Life',99, 310)
db2 insert into inst1.albums values('Rustle Up', 99, 311)
2. 系統維護權限用戶usermnt沒有SQL特權,從userdba的命令窗口對其授予delete特權:
db2 grant delete on inst1.albums to usermnt
3. 從usermnt的命令窗口,鏈接到數據庫MUSICDB,並執行表inst1.albums的刪除行操做:
db2 connect to musicdb user usermnt using usermnt
db2 delete from inst1.albums where itemno = 310
4. 若是上述刪除操做被inst1發現,而且inst1經過與受權類似的方式,將userdba的DBADM權限收回。同時,userdba想將刪除的內容從新插入:
db2 insert into inst1.albums values('DB2 Connect is My Life',99, 310)
可是該操做是被禁止的,由於userdba再也不具備數據庫管理權限,不能再對其餘用戶模式下建立的數據進行操縱。
5. 若是userdba是數據對象的建立者,當被撤銷數據庫管理權限時,仍可執行如上的操做。如對userdba建立的表test1,仍可進行下列操做:
db2 select * from test1
db2 drop table test1
6. 經過db2 terminate和exit命令分別關閉用戶userdba、usermnt、usersys等對話窗口。
函數
實驗八:應用程序開發(選作)
實驗任務:
練習並掌握經常使用的數據開發方法,實現和數據庫的鏈接,並完成數據的讀取等操做,主要內容包括:
A. 嵌入式SQL應用程序開發;
B. 基於OLE DB/ADO技術的DB2應用程序開發;
C. 基於JDBC技術的DB2應用程序開發;
D. 基於SQLJ的DB2應用程序開發。
該實驗主要由學生課下完成。
一. 創建與數據庫的鏈接,實現數據插入、刪除和查詢等操做。
1. 分別應用嵌入式SQL、OLE DB/ADO、JDBC和SQLJ實現數據庫的鏈接,並實現數據插入、刪除和查詢等操做,所查詢的結果,須要以適當的形式呈現給用戶。具體實現方法,請參閱電子書的相關內容,或其餘應用開發技術文檔。
須要實現內容以下:
(1) 鏈接到MUSICDB數據庫
(2) 將下列數據插入到表artists中
ARTNO NAME CLASSIFICATION BIO PICTURE
200 Wang Fei R
201 Zhou Jielun S
202 Na Ying C
204 Zheng Zhihua S
(3) 將artists表中ARTNO爲200的演員的名字(NAME)更改成Zhang Xueyou; 將名字(NAME)爲Zheng Zhihua的演員的CLASSIFICTION 改成 C 。
(4) 刪除表artists中名字爲Zhou Jielun的演員的信息;將artists中編號大於200的演員的信息刪除。
(5) 實現實驗五中的一之一、二、三、七、8的查詢內容。
說明:
本實驗指導書的主要內容是在IBM培訓教材(CF23)實驗指導書的基礎上翻譯而來,並根據教學大綱對其中部份內容進行了修訂。
參考文獻:
1. IBM DB2 Universal Database Administration Workshop for Windows (Course Code CF231) —Instructor Exercises Guide
2. 楊鑫華,趙慧敏,丁傳華等. 《數據庫原理與DB2應用教程》.清華大學出版社. 2007.8工具