
- DB2教程
- 首頁
- DB2 - 簡介
- DB2 - 伺服器安裝
- DB2 - 例項
- DB2 - 資料庫
- DB2 - 緩衝池
- DB2 - 表空間
- DB2 - 儲存組
- DB2 - 模式
- DB2 - 資料型別
- DB2 - 表
- DB2 - 別名
- DB2 - 約束
- DB2 - 索引
- DB2 - 觸發器
- DB2 - 序列
- DB2 - 檢視
- DB2與XML
- DB2 - 備份和恢復
- DB2 - 資料庫安全
- DB2 - 角色
- DB2 - LDAP
- DB2有用資源
- DB2 - 問答
- DB2 - 快速指南
- DB2 - 有用資源
- DB2 - 討論
DB2快速指南
DB2簡介
本章介紹DB2的歷史、版本、版本及其各自的功能。
概述
DB2是IBM的資料庫產品。它是一種關係資料庫管理系統(RDBMS)。DB2旨在高效地儲存、分析和檢索資料。DB2產品擴充套件了對面向物件功能和帶有XML的非關係結構的支援。
歷史
最初,IBM為其特定平臺開發了DB2產品。從1990年開始,它決定開發一個通用資料庫 (UDB) DB2伺服器,該伺服器可以在任何權威的作業系統(如Linux、UNIX和Windows)上執行。
版本
對於IBM DB2,UDB當前版本為10.5,具有BLU Acceleration功能,其代號為“Kepler”。下面列出了DB2至今的所有版本
版本 | 代號 |
---|---|
3.4 | Cobweb |
8.1, 8.2 | Stinger |
9.1 | Viper |
9.5 | Viper 2 |
9.7 | Cobra |
9.8 | 它僅添加了PureScale功能 |
10.1 | Galileo |
10.5 | Kepler |
資料伺服器版本和功能
根據DB2所需功能的要求,組織選擇合適的DB2版本。下表顯示了DB2伺服器版本及其功能
版本 | 功能 |
---|---|
高階企業伺服器版和企業伺服器版 (AESE / ESE) | 它專為中型到大型商業組織設計。平臺 - Linux、UNIX和Windows。表分割槽高可用性災難恢復 (HARD) 物化查詢表 (MQTs) 多維群集 (MDC) 連線集中器純XML備份壓縮同構聯合 |
工作組伺服器版 (WSE) | 它專為工作組或中型商業組織設計。使用此WSE,您可以使用 - 高可用性災難恢復 (HARD) 線上重組純XML Web服務聯合支援DB2同構聯合同構SQL複製備份壓縮 |
Express -C | 它以零成本提供DB2的所有功能。它可以在任何物理或虛擬系統上以任何大小的配置執行。 |
Express版 | 它專為入門級和中型商業組織設計。它是功能齊全的DB2資料伺服器。它僅提供有限的服務。此版本附帶 - Web服務聯合DB2同構聯合同構SQL複製備份壓縮 |
企業開發人員版 | 它僅提供單個應用程式開發人員。它可用於設計、構建和原型化應用程式,以便部署到任何IBM伺服器上。該軟體不能用於開發應用程式。 |
DB2伺服器安裝
本章介紹DB2伺服器的安裝步驟。
簡介
您可以從www.ibm.com下載DB2伺服器試用版或購買產品許可證。有兩種單獨的DB2伺服器可供下載,具體取決於要執行其操作的作業系統的大小。例如,如果要下載適用於32位Linux或UNIX作業系統的DB2伺服器,則需要下載32位DB2伺服器。64位DB2伺服器也適用相同規則。
硬體要求
處理器:至少酷睿2雙核
記憶體:至少1GB
硬碟:至少30GB
軟體要求
在安裝DB2伺服器之前,您的系統需要準備好所需的軟體。對於Linux,您需要安裝“libstdc++6.0”。
檢查系統相容性
在安裝DB2伺服器之前,您需要驗證您的系統是否與DB2伺服器相容。要確認相容性,您需要在命令控制檯中呼叫“db2prereqcheck”命令。
在Linux作業系統上安裝DB2
開啟終端,並使用“CD <DB2安裝資料夾>”命令在控制檯上設定db2安裝映像資料夾路徑。然後鍵入“./db2prereqcheck”命令,該命令確認您的系統與DB2伺服器的相容性。
./db2prereqcheck
圖1顯示了Linux作業系統和硬體系統的相容性要求。
按照以下步驟在Linux系統上安裝DB2
- 開啟終端。
- 以root使用者身份登入。
- 開啟DB2安裝資料夾。
- 鍵入“./db2setup”並按Enter鍵。
此過程將開始執行DB2伺服器設定。

在root終端上鍵入“./db2setup”並按Enter鍵以啟動DB2伺服器的設定過程。
這樣做後,將出現“設定啟動板”螢幕。[圖2]

在“設定啟動板”頁面上,從左側選單中選擇“安裝產品”選項。選擇“DB2高階企業伺服器版”選項。選擇“安裝新”按鈕。
出現一個名為“DB2設定嚮導”的新框架。單擊“下一步”。[圖3]

下一個螢幕顯示DB2許可協議。選擇“我接受條款……”單擊“下一步”。[圖4]

下一個螢幕顯示安裝型別,預設情況下設定為“典型”。
保持相同的選擇。單擊“下一步”。[圖5]

下一個螢幕顯示安裝操作。
選擇“安裝DB2高階企業伺服器版……”
單擊“下一步”。[圖6]

在下一個螢幕上,設定程式要求選擇安裝目錄。
保持預設值並單擊“下一步”。

下一個螢幕顯示使用者身份驗證。輸入“dasusr1”使用者的密碼。
(您的密碼可以與使用者名稱相同,以便於記住。)

在以下螢幕上,設定程式要求您建立DB2伺服器例項。
在這裡,它使用名稱“db2inst1”建立DB2例項。

下一個螢幕詢問您為預設例項所需的分割槽數。
您可以選擇“單個或多個”分割槽。
選擇“單分割槽例項”。單擊“下一步”。

在下一個螢幕上,設定程式要求您對正在建立的DB2例項進行身份驗證。
在這裡,預設情況下使用者名稱被建立為“db2inst1”。您可以輸入與使用者名稱相同的密碼。
單擊“下一步”。

在下一個螢幕上,設定程式要求您輸入“db2fenc”使用者的身份驗證資訊。
在這裡,您可以輸入與使用者名稱相同的密碼。
單擊“下一步”。

在下一個螢幕上,您可以選擇“此時不設定您的db2伺服器以傳送通知”選項。
單擊“下一步”。

下一個螢幕顯示有關db2設定的資訊。
單擊“完成”。
此時,DB2安裝過程已完成。
驗證DB2安裝
您需要驗證DB2伺服器的安裝是否有效。完成DB2伺服器安裝後,退出當前使用者模式並登入到“db2inst1”使用者。在“db2inst1”使用者環境中,您可以開啟終端並執行以下命令以驗證您的db2產品是否已正確安裝。
db2level
此命令顯示當前例項中已安裝的DB2產品的當前版本和服務級別。
語法
db2level
示例
db2level
輸出
DB21085I Instance "db2inst2" uses "64" bits And DB2 code release "SQL10010" with level identifier "0201010E". Informational tokens are "DB2 v10.1.0.0", "s120403", "LINUXAMD64101", and Fix Pack "0". Product is installed at "/home/db2inst2/sqllib".
db2licm
此命令顯示我們DB2產品的所有與許可證相關的資訊。
語法
db2licm <parameter>
示例
db2licm -l
輸出
Product name: "DB2 Advanced Enterprise Server Edition" License type: "Trial" Expiry date: "10/02/2014" Product identifier: "db2aese" Version information: "10.1" Product name: "DB2 Connect Server" License type: "Trial" Expiry date: "10/02/2014" Product identifier: "db2consv" Version information: "10.1"
命令列處理器 (CLP)
CLP可以以三種模式之一啟動
命令模式:在此模式下,每個命令和SQL語句都必須以“db2”為字首。例如,查詢“db2 activate database sample”。
互動式輸入模式:您可以使用“db2”命令啟動此模式。在這裡,您可以傳遞沒有字首的SQL語句。例如,“activate database sample”。
批處理模式:在這裡,您需要建立一個包含所有需求SQL查詢的指令碼檔案,並將該檔案儲存為“.db2”副檔名。您可以使用語法“db2 –tf <filename.db2>”在命令列中呼叫它。

DB2例項
簡介
例項是DB2資料庫管理器的邏輯環境。使用例項,您可以管理資料庫。根據您的需求,您可以在一臺物理機器上建立多個例項。例項目錄的內容為
- 資料庫管理器配置檔案
- 系統資料庫目錄
- 節點目錄
- 節點配置檔案 [db2nodes.cfg]
- 除錯檔案、轉儲檔案
對於DB2資料庫伺服器,預設例項為“DB2”。建立例項目錄後,無法更改其位置。一個例項可以管理多個數據庫。在一個例項中,每個資料庫都有一個唯一的名稱,它自己的一組目錄表、配置檔案、許可權和特權。
DB2產品中例項的架構

多個例項
您可以在Linux、UNIX和Windows上的一臺DB2伺服器上建立多個例項。可以在物理機器上安裝多個DB2伺服器。
在Linux上建立例項
如果DB2伺服器以root使用者身份安裝,則您可以在Linux和UNIX上建立多個例項。例項可以在Linux和UNIX上獨立同時執行。您一次只能在一個數據庫管理器的單個例項中工作。
例項資料夾包含資料庫配置檔案和資料夾。例項目錄儲存在Windows上的不同位置,具體取決於作業系統的版本。
列出例項
以下命令用於列出例項
db2ilist
此命令列出系統上所有可用的例項。
語法
db2ilist
示例:[檢視DB2副本中建立了多少個例項]
db2ilist
輸出
db2inst1 db2inst2 db2inst3
例項環境命令
這些命令可用於處理DB2 CLI中例項的安排。
獲取例項
此命令顯示當前正在執行的例項的詳細資訊。
語法
db2 get instance
示例:[檢視啟用當前使用者的當前例項]
db2 get instance
輸出
The current database manager instance is : db2inst1
設定例項
要在 DB2 UDB 上啟動或停止例項的資料庫管理器,請針對當前例項執行以下命令。
語法
set db2instance=<instance_name>
示例:[將“db2inst1”環境安排給當前使用者]
set db2instance=db2inst1
db2start
使用此命令,您可以啟動例項。在此之前,您需要執行“set instance”。
語法
db2start
示例:[啟動例項]
db2start
輸出
SQL1063N DB2START processing was successful
db2stop
使用此命令,您可以停止正在執行的例項。
語法
db2stop
輸出
SQL1064N DB2STOP processing was successful.
建立例項
讓我們看看如何建立一個新例項。
db2icrt
如果要建立新例項,則需要以 root 使用者身份登入。例項 ID 不是 root ID 或 root 名稱。
以下是建立新例項的步驟
步驟 1:為例項建立作業系統使用者。
語法
useradd -u <ID> -g <group name> -m -d <user location> <user name> -p <password>
示例:[在“db2iadm1”組中為名為“db2inst2”的例項建立使用者,密碼為“db2inst2”]
useradd -u 1000 -g db2iadm1 -m -d /home/db2inst2 db2inst2 -p db2inst2
步驟 2:以 root 使用者身份轉到 DB2 例項目錄以建立新例項。
位置
cd /opt/ibm/db2/v10.1/instance
步驟 3:使用以下語法建立例項
語法
./db2icrt -s ese -u <inst id> <instance name>
示例:[在使用者“db2inst2”中建立名為“db2inst2”的新例項,並具有“ESE”(企業伺服器版)的功能]
./db2icrt -s ese -u db2inst2 db2inst2
輸出
DBI1446I The db2icrt command is running, please wait. …. ….. DBI1070I Program db2icrt completed successfully.
安排例項的通訊埠和主機
編輯 /etc/services 檔案並新增埠號。在下面給出的語法中,“inst_name”表示例項名稱,“inst_port”表示例項的埠號。
語法
db2c_<inst name> <inst_port>/tcp
示例:[為例項“db2inst2”新增“50001/tcp”埠號,並在“services”檔案中使用變數“db2c_db2inst2”]
db2c_db2inst2 50001/tcp
語法 1:[使用服務名稱更新資料庫管理器配置。以下語法“svcename”表示例項服務名稱,“inst_name”表示例項名稱]
db2 update database manager configuration using svcename db2c_&<inst_name>
示例 1:[使用變數 svcename 的值為“db2c_db2inst2”更新例項“db2inst2”的 DBM 配置
db2 update database manager configuration using svcename db2c_db2inst2
輸出
DB20000I The UPDATE DATABASE MANAGER CONFIGURATION command completed successfully.
語法 2:為當前例項設定“tcpip”通訊協議。
db2set DB2COMM=tcpip
語法 3:[停止並啟動當前例項以獲取資料庫管理器配置中的更新值]
db2stop db2start
更新例項
您可以使用以下命令更新例項
db2iupdt
此命令用於在同一版本發行版中更新例項。在執行此命令之前,您需要使用“db2stop”命令停止例項資料庫管理器。以下語法中的“inst_name”表示要更新到較新版本或已安裝的 DB2 伺服器版本的先前釋出或安裝的 db2 伺服器例項名稱。
語法 1:以正常模式更新例項
db2iupdt <inst_name>
示例 1
./db2iupdt db2inst2
語法 2:以除錯模式更新例項
db2iupdt -D <inst_name>
示例
db2iupdt -D db2inst2
升級例項
您可以將例項從 DB2 副本的先前版本升級到當前新安裝的 DB2 副本版本。
db2iupgrade
在 Linux 或 UNIX 系統上,此命令位於 DB2DIR/instance 目錄中。在以下語法中,“inst_name”表示先前版本的 DB2 例項,“inst_username”表示當前安裝的版本 DB2 副本例項使用者。
語法 2:
db2iupgrade -d -k -u <inst_username> <inst_name>
示例:
db2iupgrade -d -k -u db2inst2 db2inst2
命令引數
-d:開啟除錯模式。
-k:如果在您執行此命令的 DB2 副本中支援預升級例項型別,則保留該型別。
如果在 Linux 上使用超級使用者 (su) 執行 db2iupgrade 命令,則必須使用“ - ”選項發出“su”命令。
刪除例項
您可以刪除或刪除由“db2icrt”命令建立的例項。
db2idrop
在 Linux 和 UNIX 作業系統上,此命令位於 DB2_installation_folder/instance 目錄中。
語法:[在以下語法中,“inst_username”表示例項的使用者名稱,“inst_name”表示例項名稱]
db2idrop -u <inst_username> <inst_name>
示例:[刪除 db2inst2]
./db2idrop -u db2inst2 db2inst2
使用其他命令與例項
查詢我們現在正在使用的 DB2 例項的命令。
語法 1:[檢查資料庫管理器啟用的當前例項]
db2 get instance
輸出
The current database manager instance is: db2inst1
語法 2:[檢視具有操作位和發行版本的當前例項]
db2pd -inst | head -2
示例
db2pd -inst | head -2
輸出
Instance db2inst1 uses 64 bits and DB2 code release SQL10010
語法 3:[檢查當前工作例項的名稱]
db2 select inst_name from sysibmadm.env_inst_info
示例
db2 select inst_name from sysibmadm.env_inst_info
輸出
INST_NAME -------------------------------------- db2inst1 1 record(s) selected.
語法:[將新例項設定為預設例項]
db2set db2instdef=<inst_name> -g
示例:[將新建立的例項作為預設例項]
db2set db2instdef=db2inst2 -g
DB2 資料庫
本章介紹如何建立、啟用和停用資料庫以及相關的語法。
資料庫架構

資料庫是表、模式、緩衝池、日誌、儲存組和表空間的集合,它們協同工作以有效地處理資料庫操作。
資料庫目錄
資料庫目錄是資料庫的有組織的儲存庫。建立資料庫時,有關資料庫的所有詳細資訊都儲存在資料庫目錄中,例如預設儲存裝置的詳細資訊、配置檔案和臨時表列表等。
分割槽全域性目錄在例項資料夾中建立。此目錄包含與資料庫相關的所有全域性資訊。此分割槽全域性目錄命名為 NODExxxx/SQLyyy,其中 xxxx 是資料分割槽號,yyy 是資料庫令牌。
在分割槽全域性目錄中,將建立一個成員特定目錄。此目錄包含本地資料庫資訊。成員特定目錄命名為 MEMBERxxxx,其中 xxxx 是成員編號。DB2 Enterprise Server Edition 環境在一個成員上執行,並且只有一個成員特定目錄。此成員特定目錄的唯一名稱為 MEMBER0000。
分割槽全域性目錄
目錄位置:<instance>/NODExxx/SQLxxx
分割槽全域性目錄包含如下所示的資料庫相關檔案。
- 全域性死鎖寫入檔案事件監控檔案
- 表空間資訊檔案 [SQLSPCS.1、SQLSPCS.2]
- 儲存組控制檔案 [SQLSGF.1、SQLSGF.2]
- 臨時表空間容器檔案。[/storage path/
/T0000011/C000000.TMP/SQL00002.MEMBER0001.TDA] - 全域性配置檔案 [SQLDBCONF]
- 歷史檔案 [DB2RHIST.ASC、DB2RHIST.BAK、DB2TSCHG.HIS、DB2TSCHG.HIS]
- 與日誌相關的檔案 [SQLOGCTL.GLFH.1、SQLOGCTL.GLFH.2]
- 鎖定檔案 [SQLINSLK、SQLTMPLK]
- 自動儲存容器
成員特定目錄
目錄位置:/NODExxxx/SQLxxxx/MEMBER0000
此目錄包含
- 與資料庫關聯的物件
- 緩衝池資訊檔案 [SQLBP.1、SQLBP.2]
- 本地事件監控檔案
- 與日誌相關的檔案 [SQLOGCTL.LFH.1、SQLOGCTL.LFH.2、SQLOGMIR.LFH]。
- 本地配置檔案
- 死鎖事件監視器檔案。在 ESE 和分割槽資料庫環境中,詳細的死鎖事件監視器檔案儲存在目錄節點的資料庫目錄中。
建立資料庫
您可以使用“CREATE DATABASE”命令在例項中建立資料庫。所有資料庫都使用在建立例項時建立的預設儲存組“IBMSTOGROUP”建立。在 DB2 中,所有資料庫表都儲存在“表空間”中,這些表空間使用其各自的儲存組。
資料庫的許可權自動設定為 PUBLIC [CREATETAB、BINDADD、CONNECT、IMPLICIT_SCHEMA 和 SELECT],但是,如果存在 RESTRICTIVE 選項,則不會將許可權授予 PUBLIC。
建立非限制性資料庫
此命令用於建立非限制性資料庫。
語法:[建立新資料庫。“database_name”表示要建立的新資料庫名稱。]
db2 create database <database name>
示例:[建立名為“one”的新非限制性資料庫]
db2 create database one
輸出
DB20000I The CREATE DATABASE command completed successfully.
建立限制性資料庫
呼叫此命令建立限制性資料庫。
語法:[在以下語法中,“db_name”表示資料庫名稱。]
db2 create database <db_name> restrictive
示例:[建立名為“two”的新限制性資料庫]
db2 create database two restrictive
使用不同的使用者定義位置建立資料庫
在不同的路徑上使用預設儲存組“IBMSTOGROUP”建立資料庫。早些時候,您呼叫了“create database”命令,但沒有任何使用者定義的位置來儲存或在特定位置建立資料庫。要使用使用者定義的資料庫位置建立資料庫,請遵循以下步驟
語法:[在以下語法中,“db_name”表示“資料庫名稱”,“data_location”表示必須在資料夾中儲存資料的位置,“db_path_location”表示“data_location”的驅動器位置。]
db2 create database '<db_name>' on '<data location>' dbpath on '<db_path_location>'
示例:[建立名為“four”的資料庫,其中資料儲存在“data1”中,此資料夾儲存在“dbpath1”中]
db2 create database four on '/data1' dbpath on '/dbpath1'
檢視本地或系統資料庫目錄檔案
您執行此命令以檢視當前例項中可用的目錄列表。
語法
db2 list database directory
示例
db2 list database directory
輸出
System Database Directory Number of entries in the directory = 6 Database 1 entry: Database alias = FOUR Database name = FOUR Local database directory = /home/db2inst4/Desktop/dbpath Database release level = f.00 Comment = Directory entry type = Indirect Catalog database partition number = 0 Alternate server hostname = Alternate server port number = Database 2 entry: Database alias = SIX Database name = SIX Local database directory = /home/db2inst4 Database release level = f.00 Comment = Directory entry type = Indirect Catalog database partition number = 0 Alternate server hostname = Alternate server port number =
啟用資料庫
此命令啟動特定資料庫的所有必要服務,以便應用程式可以使用該資料庫。
語法:[“db_name”表示資料庫名稱]
db2 activate db <db_name>
示例:[啟用資料庫“one”]
db2 activate db one
停用資料庫
使用此命令,您可以停止資料庫服務。
語法
db2 deactivate db <db_name>
示例:[停用資料庫“one”]
db2 deactivate db one
連線到資料庫
建立資料庫後,要將其投入使用,您需要連線或啟動資料庫。
語法
db2 connect to <database name>
示例:[將資料庫 one 連線到當前 CLI]
db2 connect to one
輸出
Database Connection Information Database server = DB2/LINUXX8664 10.1.0 SQL authorization ID = DB2INST4 Local database alias = ONE
驗證資料庫是否為限制性資料庫
要檢查此資料庫是否為限制性資料庫,請使用以下語法
語法:[在以下語法中,“db”表示資料庫,“cfg”表示配置,“db_name”表示資料庫名稱]
db2 get db cfg for <db_name> | grep -i restrict
示例:[檢查資料庫“one”是否為限制性資料庫]
db2 get db cfg for one | grep -i restrict
輸出
Restrict access = NO
配置資料庫管理器和資料庫
例項配置(資料庫管理器配置)儲存在名為“db2system”的檔案中,資料庫相關配置儲存在名為“SQLDBCON”的檔案中。這些檔案無法直接編輯。您可以使用呼叫 API 的工具編輯這些檔案。使用命令列處理器,您可以使用這些命令。
資料庫管理器配置引數
語法:[獲取例項資料庫管理器的資訊]
db2 get database manager configuration或
db2 get dbm cfg
語法:[更新例項資料庫管理器]
db2 update database manager configuration或
db2 update dbm cfg
語法:[重置以前的配置]
db2 reset database manager configuration或
db2 reset dbm cfg
資料庫配置引數
語法:[獲取資料庫的資訊]
db2 get database configuration或
db2 get db cfg
語法:[更新資料庫配置]
db2 update database configuration或
db2 update db cfg
語法:[重置資料庫配置中先前配置的值
db2 reset database configuration或
db2 reset db cfg
語法:[檢查當前活動資料庫的大小]
db2 "call get_dbsize_info(?,?,?,-1)"
示例:[驗證當前啟用資料庫的大小]
db2 "call get_dbsize_info(?,?,?,-1)"
輸出
Value of output parameters -------------------------- Parameter Name : SNAPSHOTTIMESTAMP Parameter Value : 2014-07-02-10.27.15.556775 Parameter Name : DATABASESIZE Parameter Value : 105795584 Parameter Name : DATABASECAPACITY Parameter Value : 396784705536 Return Status = 0
估算資料庫所需的空間
要估算資料庫的大小,必須考慮以下因素的貢獻
- 系統目錄表
- 使用者表資料
- 長欄位資料
- 大型物件 (LOB) 資料
- 索引空間
- 臨時工作空間
- XML 資料
- 日誌檔案空間
- 本地資料庫目錄
- 系統檔案
檢查資料庫許可權
您可以使用以下語法檢查在非限制性資料庫上授予 PUBLIC 的資料庫許可權。
步驟 1:使用例項的身份驗證使用者 ID 和密碼連線到資料庫。
語法:[使用使用者名稱和密碼連線到資料庫]
db2 connect to <db_name> user <userid> using <password>
示例:[使用使用者 ID“db2inst4”和密碼“db2inst4”連線到資料庫“one”]
db2 connect to one user db2inst4 using db2inst4
輸出
Database Connection Information Database server = DB2/LINUXX8664 10.1.0 SQL authorization ID = DB2INST4 Local database alias = ONE
步驟 2:驗證資料庫的許可權。
語法:[以下語法顯示當前資料庫的許可權服務結果]
db2 "select substr(authority,1,25) as authority, d_user, d_group, d_public, role_user, role_group, role_public,d_role from table( sysproc.auth_list_authorities_for_authid ('public','g'))as t order by authority"
示例
db2 "select substr(authority,1,25) as authority, d_user, d_group, d_public, role_user, role_group, role_public,d_role from table( sysproc.auth_list_authorities_for_authid ('PUBLIC','G'))as t order by authority"
輸出
AUTHORITY D_USER D_GROUP D_PUBLIC ROLE_USER ROLE_GROUP ROLE_PUBLIC D_ROLE ------------------------- ------ ------- -------- --------- ---------- ----------- ------ ACCESSCTRL * * N * * N * BINDADD * * Y * * N * CONNECT * * Y * * N * CREATETAB * * Y * * N * CREATE_EXTERNAL_ROUTINE * * N * * N * CREATE_NOT_FENCED_ROUTINE * * N * * N * CREATE_SECURE_OBJECT * * N * * N * DATAACCESS * * N * * N * DBADM * * N * * N * EXPLAIN * * N * * N * IMPLICIT_SCHEMA * * Y * * N * LOAD * * N * * N * QUIESCE_CONNECT * * N * * N * SECADM * * N * * N * SQLADM * * N * * N * SYSADM * * * * * * * SYSCTRL * * * * * * * SYSMAINT * * * * * * * SYSMON * * * * * * * WLMADM * * N * * N * 20 record(s) selected.
刪除資料庫
使用 Drop 命令,您可以從例項資料庫目錄中刪除我們的資料庫。此命令可以刪除其所有物件、表、空間、容器和關聯檔案。
語法:[從例項中刪除任何資料庫]
db2 drop database <db_name>
示例: [從例項中刪除名為“six”的資料庫]
db2 drop database six
輸出
DB20000I The DROP DATABASE command completed successfully
DB2緩衝池
本章介紹資料庫中的緩衝池。

簡介
緩衝池是資料庫管理器分配的主記憶體空間的一部分。緩衝池的目的是快取來自磁碟的表和索引資料。所有資料庫都有自己的緩衝池。在建立新資料庫時會建立一個預設緩衝池,稱為“IBMDEFAULTBP”。根據使用者需求,可以建立多個緩衝池。在緩衝池中,資料庫管理器將錶行資料作為頁面存放。此頁面將保留在緩衝池中,直到資料庫關閉或該空間被新資料寫入為止。緩衝池中已更新資料但尚未寫入磁碟的頁面稱為“髒”頁面。在將緩衝池中更新的資料頁面寫入磁碟後,緩衝池就可以接收其他資料了。
表空間和緩衝池之間的關係
每個表空間都與資料庫中的特定緩衝池相關聯。一個表空間與一個緩衝池相關聯。緩衝池和表空間的大小必須相同。多個緩衝池允許您配置資料庫使用的記憶體,以提高其整體效能。
緩衝池大小
使用“CREATE DATABASE”命令設定緩衝池頁面大小時。如果未指定頁面大小,則將採用預設頁面大小,即 4KB。建立緩衝池後,以後無法修改頁面大小。
列出當前資料庫目錄中可用的緩衝池
語法: [以下語法顯示資料庫中所有可用的緩衝池]
db2 select * from syscat.bufferpools
示例: [檢視當前資料庫中可用的緩衝池]
db2 select * from syscat.bufferpools
輸出
BPNAME BUFFERPOOLID DBPGNAME NPAGES PAGESIZE ESTORE NUMBLOCKPAGES BLOCKSIZE NGNAME ------------------------------------------------------------ IBMDEFAULTBP 1 - -2 4096 N 0 0 - 1 record(s) selected.
建立緩衝池
要為資料庫伺服器建立新的緩衝池,需要兩個引數,即“緩衝池名稱”和“頁面大小”。執行以下查詢以建立新的緩衝池。
語法: [在以下語法中,‘bp_name’表示緩衝池名稱,‘size’表示需要為緩衝池宣告的頁面大小 (4K、8K、16K、32K)]
db2 create bufferpool <bp_name> pagesize <size>
示例: [建立名為“bpnew”且大小為“8192”(8Kb)的新緩衝池。]
db2 create bufferpool bpnew pagesize 8192
輸出
DB20000I The SQL command completed successfully.
刪除緩衝池
刪除緩衝池之前,需要檢查是否有表空間分配給它。
語法: [刪除緩衝池]
drop bufferpool <bp_name>
示例: [刪除名為“bpnew”的緩衝池]
db2 drop bufferpool bpnew
輸出
DB20000I The SQL command completed successfully.
DB2表空間
本章詳細描述表空間。

簡介
表空間是一種儲存結構,它包含表、索引、大物件和長資料。它可用於將資料庫中的資料組織到與資料儲存在系統上的位置相關的邏輯儲存組中。這些表空間儲存在資料庫分割槽組中。
表空間在資料庫中的優勢
表空間在資料庫中以多種方式提供益處,如下所示
可恢復性: 表空間使備份和恢復操作更加方便。使用單個命令,您可以備份或恢復表空間中所有資料庫物件。
自動儲存管理: 資料庫管理器根據需要建立和擴充套件容器。
記憶體利用率: 單個緩衝池可以管理多個表空間。您可以將臨時表空間分配到其自己的緩衝池,以提高排序或聯接等活動的效能。
容器
表空間包含一個或多個容器。容器可以是目錄名稱、裝置名稱或檔名。在資料庫中,單個表空間可以在同一物理儲存裝置上擁有多個容器。如果表空間是使用自動儲存表空間選項建立的,則容器的建立和管理將由資料庫管理器自動處理。如果未使用自動儲存表空間選項建立它,則需要自行定義和管理容器。
預設表空間
建立新資料庫時,資料庫管理器會為資料庫建立一些預設表空間。這些表空間用作使用者和臨時資料的儲存位置。每個資料庫至少必須包含三個表空間,如下所示
- 目錄表空間
- 使用者表空間
- 臨時表空間
目錄表空間: 它包含資料庫的系統目錄表。它名為 SYSCATSPACE,不能刪除。
使用者表空間: 此表空間包含使用者定義的表。在資料庫中,我們有一個預設的使用者表空間,名為 USERSPACE1。如果在建立表時未為表指定使用者定義的表空間,則資料庫管理器將為您選擇預設的使用者表空間。
臨時表空間: 臨時表空間包含臨時表資料。此表空間包含系統臨時表空間或使用者臨時表空間。
系統臨時表空間儲存資料庫管理器在執行排序或聯接等操作時所需的臨時資料。資料庫必須至少有一個系統臨時表空間,其名稱為 TEMPSPACE1。它在建立資料庫時建立。使用者臨時表空間儲存來自表的臨時資料。它使用 DECLARE GLOBAL TEMPORARY TABLE 或 CREATE GLOBAL TEMPORARY TABLE 語句建立。此臨時表空間不是在資料庫建立時預設建立的。
表空間和儲存管理
可以以不同的方式設定表空間,具體取決於您希望如何使用它們。您可以設定作業系統以管理表空間分配,您可以讓資料庫管理器分配空間,也可以選擇為您的資料自動分配表空間。
以下三種類型的託管空間可用
系統管理空間 (SMS): 作業系統的檔案系統管理器分配和管理儲存表的空間。儲存空間按需分配。此模型包含表示資料庫物件的檔案。此表空間型別在版本 10.1 中已棄用,用於使用者定義的表空間,但目錄和臨時表空間除外。
資料庫管理空間 (DMS): 資料庫伺服器控制儲存空間。儲存空間根據您在建立 DMS 表空間時指定的容器定義預先分配到檔案系統上。從版本 10.1 修訂包 1 開始,它已棄用,用於使用者定義的表空間,但系統表空間和臨時表空間除外。
自動儲存表空間: 資料庫伺服器可以自動管理。資料庫伺服器根據資料庫上的資料建立和擴充套件容器。使用自動儲存管理,無需提供容器定義。資料庫伺服器負責建立和擴充套件容器,以利用分配給資料庫的儲存。如果將儲存空間新增到儲存組,則當現有容器達到其最大容量時,將自動建立新的容器。如果要立即使用新新增的儲存,可以重新平衡表空間。
頁面、表和表空間大小
對於臨時 DMS 和自動儲存表空間,您為資料庫選擇的頁面大小決定了表空間大小的最大限制。對於表 SMS 和臨時自動儲存表空間,頁面大小會限制表本身的大小。頁面大小可以是 4kb、8kb、16kb 或 32kb。
表空間型別 | 4K 頁面大小限制 | 8K 頁面大小限制 | 16K 頁面大小限制 | 32K 頁面大小限制 |
---|---|---|---|---|
DMS、非臨時自動儲存表空間常規 | 64G | 128G | 256G | 512G |
DMS、臨時 DMS 和非臨時自動儲存表空間大型 | 1892G | 16384G | 32768G | 65536G |
DB2儲存組
本章介紹資料庫儲存組。

簡介
儲存資料庫表或物件的一組儲存路徑,就是一個儲存組。您可以將表空間分配到儲存組。建立資料庫時,所有表空間都採用預設儲存組。資料庫的預設儲存組為“IBMSTOGROUP”。建立新資料庫時,如果在“CREATE DATABASE”命令末尾傳遞“AUTOMATIC STOGROUP NO”引數,則預設儲存組處於活動狀態。資料庫沒有任何預設儲存組。
列出儲存組
您可以列出資料庫中的所有儲存組。
語法: [檢視當前資料庫中可用的儲存組列表]
db2 select * from syscat.stogroups
示例: [檢視當前資料庫中可用的儲存組列表]
db2 select * from syscat.stogroups
建立儲存組
以下是在資料庫中建立儲存組的語法
語法: [建立新的儲存組。‘stogropu_name’表示新儲存組的名稱,‘path’表示資料(表)儲存的位置]
db2 create stogroupon ‘path’
示例: [在路徑“data1”資料夾上建立一個新的儲存組“stg1”]
db2 create stogroup stg1 on ‘/data1’
輸出
DB20000I The SQL command completed succesfully
使用儲存組建立表空間
以下是如何使用儲存組建立表空間
語法: [使用現有儲存組建立新的表空間]
db2 create tablespace <tablespace_name> using stogroup <stogroup_name>
示例: [使用現有儲存組“stg1”建立一個名為“ts1”的新表空間]
db2 create tablespace ts1 using stogroup stg1
輸出
DB20000I The SQL command completed succesfully
更改儲存組
您可以使用以下語法更改儲存組的位置
語法: [將儲存組從舊位置移到新位置]
db2 alter stogroupadd ‘location’, ‘location’
示例: [將名為“sg1”的儲存組的位置路徑從舊位置修改為新位置]
db2 alter stogroup sg1 add ‘/path/data3’, ‘/path/data4’
刪除儲存組的資料夾路徑
在刪除儲存組的資料夾路徑之前,您可以使用 alter 命令為儲存組新增新位置。
語法: [從儲存組位置刪除舊路徑]
db2 alter stogroupdrop ‘/path’
示例: [從“stg1”刪除儲存組位置]
db2 alter stogroup stg1 drop ‘/path/data1’
重新平衡表空間
當我們為儲存組或表空間建立新資料夾或表空間已滿時,需要重新平衡表空間,同時在資料庫上進行事務處理。重新平衡會使用新的儲存組更新資料庫配置檔案。
語法: [將表空間從舊儲存組路徑重新平衡到新的儲存組]
db2 alter tablspace <ts_name> rebalance
示例: [重新平衡]
db2 alter tablespace ts1 rebalance
重新命名儲存組
語法: [修改現有儲存名稱的名稱]
db2 rename stogroup <old_stg_name> to <new_stg_name>
示例: [將儲存組的名稱從“sg1”修改為新名稱“sgroup1”]
db2 rename stogroup sg1 to sgroup1
刪除儲存組
步驟 1: 在刪除任何儲存組之前,您可以為表空間分配一些不同的儲存組。
語法: [為表空間分配另一個儲存組。]
db2 alter tablspace <ts_name> using stogroup <another sto_group_name>
示例: [將表空間“ts1”從一箇舊儲存組更改為名為“sg2”的新儲存組]
db2 alter tablespace ts1 using stogroup sg2
步驟 2
語法: [刪除現有儲存組]
db2 drop stogorup <stogroup_name>
示例: [從資料庫中刪除儲存組“stg1”]
db2 drop stogroup stg1
DB2模式
本章介紹並描述模式的概念。
簡介
模式是資料庫中邏輯分類的命名物件的集合。
在資料庫中,您不能建立多個同名的資料庫物件。為此,模式提供了一個組環境。您可以在資料庫中建立多個模式,並且可以使用不同的模式組建立多個同名的資料庫物件。

模式可以包含表、函式、索引、表空間、過程、觸發器等。例如,您為“employee”資料庫建立了兩個名為“Professional”和“Personal”的不同模式。可以使用相同的名稱“Employee”建立兩個不同的表。在這種環境中,一個表包含專業資訊,另一個表包含員工的個人資訊。儘管有兩個同名的表,但它們有兩個不同的模式“Personal”和“Professional”。因此,使用者可以在不遇到任何問題的情況下使用這兩個表。當對錶的命名有約束時,此功能非常有用。
讓我們看看一些與模式相關的命令。
獲取當前活動模式
語法
db2 get schema
示例:[獲取當前資料庫模式]
db2 get schema
將另一個模式設定為當前環境
語法
db2 set schema=<schema_name>
示例:[將‘schema1’安排到當前例項環境]
db2 set schema=schema1
建立新模式
語法:[使用授權使用者 ID 建立新模式]
db2 create schema <schema_name> authroization <inst_user>
示例:[使用‘db2inst2’授權建立“schema1”模式]
db2 create schema schema1 authorization db2inst2
練習
讓我們建立兩個名稱相同但模式不同的表。在這裡,您將使用兩個不同的模式建立員工表,一個用於個人資訊,另一個用於專業資訊。
步驟 1:建立兩個模式。
模式 1:[建立名為 professional 的模式]
db2 create schema professional authorization db2inst2
模式 2:[建立名為 personal 的模式]
db2 create schema personal authorization db2inst2
步驟 2:為員工詳細資訊建立兩個同名的表
表 1:professional.employee
[使用模式名稱‘professional’在資料庫中建立一個新表‘employee’]
db2 create table professional.employee(id number, name varchar(20), profession varchar(20), join_date date, salary number);
表 2:personal.employee
[在同一資料庫中使用模式名稱‘personal’建立一個新表‘employee’]
db2 create table personal.employee(id number, name varchar(20), d_birth date, phone bigint, address varchar(200));
執行這些步驟後,您將獲得兩個名稱相同(’employee’)但模式不同的表。
DB2 資料型別
本章介紹 DB2 中使用的各種資料型別。
簡介
在 DB2 資料庫表中,每一列都有自己的資料型別,具體取決於開發人員的要求。資料型別指的是表列中值的型別和範圍。
內建資料型別
- 日期時間
- TIME:表示一天中的時間,以小時、分鐘和秒錶示。
- TIMESTAMP:表示日期和時間的七個值,以年、月、日、小時、分鐘、秒和微秒的形式表示。
- DATE:表示一天的日期,以年、月、日三種部分表示。
- 字串
- 字元
- CHAR(固定長度):固定長度的字元字串。
- 可變長度
- VARCHAR:可變長度的字元字串。
- CLOB:大型物件字串,當字元字串可能超過 VARCHAR 資料型別的限制時使用。
- 圖形
- GRAPHIC
- 固定長度:包含雙位元組字元的固定長度圖形字串
- 可變長度
- VARGRAPHIC:包含雙位元組字元的可變字元圖形字串。
- DBCLOB:大型物件型別
- 二進位制
- BLOB(可變長度):大型物件中的二進位制字串
- BOOLEAN:以 0 和 1 的形式表示。
- 有符號數值
- 精確
- 二進位制整數
- SMALLINT [16BIT]:使用它可以將小整數插入列中
- INTEGER [32BIT]:使用它可以將大整數插入列中
- BIGINT [64BIT]:使用它可以將更大的整數插入列中
- 十進位制
- DECIMAL(打包)
- DECFLOAT(十進位制浮點數):使用它可以插入十進位制浮點數
- 近似
- 浮點數
- REAL(單精度):使用此資料型別,可以插入單精度浮點數。
- DOUBLE(雙精度):使用此資料型別,可以插入雙精度浮點數。
- 可擴充套件標記語言
- XML:可以將 XML 資料儲存到此資料型別列中。
DB2 表
表是由資料庫管理器維護的邏輯結構。在一個表中,每個垂直塊稱為列(元組),每個水平塊稱為行(實體)。以列和行的形式儲存的資料集合稱為表。在表中,每一列都有不同的資料型別。表用於儲存持久資料。
表的型別
- 基本表:它們儲存持久資料。基本表有不同種類,包括
- 常規表:通用表,帶索引的普通表是通用表。
- 多維聚簇表 (MDC):此類表在多個鍵上進行物理聚簇,用於維護大型資料庫環境。這些型別的表在 DB2 pureScale 中不受支援。
- 插入時間聚簇表 (ITC):類似於 MDC 表,行按插入表中的時間進行聚簇。它們可以是分割槽表。它們也不支援 pureScale 環境。
- 範圍聚簇表 (RCT):這些型別的表提供對資料的快速直接訪問。這些表作為順序聚簇實現。表中的每個記錄都有一個記錄 ID。這些型別的表用於資料與表中的一列或多列緊密聚簇的情況。此類表也不支援 DB2 pureScale。
- 分割槽表:這些型別的表用於資料組織模式,其中表資料被分成多個儲存物件。可以向分割槽表新增、附加和分離資料分割槽。您可以將來自一個表的多個數據分割槽儲存在一個表空間中。
- 時間表:資料庫中表的歷史記錄儲存在時間表中,例如先前執行的修改的詳細資訊。
- 臨時表:對於不同資料庫操作的臨時工作,需要使用臨時表。臨時表 (DGTTs) 不出現在系統目錄中,XML 列不能用於建立的臨時表。
- 物化查詢表:MQT 可用於提高查詢效能。這些型別的表由一個查詢定義,該查詢用於確定表中的資料。
建立表
以下語法建立表
語法:[建立新表]
db2 create table <schema_name>.<table_name> (column_name column_type....) in <tablespace_name>
示例:我們建立一個表來儲存“employee”詳細資訊在“professional”模式中。此表具有“id、name、jobrole、joindate、salary”欄位,並且此表資料將儲存在表空間“ts1”中。
db2 create table professional.employee(id int, name varchar(50),jobrole varchar(30),joindate date, salary double) in ts1
輸出
DB20000I The SQL command completed successfully.
列出表詳細資訊
以下語法用於列出表詳細資訊
語法:[檢視已建立的帶模式的表的列表]
db2 select tabname, tabschema, tbspace from syscat.tables
示例:[檢視當前資料庫中的表列表]
db2 select tabname, tabschema, tbspace from syscat.tables
輸出
TABNAME TABSCHEMA TBSPACE ------------ ------------- -------- EMPLOYEE PROFESSIONAL TS1 1 record(s) selected.
列出表中的列
以下語法列出表中的列
語法:[查看錶的列和資料型別]
db2 describe table <table_name>
示例:[查看錶‘employee’的列和資料型別]
db2 describe table professional.employee
輸出
Data type Column Column name schema Data type name Length Scale Nulls ------ ----- --------- ----------------- --------- ----- ------ ID SYSIBM INTEGER 4 0 Yes NAME SYSIBM VARCHAR 50 0 Yes JOBROLE SYSIBM VARCHAR 30 0 Yes JOINDATE SYSIBM DATE 4 0 Yes SALARY SYSIBM DOUBLE 8 0 Yes 5 record(s) selected.
隱藏列
您可以隱藏表的整列。如果您呼叫“select * from”查詢,則隱藏的列不會在結果表中返回。當您將資料插入表時,“INSERT”語句(不帶列列表)不會期望任何隱式隱藏列的值。這些型別的列在物化查詢表中被高度引用。這些型別的列不支援建立臨時表。
建立帶隱藏列的表
以下語法建立帶隱藏列的表
語法:[建立帶隱藏列的表]
db2 create table <tab_name> (col1 datatype,col2 datatype implicitly hidden)
示例:[建立具有隱藏列‘phone’的‘customer’表]
db2 create table professional.customer(custid integer not null, fullname varchar(100), phone char(10) implicitly hidden)
在表中插入資料值
以下語法在表中插入值
語法:[將值插入表中]
db2 insert into <tab_name>(col1,col2,...) values(val1,val2,..)
示例:[在‘customer’表中插入值]
db2 insert into professional.customer(custid, fullname, phone) values(100,'ravi','9898989') db2 insert into professional.customer(custid, fullname, phone) values(101,'krathi','87996659') db2 insert into professional.customer(custid, fullname, phone) values(102,'gopal','768678687')
輸出
DB20000I The SQL command completed successfully.
從表中檢索值
以下語法從表中檢索值
語法:[從表中檢索值]
db2 select * from <tab_name>
示例:[從‘customer’表中檢索值]
db2 select * from professional.customer
輸出
CUSTID FULLNAME ----------- ------------------------ 100 ravi 101 krathi 102 gopal 3 record(s) selected.
從表中檢索值,包括隱藏列
以下語法從選定的列中檢索值
語法:[從表中檢索選定的隱藏列值]
db2 select col1,col2,col3 from <tab_name>
示例:[從表中檢索選定列值的結果]
db2 select custid,fullname,phone from professional.customer
輸出
CUSTID FULLNAME PHONE ------- --------- ------------ 100 ravi 9898989 101 krathi 87996659 102 gopal 768678687 3 record(s) selected.
如果要檢視隱藏列中的資料,需要執行“DESCRIBE”命令。
語法:
db2 describe table <table_name> show detail
示例
db2 describe table professional.customer show detail
輸出
Column name Data type schema Data type name Column column Partitionkey code Length Scale Nulls number sequence page Hidden Default --------------- -------------------- --------------- -------- ---- ---- -------- ---------- ------------- -------- ----------- ------ --- CUSTID SYSIBM INTEGER 4 0 No 0 0 0 No FULLNAME SYSIBM VARCHAR 100 0 Yes 1 0 1208 No PHONE SYSIBM CHARACTER 10 0 Yes 2 0 1208 Implicitly 3 record(s) selected.
更改表列的型別
您可以使用以下“alter”命令修改表結構
語法:
db2 alter table <tab_name> alter column <col_name> set data type <data_type>
示例:[將表 employee 中列“id”的資料型別從“int”修改為“bigint”]
db2 alter table professional.employee alter column id set data type bigint
輸出:
DB20000I The SQL command completed successfully.
更改列名
您可以更改列名,如下所示
語法:[將表的列名從舊名稱修改為新名稱]
db2 alter table <tab_name> rename column <old_name> to <new_name>
示例:[將“customers”表中的列名從“fullname”修改為“custname”。]
db2 alter table professional.customer rename column fullname to custname
刪除表
要刪除任何表,需要使用以下“DROP”命令
語法:
db2 drop table <tab_name>
示例:[從資料庫中刪除 customer 表]
db2 drop table professional.customers
要刪除表的整個層次結構(包括觸發器和關係),需要使用“DROP TABLE HIERARCHY”命令。
語法:
db2 drop table hierarchy <tab_name>
示例:[刪除表‘customer’的整個層次結構]
db2 drop table hierarchy professional.customers
DB2 別名
本章介紹如何建立別名以及如何使用資料庫物件的別名檢索資料。
簡介
別名是資料庫物件的替代名稱。它可以用來引用資料庫物件。可以說,它是資料庫物件的暱稱。為物件定義別名是為了縮短其名稱,從而減少查詢大小並提高查詢的可讀性。
建立資料庫物件別名
您可以建立資料庫物件別名,如下所示
語法:
db2 create alias <alias_name> for <table_name>
示例:為表“professional.customer”表建立別名
db2 create alias pro_cust for professional.customer
如果您傳遞“SELECT * FROM PRO_CUST”或“SELECT * FROM PROFESSIONAL.CUSTOMER”,資料庫伺服器將顯示相同的結果。
語法:[直接使用模式名稱從表中檢索值]
db2 select * from <schema_name>.<table_name>
示例:[從 customer 表中檢索值]
db2 select * from professional.customer
輸出
CUSTID FULLNAME PHONE ------- --------- ------------ 100 ravi 9898989 101 krathi 87996659 102 gopal 768678687 3 record(s) selected.
使用表的別名檢索值
您可以使用別名從資料庫中檢索值,如下所示
語法:[透過呼叫表的別名從表中檢索值]
db2 select * from <alias_name>
示例:[使用別名從 customer 表中檢索值]
db2 select * from pro_cust
輸出
CUSTID FULLNAME PHONE ------- --------- ------------ 100 ravi 9898989 101 krathi 87996659 102 gopal 768678687 3 record(s) selected.
DB2 約束
本章介紹資料庫中的各種約束。
簡介
為了強制資料庫完整性,定義了一組規則,稱為約束。約束要麼允許要麼禁止列中的值。
在即時資料庫活動中,資料應在某些限制下新增。例如,在銷售資料庫中,銷售 ID 或交易 ID 應該唯一。約束型別有
- NOT NULL
- 唯一
- 主鍵
- 外部索引鍵
- 檢查
- 資訊性
約束僅與表相關聯。它們僅應用於特定表。它們在表建立時定義並應用於表。
每個約束的說明
NOT NULL
這是一條規則,用於禁止表中一個或多個列中的空值。
語法
db2 create table <table_name>(col_name col_type not null,..)
示例:[建立銷售表,其中包含四列(id、itemname、qty、price),在此向所有列新增“not null”約束,以避免在表中形成任何空單元格。]
db2 create table shopper.sales(id bigint not null, itemname varchar(40) not null, qty int not null,price double not null)
在表中插入 NOT NULL 值
您可以在表中插入值,如下所示
示例:[錯誤查詢]
db2 insert into shopper.sales(id,itemname,qty) values(1,'raagi',12)
輸出:[正確查詢]
DB21034E The command was processed as an SQL statement because it was not a valid Command Line Processor command. During SQL processing it returned: SQL0407N Assignment of a NULL value to a NOT NULL column "TBSPACEID=5, TABLEID=4, COLNO=3" is not allowed. SQLSTATE=23502
示例:[正確查詢]
db2 insert into shopper.sales(id,itemname,qty,price) values(1,'raagi',12, 120.00) db2 insert into shopper.sales(id,itemname,qty,price) values(1,'raagi',12, 120.00)
輸出
DB20000I The SQL command completed successfully.
唯一約束
使用這些約束,您可以唯一地設定列的值。為此,在建立表時,唯一約束與“not null”約束一起宣告。
語法
db2 create table <tab_name>(<col> <col_type> not null unique, ...)
示例
db2 create table shopper.sales1(id bigint not null unique, itemname varchar(40) not null, qty int not null,price double not null)
將值插入表中
示例:插入四行不同的行,其唯一 ID 為 1、2、3 和 4。
db2 insert into shopper.sales1(id, itemname, qty, price) values(1, 'sweet', 100, 89) db2 insert into shopper.sales1(id, itemname, qty, price) values(2, 'choco', 50, 60) db2 insert into shopper.sales1(id, itemname, qty, price) values(3, 'butter', 30, 40) db2 insert into shopper.sales1(id, itemname, qty, price) values(4, 'milk', 1000, 12)
示例:插入一個新的行,其“id”值為 3
db2 insert into shopper.sales1(id, itemname, qty, price) values(3, 'cheese', 60, 80)
輸出:當您嘗試使用已存在的 id 值插入新行時,它將顯示此結果
DB21034E The command was processed as an SQL statement because it was not a valid Command Line Processor command. During SQL processing it returned: SQL0803N One or more values in the INSERT statement, UPDATE statement, or foreign key update caused by a DELETE statement are not valid because the primary key, unique constraint or unique index identified by "1" constrains table "SHOPPER.SALES1" from having duplicate values for the index key. SQLSTATE=23505
主鍵
類似於唯一約束,您可以使用“主鍵”和“外部索引鍵”約束來宣告多個表之間的關係。
語法
db2 create table <tab_name>(,.., primary key ())
示例:建立名為“salesboys”的表,並將“sid”作為主鍵
db2 create table shopper.salesboys(sid int not null, name varchar(40) not null, salary double not null, constraint pk_boy_id primary key (sid))
外部索引鍵
外部索引鍵是表中的一組列,這些列需要與另一個表中某一行的至少一個主鍵匹配。它是一種參照約束或參照完整性約束。它是一個關於一個或多個表中多列值的邏輯規則。它使表之間建立必要的關係。
之前,您建立了一個名為“shopper.salesboys”的表。對於此表,“sid”是主鍵。現在您正在建立一個新的表,該表包含銷售員的個人詳細資訊,具有不同的模式,名為“employee”和表名為“salesboys”。在這種情況下,“sid”是外部索引鍵。
語法
db2 create table <tab_name>(<col> <col_type>,constraint <const_name> foreign key (<col_name>) reference <ref_table> (<ref_col>)
示例:[建立名為“salesboys”的表,其中包含外部索引鍵列“sid”]
db2 create table employee.salesboys( sid int, name varchar(30) not null, phone int not null, constraint fk_boy_id foreign key (sid) references shopper.salesboys (sid) on delete restrict )
示例:[將值插入主鍵表“shopper.salesboys”]
db2 insert into shopper.salesboys values(100,'raju',20000.00), (101,'kiran',15000.00), (102,'radha',10000.00), (103,'wali',20000.00), (104,'rayan',15000.00)
示例:[將值插入外部索引鍵表“employee.salesboys”[無錯誤]]
db2 insert into employee.salesboys values(100,'raju',98998976), (101,'kiran',98911176), (102,'radha',943245176), (103,'wali',89857330), (104,'rayan',89851130)
如果您輸入了一個未知數字,該數字未儲存在“shopper.salesboys”表中,它將顯示 SQL 錯誤。
示例:[錯誤執行]
db2 insert into employee.salesboys values(105,'rayan',89851130)
輸出
DB21034E The command was processed as an SQL statement because it was not a valid Command Line Processor command. During SQL processing it returned: SQL0530N The insert or update value of the FOREIGN KEY "EMPLOYEE.SALESBOYS.FK_BOY_ID" is not equal to any value of the parent key of the parent table. SQLSTATE=23503
檢查約束
您需要使用此約束為表中的特定列新增條件限制。
語法
db2 create table( primary key ( ), constraint check (condition or condition) )
示例:[建立具有約束值的emp1表]
db2 create table empl (id smallint not null, name varchar(9), dept smallint check (dept between 10 and 100), job char(5) check (job in ('sales', 'mgr', 'clerk')), hiredate date, salary decimal(7,2), comm decimal(7,2), primary key (id), constraint yearsal check (year(hiredate) > 1986 or salary > 40500) )
插入值
您可以如下所示將值插入表中
db2 insert into empl values (1,'lee', 15, 'mgr', '1985-01-01' , 40000.00, 1000.00)
刪除約束
讓我們看看刪除各種約束的語法。
刪除唯一約束
語法
db2 alter table <tab_name> drop unique <const_name>
刪除主鍵
語法
db2 alter table <tab_name> drop primary key
刪除檢查約束
語法
db2 alter table <tab_name> drop check <check_const_name>
刪除外部索引鍵
語法
db2 alter table <tab_name> drop foreigh key <foreign_key_name>
DB2 索引
本章介紹索引、索引型別、建立和刪除索引。
簡介
索引是一組指標,可以引用表中的行、MDC 或 ITC 表中的塊、XML 儲存物件中的 XML 資料,這些資料按一個或多個鍵的值進行邏輯排序。它是在 DB2 表列上建立的,以加快查詢的資料訪問速度,並有效地對資料進行聚類和分割槽。它還可以提高檢視上操作的效能。具有唯一索引的表可以具有具有唯一鍵的行。根據表的需要,您可以採用不同型別的索引。
索引型別
- 唯一索引和非唯一索引
- 聚集索引和非聚集索引
建立索引
要建立唯一索引,請使用以下語法
語法
db2 create unique index <index_name> on <table_name>(<unique_column>) include (<column_names..>)
示例:為“shopper.sales1”表建立索引。
db2 create unique index sales1_indx on shopper.sales1(id) include (itemname)
刪除索引
要刪除索引,請使用以下語法
語法
db2 create unique index <index_name> on <table_name>(<unique_column>) include (<column_names..>)
示例
db2 drop index sales_index
DB2 觸發器
本章介紹觸發器、觸發器型別、觸發器的建立和刪除。
簡介
觸發器是一組操作,這些操作是為了響應資料庫中指定表上的 INSERT、UPDATE 或 DELETE 操作而執行的。觸發器一次儲存在資料庫中。它們處理資料的治理。它們可以在多個應用程式之間訪問和共享。使用觸發器的優點是,如果應用程式需要進行任何更改,則在觸發器處進行;而不是更改每個訪問觸發器的應用程式。觸發器易於維護,並且它們可以加快應用程式開發速度。觸發器使用 SQL 語句“CREATE TRIGGER”定義。
觸發器型別
觸發器有兩種型別
1. BEFORE 觸發器
它們在任何 SQL 操作之前執行。
2. AFTER 觸發器
它們在任何 SQL 操作之後執行。
建立 BEFORE 觸發器
讓我們看看如何建立一系列觸發器
語法
db2 create sequence <seq_name>
示例:為表 shopper.sales1 建立一系列觸發器
db2 create sequence sales1_seq as int start with 1 increment by 1
語法
db2 create trigger <trigger_name> no cascade before insert on <table_name> referencing new as <table_object> for each row set <table_object>.<col_name>=nextval for <sequence_name>
示例:為 shopper.sales1 表建立觸發器,以自動插入主鍵編號
db2 create trigger sales1_trigger no cascade before insert on shopper.sales1 referencing new as obj for each row set obj.id=nextval for sales1_seq
現在嘗試插入任何值
db2 insert into shopper.sales1(itemname, qty, price) values('bicks', 100, 24.00)
從表中檢索值
讓我們看看如何從表中檢索值
語法
db2 select * from <tablename>
示例:
db2 select * from shopper.sales1
輸出:
ID ITEMNAME QTY ------- ------------ ---------- 3 bicks 100 2 bread 100 2 record(s) selected.
建立 AFTER 觸發器
讓我們看看如何建立 AFTER 觸發器
語法
db2 create trigger <trigger_name> no cascade before insert on <table_name> referencing new as <table_object> for each row set <table_object>.<col_name>=nextval for <sequence_name>
示例:[插入和檢索值]
db2 create trigger sales1_tri_after after insert on shopper.sales1 for each row mode db2sql begin atomic update shopper.sales1 set price=qty*price; end
輸出
//inseting values in shopper.sales1 db2 insert into shopper.sales1(itemname,qty,price) values('chiken',100,124.00) //output ID ITEMNAME QTY PRICE ----- -------------- ----------- ----------- 3 bicks 100 2400.00 4 chiken 100 12400.00 2 bread 100 2400.00 3 record(s) selected.
刪除觸發器
以下是資料庫觸發器的刪除方式
語法
db2 drop trigger <trigger_name>
示例
db2 drop trigger slaes1_trigger
DB2 - 序列
本章向您介紹序列的概念、序列的建立、序列的檢視以及序列的刪除。
簡介
序列是一個軟體函式,它以升序或降序生成整數,在一定範圍內,用於生成主鍵並在表之間協調其他鍵。您可以使用序列來獲取整數,例如 employee_id 或 transaction_id。序列可以支援 SMALLINT、BIGINT、INTEGER 和 DECIMAL 資料型別。序列可以在多個應用程式之間共享。序列的增量或減量與事務無關。
序列由 CREATE SEQUENCE 語句建立。
序列型別
有兩種型別的序列可用
NEXTVAL:它返回序列號的增量值。
PREVIOUS VALUE:它返回最近生成的值。
序列引數
序列使用以下引數
資料型別:這是返回的增量值的資料型別。(SMALLINT、BIGINT、INTEGER、NUMBER、DOUBLE)
START WITH:序列開始的參考值。
MINVALUE:序列開始的最小值。
MAXVALUE:序列的最大值。
INCREMENT BY:序列增量的步長值。
序列迴圈:CYCLE 子句導致序列重複生成。序列生成是透過引用由先前序列生成儲存到資料庫中的返回值來進行的。
建立序列
您可以使用以下語法建立序列
語法
db2 create sequence <seq_name>
示例:[建立名為“sales1_seq”的新序列,並從 1 開始遞增值]
db2 create sequence sales1_seq as int start with 1 increment by 1
檢視序列
您可以使用以下語法檢視序列
語法
db2 value <previous/next> value for <seq_name>
示例:[檢視序列“sales1_seq”中先前更新值的列表]
db2 values previous value for sales1_seq
輸出
1 ----------- 4 1 record(s) selected.
刪除序列
要刪除序列,您需要使用“DROP SEQUENCE”
語法
db2 drop sequence <seq_name>>
示例:[從資料庫中刪除序列“sales1_seq”]
db2 drop sequence sales1_seq
輸出
DB20000I The SQL command completed successfully.
DB2 檢視
本章介紹檢視、建立、修改和刪除檢視。
簡介
檢視是表示儲存在表中的資料的另一種方式。它不是實際的表,也沒有任何永久儲存。檢視提供了一種檢視一個或多個表中的資料的方式。它是結果表的命名規範。
建立檢視
您可以使用以下語法建立檢視
語法
db2 create view <view_name> (<col_name>, <col_name1...) as select <cols>.. from <table_name>
示例:為 shopper.sales1 表建立檢視
db2 create view view_sales1(id, itemname, qty, price) as select id, itemname, qty, price from shopper.sales1
修改檢視
您可以使用以下語法修改檢視
語法
db2 alter view <view_name> alter <col_name> add scope <table_or_view_name>
示例:[向現有檢視“view_sales1”新增新表列]
db2 alter view view_sales1 alter id add scope shopper.sales1
刪除檢視
您可以使用以下語法刪除檢視
語法
db2 drop view <view_name>
示例
db2 drop view sales1_view
DB2與XML
本章介紹了 XML 與 DB2 的使用。
簡介
PureXML 功能允許您將格式良好的 XML 文件儲存在資料庫表中的列中。這些列具有 XML 資料庫。透過將 XML 資料儲存在 XML 列中,資料以其本機分層形式保留。儲存的 XML 資料可以透過 DB2 資料庫伺服器功能進行訪問和管理。以其本機分層形式儲存 XML 資料可以有效地搜尋、檢索和更新 XML。要更新 XML 資料中的值,您需要使用 XQuery、SQL 或兩者的組合。
建立用於儲存 XML 資料的資料庫和表
透過發出以下語法建立資料庫
語法
db2 create database xmldb
預設情況下,資料庫使用 UTF-8(UNICODE)程式碼集。啟用資料庫並連線到它
語法
db2 activate db <db_name> db2 connect to <db_name>
示例
db2 activate db xmldb db2 connect to xmldb
建立一個格式良好的 XML 檔案,並建立一個表,其列的資料型別為“XML”。必須在雙引號內傳遞包含 XML 語法的 SQL 查詢。
語法
db2 “create table <schema>.<table>(col <datatype>, col <xml datatype>)”
示例
db2 "create table shope.books(id bigint not null primary key, book XML)"
將 xml 值插入表中,格式良好的 XML 文件使用 SQL 語句“INSERT”插入 XML 型別列中。
語法
db2 “insert into <table_name> values(value1, value2)”
示例
db2 "insert into shope.books values(1000, '<catalog> <book> <author> Gambardella Matthew</author> <title>XML Developers Guide</title> <genre>Computer</genre> <price>44.95</price> <publish_date>2000-10-01</publish_date> <description>An in-depth look at creating application with XML</description> </book> </catalog>')"
更新表中的 XML 資料
您可以使用以下語法更新表中的 XML 資料
語法
db2 “update <table_name> set <column>=<value> where <column>=<value>”
示例
db2 "update shope.books set book='<catalog> <book> <author> Gambardella, Matthew</author> <title>XML Developers Guide</title> <genre>Computer</genre> <price>44.95</price> <publish_date>2000-10-01</publish_date> <description>An in-depth XML</description> </book> </catalog>' where id=1000"
DB2 - 備份和恢復
本章介紹資料庫的備份和恢復方法。

簡介
備份和恢復方法旨在確保我們資訊的安全。在命令列介面 (CLI) 或圖形使用者介面 (GUI) 中使用備份和恢復實用程式,您可以在 DB2 UDB 中備份或恢復資料庫的資料。
日誌記錄
日誌檔案包含錯誤日誌,用於從應用程式錯誤中恢復。日誌記錄資料庫更改的記錄。日誌記錄有兩種型別,如下所述
迴圈日誌記錄
這是一種方法,當需要分配新的事務日誌檔案時,舊的事務日誌會被覆蓋,從而擦除日誌檔案的序列並重復使用它們。您只能在離線模式下進行完全備份。即,資料庫必須離線才能進行完全備份。
歸檔日誌記錄
此模式支援使用稱為正向恢復的日誌檔案進行聯機備份和資料庫恢復。可以透過將 logretain 或 userexit 設定為 ON 來更改備份模式,從迴圈模式更改為歸檔模式。對於歸檔日誌記錄,備份設定資料庫需要一個 DB2 程序可寫入的目錄。
備份
使用Backup命令,您可以獲取整個資料庫的副本。此備份副本包括資料庫系統檔案、資料檔案、日誌檔案、控制資訊等。
您可以在離線和聯機工作時進行備份。
離線備份
語法:[列出活動應用程式/資料庫]
db2 list application
輸出
Auth Id Application Appl. Application Id DB # of Name Handle Name Agents -------- -------------- ---------- --------------------- ----------------------------------------- -------- ----- DB2INST1 db2bp 39 *LOCAL.db2inst1.140722043938 ONE 1
語法:[強制使用 app. Handled id 的應用程式]
db2 "force application (39)"
輸出
DB20000I The FORCE APPLICATION command completed successfully. DB21024I This command is asynchronous and may not be effective immediately.
語法:[終止資料庫連線]
db2 terminate
語法:[停用資料庫]
db2 deactivate database one
語法:[獲取備份檔案]
db2 backup database <db_name> to <location>
示例
db2 backup database one to /home/db2inst1/
輸出
Backup successful. The timestamp for this backup image is : 20140722105345
聯機備份
要啟動,您需要將模式從迴圈日誌記錄更改為歸檔日誌記錄。
語法:[檢查資料庫是否使用迴圈或歸檔日誌記錄]
db2 get db cfg for one | grep LOGARCH
輸出
First log archive method (LOGARCHMETH1) = OFF Archive compression for logarchmeth1 (LOGARCHCOMPR1) = OFF Options for logarchmeth1 (LOGARCHOPT1) = Second log archive method (LOGARCHMETH2) = OFF Archive compression for logarchmeth2 (LOGARCHCOMPR2) = OFF Options for logarchmeth2 (LOGARCHOPT2) =
在以上輸出中,突出顯示的值是關閉模式下的 [logarchmeth1 和 logarchmeth2],這意味著當前資料庫處於“迴圈日誌記錄”模式。如果您需要使用“歸檔日誌記錄”模式,則需要在配置檔案中存在的變數 logarchmeth1 和 logarchmeth2 中更改或新增路徑。
使用所需的歸檔目錄更新 logarchmeth1
語法:[建立目錄]
mkdir backup mkdir backup/ArchiveDest
語法:[為資料夾提供使用者許可權]
chown db2inst1:db2iadm1 backup/ArchiveDest
語法:[更新配置 LOGARCHMETH1]
db2 update database configuration for one using LOGARCHMETH1 'DISK:/home/db2inst1/backup/ArchiveDest'
您可以進行離線備份以確保安全,啟用資料庫並連線到它。
語法:[進行聯機備份]
db2 backup database one online to /home/db2inst1/onlinebackup/ compress include logs
輸出
db2 backup database one online to /home/db2inst1/onlinebackup/ compress include logs
使用以下命令驗證備份檔案
語法
db2ckbkp <location/backup file>
示例
db2ckbkp /home/db2inst1/ONE.0.db2inst1.DBPART000.20140722112743.001
列出備份檔案歷史記錄
語法
db2 list history backup all for one
輸出
List History File for one Number of matching file entries = 4 Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log Backup ID -- --- ------------------ ---- --- ------------ ------------ -------------- B D 20140722105345001 F D S0000000.LOG S0000000.LOG ------------------------------------------------------------ ---------------- Contains 4 tablespace(s): 00001 SYSCATSPACE 00002 USERSPACE1 00003 SYSTOOLSPACE 00004 TS1 ------------------------------------------------------------ ---------------- Comment: DB2 BACKUP ONE OFFLINE Start Time: 20140722105345 End Time: 20140722105347 Status: A ------------------------------------------------------------ ---------------- EID: 3 Location: /home/db2inst1 Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log Backup ID -- --- ------------------ ---- --- ------------ ------------ -------------- B D 20140722112239000 N S0000000.LOG S0000000.LOG ------------------------------------------------------------ ------------------------------------------------------------- ------------------------------- Comment: DB2 BACKUP ONE ONLINE Start Time: 20140722112239 End Time: 20140722112240 Status: A ------------------------------------------------------------ ---------------- EID: 4 Location: SQLCA Information sqlcaid : SQLCA sqlcabc: 136 sqlcode: -2413 sqlerrml: 0 sqlerrmc: sqlerrp : sqlubIni sqlerrd : (1) 0 (2) 0 (3) 0 (4) 0 (5) 0 (6) 0 sqlwarn : (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) sqlstate: Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log Backup ID -- --- ------------------ ---- --- ------------ ------------ -------------- B D 20140722112743001 F D S0000000.LOG S0000000.LOG ------------------------------------------------------------ ---------------- Contains 4 tablespace(s): 00001 SYSCATSPACE 00002 USERSPACE1 00003 SYSTOOLSPACE 00004 TS1 ------------------------------------------------------------- ---------------- Comment: DB2 BACKUP ONE OFFLINE Start Time: 20140722112743 End Time: 20140722112743 Status: A ------------------------------------------------------------- ---------------- EID: 5 Location: /home/db2inst1 Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log Backup ID ------------------------------------------------------------- ---------------- R D 20140722114519001 F 20140722112743 ------------------------------------------------------------ ---------------- Contains 4 tablespace(s): 00001 SYSCATSPACE 00002 USERSPACE1 00003 SYSTOOLSPACE 00004 TS1 ------------------------------------------------------------ ---------------- Comment: RESTORE ONE WITH RF Start Time: 20140722114519 End Time: 20140722115015 Status: A ------------------------------------------------------------ ---------------- EID: 6 Location:
從備份恢復資料庫
要從備份檔案恢復資料庫,您需要遵循給定的語法
語法
db2 restore database <db_name> from <location> taken at <timestamp>
示例
db2 restore database one from /home/db2inst1/ taken at 20140722112743
輸出
SQL2523W Warning! Restoring to an existing database that is different from the database on the backup image, but have matching names. The target database will be overwritten by the backup version. The Roll-forward recovery logs associated with the target database will be deleted. Do you want to continue ? (y/n) y DB20000I The RESTORE DATABASE command completed successfully.
將位於日誌目錄中的所有日誌正向滾動,包括磁碟驅動器故障之前的最新更改。
語法
db2 rollforward db <db_name> to end of logs and stop
示例
db2 rollforward db one to end of logs and stop
輸出
Rollforward Status Input database alias = one Number of members have returned status = 1 Member ID = 0 Rollforward status = not pending Next log file to be read = Log files processed = S0000000.LOG - S0000001.LOG Last committed transaction = 2014-07-22- 06.00.33.000000 UTC DB20000I The ROLLFORWARD command completed successfully.
DB2 - 資料庫安全
本章介紹資料庫安全。
簡介
DB2 資料庫和功能可以透過兩種不同的安全控制模式進行管理
- 身份驗證
- 授權
身份驗證
身份驗證是確認使用者登入僅符合其被授權執行的活動的許可權的過程。使用者身份驗證可以在作業系統級別或資料庫級別本身執行。透過使用生物識別身份驗證工具(例如視網膜和指紋)來防止駭客或惡意使用者訪問資料庫。
資料庫安全性可以從 db2 資料庫系統外部進行管理。以下是一些安全身份驗證流程的型別
- 基於作業系統身份驗證。
- 輕量級目錄訪問協議 (LDAP)
對於 DB2,安全服務作為單獨的產品是作業系統的一部分。對於身份驗證,它需要兩個不同的憑據,即使用者 ID 或使用者名稱和密碼。
授權
您可以訪問 DB2 資料庫系統內的 DB2 資料庫及其功能,該系統由 DB2 資料庫管理器管理。授權是由 DB2 資料庫管理器管理的過程。管理器獲取有關當前已認證使用者的的資訊,該資訊指示使用者可以執行或訪問哪些資料庫操作。
以下是授權可用的不同許可權方式
主要許可權:直接授予授權 ID。
輔助許可權:如果使用者是成員,則授予組和角色。
公共許可權:公開授予所有使用者。
上下文相關許可權:授予受信任的上下文角色。
可以根據以下類別向用戶授予授權
- 系統級授權
- 系統管理員 [SYSADM]
- 系統控制 [SYSCTRL]
- 系統維護 [SYSMAINT]
- 系統監控 [SYSMON]
許可權提供對例項級功能的控制。許可權提供給組許可權,以控制維護和授權操作。例如,資料庫和資料庫物件。
- 資料庫級授權
- 安全管理員 [SECADM]
- 資料庫管理員 [DBADM]
- 訪問控制 [ACCESSCTRL]
- 資料訪問 [DATAACCESS]
- SQL 管理員。[SQLADM]
- 工作負載管理管理員 [WLMADM]
- 解釋 [EXPLAIN]
許可權提供資料庫內的控制。資料庫的其他許可權包括 LDAD 和 CONNECT。
- 物件級授權:物件級授權涉及在對物件執行操作時驗證許可權。
- 基於內容的授權:使用者可以使用基於標籤的訪問控制 [LBAC] 對特定表上的各個行和列擁有讀寫訪問許可權。
DB2 表和配置檔案用於記錄與授權名稱關聯的許可權。當用戶嘗試訪問資料時,記錄的許可權會驗證以下許可權
- 使用者的授權名稱
- 使用者屬於哪個組
- 直接或間接授予使用者或組的哪些角色
- 透過受信任的上下文獲得的許可權。
在使用 SQL 語句時,DB2 授權模型會考慮以下許可權的組合
- 授予與 SQL 語句關聯的主要授權 ID 的許可權。
- 與 SQL 語句關聯的輔助授權 ID。
- 授予 PUBLIC
- 授予受信任的上下文角色。
例項級許可權
讓我們討論一些與例項相關的許可權。
系統管理許可權 (SYSADM)
它是例項級最高級別的管理許可權。擁有 SYSADM 許可權的使用者可以在例項內執行某些資料庫和資料庫管理器命令。擁有 SYSADM 許可權的使用者可以執行以下操作
- 升級資料庫
- 恢復資料庫
- 更新資料庫管理器配置檔案。
系統控制權限 (SYSCTRL)
它是系統控制權限中的最高級別。它提供對資料庫管理器例項及其資料庫執行維護和實用程式操作的許可權。這些操作可能會影響系統資源,但它們不允許直接訪問資料庫中的資料。
擁有 SYSCTRL 許可權的使用者可以執行以下操作
- 更新資料庫、節點或分散式連線服務 (DCS) 目錄
- 強制使用者退出系統級
- 建立或刪除資料庫級
- 建立、更改或刪除表空間
- 使用任何表空間
- 恢復資料庫
系統維護許可權 (SYSMAINT)
它是系統控制權限的第二級。它提供對資料庫管理器例項及其資料庫執行維護和實用程式操作的許可權。這些操作會影響系統資源,但不會允許直接訪問資料庫中的資料。此許可權專為使用者維護包含敏感資料的資料庫管理器例項中的資料庫而設計。
只有擁有 SYSMAINT 或更高級別系統許可權的使用者才能執行以下任務
- 備份
- 恢復備份
- 前滾恢復
- 啟動或停止例項
- 恢復表空間
- 執行 db2trc 命令
- 在例項級使用者或資料庫級使用者的情況下拍攝系統監控快照。
擁有 SYSMAINT 許可權的使用者可以執行以下任務
- 查詢表空間的狀態
- 更新日誌歷史檔案
- 表的重組
- 使用 RUNSTATS(收集目錄統計資訊)
系統監控許可權 (SYSMON)
使用此許可權,使用者可以監控或拍攝資料庫管理器例項或其資料庫的快照。SYSMON 許可權使使用者能夠執行以下任務
- GET DATABASE MANAGER MONITOR SWITCHES
- GET MONITOR SWITCHES
- GET SNAPSHOT
- LIST
- LIST ACTIVE DATABASES
- LIST APPLICATIONS
- LIST DATABASE PARTITION GROUPS
- LIST DCS APPLICATIONS
- LIST PACKAGES
- LIST TABLES
- LIST TABLESPACE CONTAINERS
- LIST TABLESPACES
- LIST UTITLITIES
- RESET MONITOR
- UPDATE MONITOR SWITCHES
資料庫許可權
每個資料庫許可權都持有授權 ID 以對資料庫執行某些操作。這些資料庫許可權與許可權不同。以下是某些資料庫許可權的列表
ACCESSCTRL:允許授予和撤銷所有物件許可權和資料庫許可權。
BINDADD:允許在資料庫中建立新的包。
CONNECT:允許連線到資料庫。
CREATETAB:允許在資料庫中建立新表。
CREATE_EXTERNAL_ROUTINE:允許建立應用程式和資料庫使用者可使用的過程。
DATAACCESS:允許訪問儲存在資料庫表中的資料。
DBADM:充當資料庫管理員。它授予除 ACCESSCTRL、DATAACCESS 和 SECADM 之外的所有其他資料庫許可權。
EXPLAIN:允許解釋查詢計劃,而無需他們持有訪問表中資料的許可權。
IMPLICIT_SCHEMA:允許使用者透過使用 CREATE 語句建立物件來隱式建立模式。
LOAD:允許將資料載入到表中。
QUIESCE_CONNECT:允許在資料庫處於靜止狀態(臨時停用)時訪問資料庫。
SECADM:允許充當資料庫的安全管理員。
SQLADM:允許監控和調整 SQL 語句。
WLMADM:允許充當工作負載管理員
許可權
SETSESSIONUSER
授權 ID 許可權涉及對授權 ID 的操作。只有一個許可權,稱為 SETSESSIONUSER 許可權。它可以授予使用者或組,並且它允許會話使用者將身份切換到已授予許可權的任何授權 ID。此許可權由使用者 SECADM 許可權授予。
模式許可權
這些許可權涉及資料庫中模式的操作。模式的所有者擁有所有操作模式物件(如表、檢視、索引、包、資料型別、函式、觸發器、過程和別名)的許可權。可以向用戶、組、角色或 PUBLIC 授予以下任何許可權
- CREATEIN:允許在模式內建立物件
- ALTERIN:允許修改模式內的物件。
DROPIN
這允許刪除模式內的物件。
表空間許可權
這些許可權涉及資料庫中表空間的操作。使用者可以被授予表空間的 USE 許可權。然後,這些許可權允許他們在表空間內建立表。許可權所有者可以在建立表空間時使用 WITH GRANT OPTION 命令授予表空間的 USE 許可權。而 SECADM 或 ACCESSCTRL 許可權擁有對錶空間的 USE 許可權。
表和檢視許可權
使用者必須對資料庫具有 CONNECT 許可權才能使用表和檢視許可權。表和檢視的許可權如下所示
CONTROL
它提供表或檢視的所有許可權,包括刪除和授予、撤銷對使用者的各個表許可權。
ALTER
它允許使用者修改表。
DELETE
它允許使用者從表或檢視中刪除行。
INDEX
它允許使用者將行插入表或檢視。它還可以執行匯入實用程式。
REFERENCES
它允許使用者建立和刪除外部索引鍵。
SELECT
它允許使用者從表或檢視中檢索行。
UPDATE
它允許使用者更改表、檢視中的條目。
包許可權
使用者必須對資料庫具有 CONNECT 許可權。包是一個數據庫物件,其中包含資料庫管理器的資訊,以便以最有效的方式為特定應用程式訪問資料。
CONTROL
它為使用者提供重新繫結、刪除或執行包的許可權。擁有此許可權的使用者會被授予 BIND 和 EXECUTE 許可權。
BIND
它允許使用者繫結或重新繫結該包。
EXECUTE
允許執行包。
索引許可權
此許可權會自動接收索引上的 CONTROL 許可權。
序列許可權
序列會自動接收序列上的 USAGE 和 ALTER 許可權。
例程許可權
它涉及資料庫內例程(如函式、過程和方法)的操作。
DB2 - 角色
簡介
角色是一個數據庫物件,它對可以分配給使用者、組、PUBLIC 或其他角色的多個許可權進行分組,方法是使用 GRANT 語句。
角色限制
- 角色不能擁有資料庫物件。
- 在建立以下資料庫物件時,不會考慮授予組的許可權和角色。
- 包含靜態 SQL 的包
- 檢視
- 物化查詢表 (MQT)
- 觸發器
- SQL 例程
建立角色和授予角色成員資格
語法:[建立新角色]
db2 create role <role_name>
示例:[建立名為“sales”的新角色,以新增一些由某些使用者或組管理的表]
db2 create role sales
輸出
DB20000I The SQL command completed successfully.
將 DBADM 角色授予特定表
語法:[將角色的許可權授予表]
db2 grant select on table <table_name> to role <role_name>
示例:[將管理表“shope.books”的許可權新增到角色“sales”]
db2 grant select on table shope.books to role sales
輸出
DB20000I The SQL command completed successfully.
安全管理員將角色授予所需的使用者。(在使用此命令之前,需要建立使用者。)
語法:[將使用者新增到角色]
db2 grant role <role_name> to user <username>
示例:[將使用者“mastanvali”新增到角色“sales”]
db2 grant sales to user mastanvali
輸出
DB20000I The SQL command completed successfully.
角色層次結構
為了建立角色的層次結構,每個角色都被授予另一個角色的許可權/成員資格。
語法:[在此語法之前,建立一個名為“production”的新角色]
db2 grant role <roll_name> to role <role_name>
示例:[將角色“sales”的許可權提供給另一個角色“production”]
db2 grant sales to role production
DB2 - LDAP
簡介
LDAP 是輕量級目錄訪問協議。LDAP 是一種全域性目錄服務,行業標準協議,基於客戶端-伺服器模型,並在 TCP/IP 協議棧之上執行。LDAP 提供了一種連線、訪問、修改和搜尋網際網路目錄的工具。
LDAP 伺服器包含以目錄樹形式組織的資訊。客戶端要求伺服器提供資訊或對特定資訊執行某些操作。如果伺服器擁有所需的資訊,則會透過提供所需資訊來回復客戶端,或者將客戶端引導到另一臺伺服器以對所需資訊進行操作。然後,客戶端從另一臺伺服器獲取所需的資訊。
目錄的樹結構在所有參與的伺服器中保持一致。這是 LDAP 目錄服務的突出特點。因此,無論客戶端引用哪臺伺服器,客戶端始終都能以無錯誤的方式獲取所需的資訊。在這裡,我們使用 LDAP 對 IBM DB2 進行身份驗證,以取代作業系統身份驗證。
LDAP 有兩種型別
- 透明
- 外掛
讓我們看看如何配置透明 LDAP。
配置透明 LDAP
要開始配置透明 LDAP,您需要配置 LDAP 伺服器。
LDAP 伺服器配置
建立一個 SLAPD.conf 檔案,其中包含有關 LDAP 中使用者和組物件的所有資訊。安裝 LDAP 伺服器時,預設情況下會在您的機器上使用基本 LDAP 目錄樹進行配置。
下表顯示修改後的檔案配置。
程式碼框中用黃色突出顯示的文字表示以下內容
DBA 使用者 ID =“db2my1”,組 =“db1my1adm”,密碼 =“db2my1”管理員使用者 ID =“my1adm”,組 =“dbmy1ctl”。
# base dn: example.com dn: dc=example,dc=com dc: example o: example objectClass: organization objectClass: dcObject # pc box db dn: dc=db697,dc=example,dc=com dc: db697 o: db697 objectClass: organization objectClass: dcObject # # Group: dbadm # dn: cn=dbmy1adm,dc=db697,dc=example,dc=com cn: dbmy1adm objectClass: top objectClass: posixGroup gidNumber: 400 objectClass: groupOfNames member: uid=db2my1,cn=dbmy1adm,dc=db697,dc=example,dc=com memberUid: db2my1 # # User: db2 # dn: uid=db2my1,cn=dbmy1adm,dc=db697,dc=example,dc=com cn: db2my1 sn: db2my1 uid: db2my1 objectClass: top objectClass: inetOrgPerson objectClass: posixAccount uidNumber: 400 gidNumber: 400 loginShell: /bin/csh homeDirectory: /db2/db2my1 # # Group: db ctl # dn: cn=dbmy1ctl,dc=db697,dc=example,dc=com cn: dbmy1ctl objectClass: top objectClass: posixGroup gidNumber: 404 objectClass: groupOfNames member: uid=my1adm,cn=dbmy1adm,dc=db697,dc=example,dc=com memberUid: my1adm # # User: adm # dn: uid=my1adm,cn=dbmy1ctl,dc=db697,dc=example,dc=com cn: my1adm sn: my1adm uid: my1adm objectClass: top objectClass: inetOrgPerson objectClass: posixAccount uidNumber: 404 gidNumber: 404 loginShell: /bin/csh homeDirectory: /home/my1adm
將上述檔案儲存為“/var/lib/slapd.conf”,然後使用以下命令執行此檔案以將這些值新增到 LDAP 伺服器中。這是一個 Linux 命令;不是 db2 命令。
ldapadd r- -D ‘cn=Manager,dc=example,dc=com” –W –f /var/lib/slapd.conf
在 LDAP 伺服器上註冊 DB2 使用者和 DB2 組後,登入到您已安裝例項和資料庫的特定使用者。您需要配置 LDAP 客戶端以確認客戶端伺服器所在的位置,無論是遠端還是本地。
LDAP 客戶端配置
LDAP 客戶端配置儲存在檔案“ldap.conf”中。有兩個檔案可用於配置引數,一個是通用的,另一個是特定的。您應該在“/etc/ldap.conf”中找到第一個檔案,第二個檔案位於“/etc/openldap/ldap.conf”中。
以下資料在通用 LDAP 客戶端配置檔案中可用
# File: /etc/ldap.conf # The file contains lots of more entries and many of them # are comments. You show only the interesting values for now host localhost base dc=example,dc=com ldap_version 3 pam_password crypt pam_filter objectclass=posixAccount nss_map_attribute uniqueMember member nss_base_passwd dc=example,dc=com nss_base_shadow dc=example,dc=com nss_base_group dc=example,dc=com
您需要根據 DB2 配置更改伺服器和域資訊的位置。如果我們在同一系統中使用伺服器,則在“host”中將其指定為“localhost”,在“base”中,您可以配置在 LDAP 伺服器的“SLAPD.conf”檔案中提到的內容。
可插拔身份驗證模組 (PAM) 是用於身份驗證服務的 API。這是 LDAP 身份驗證與加密密碼和型別為 posixAccount 的特殊 LDAP 物件的通用介面。此型別的所有 LDAP 物件都表示具有可移植作業系統介面 (POSIX) 屬性的帳戶的抽象。
網路安全服務 (NSS) 是一組庫,用於支援安全啟用客戶端和伺服器應用程式的跨平臺開發。這包括 SSL、TLS、PKCS S/MIME 和其他安全標準等庫。
您需要為該介面指定基本 DN 和兩個其他對映屬性。OpenLDAP 客戶端配置檔案包含以下條目
host localhost base dc=example,dc=com
到目前為止,您只定義了 LDAP 伺服器的主機和基本 DN。
驗證 OpenLDAP 環境
配置完 LDAP 伺服器和 LDAP 客戶端後,驗證兩者之間的通訊。
步驟 1:檢查您的本地 LDAP 伺服器是否正在執行。使用以下命令
ps -ef | grep -i ldap
此命令應列出表示 LDAP 伺服器的 LDAP 守護程序
/usr/lib/openldap/slapd -h ldap:/// -u ldap -g ldap -o slp=on
這表示您的 LDAP 伺服器正在執行並正在等待來自客戶端的請求。如果先前命令沒有此類程序,則可以使用“rcldap”命令啟動 LDAP 伺服器。
rcldap start
伺服器啟動後,您可以透過發出以下命令在檔案“/var/log/messages/”中監控它。
tail –f /var/log/messages
使用 ldapsearch 測試與 LDAP 伺服器的連線
ldapsearch 命令開啟與 LDAP 伺服器的連線,繫結到它並執行搜尋查詢,可以使用特殊引數“-x”指定,使用 -x 引數連線到您的 LDAP 伺服器,使用簡單的身份驗證機制,而不是更復雜的機制,如簡單身份驗證和安全層 (SASL)
ldapsearch –x
LDAP 伺服器應回覆以下響應,其中包含 LDAP 資料交換格式 (LDIF) 中的所有 LDAP 條目。
# extended LDIF # # LDAPv3 # base <> with scope subtree # filter: (objectclass=*) # requesting: ALL # example.com dn: dc=example, dc=com dc: example o: example objectClass: organization objectClass: dcObject # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
配置 DB2
在使用 LDAP 伺服器和客戶端之後,您需要配置我們的 DB2 資料庫以與 LDAP 一起使用。讓我們討論一下,如何安裝和配置資料庫以使用我們的 LDAP 環境進行 DB2 使用者身份驗證過程。
配置 DB2 和 LDAP 互動外掛
IBM 提供了一個包含 DB2 的 LDAP 外掛的免費包。DB2 包為以下每個外掛包含三個 DB2 安全外掛
- 伺服器端身份驗證
- 客戶端身份驗證
- 組查詢
根據您的需求,您可以使用這三個外掛中的任何一個或全部。此外掛不支援某些使用者在 LDAP 中定義而其他使用者在作業系統中定義的環境。如果您決定使用 LDAP 外掛,則需要在 LDAP 伺服器中定義與資料庫關聯的所有使用者。相同的原則也適用於組外掛。
您必須決定哪些外掛對我們的系統是強制性的。客戶端身份驗證外掛用於使用者 ID 和在 CONNECT 或 ATTACH 語句中提供的密碼驗證在客戶端系統上發生的場景。因此,資料庫管理器配置引數 SRVCON_AUTH 或 AUTHENTICATION 需要設定為 CLIENT 值。客戶端身份驗證難以保證安全,通常不建議使用。伺服器外掛通常建議使用,因為它執行使用者 ID 和密碼的伺服器端驗證,如果客戶端執行 CONNECT 或 ATTACH 語句,這是一種安全的方式。伺服器外掛還提供了一種將 LDAP 使用者 ID 對映到 DB2 授權 ID 的方法。
現在您可以開始安裝和配置 DB2 安全外掛,您需要考慮 DB2 所需的目錄資訊樹。DB2 使用間接授權,這意味著使用者屬於一個組,並且該組被授予了較少的許可權。您需要在 LDAP 目錄中定義所有 DB2 使用者和 DB2 組。
影像
LDIF 檔案 openldap.ldif 應包含以下程式碼
# # LDAP root object # example.com # dn: dc=example, dc=com dc: example o: example objectClass: organization objectClass: dcObject # # db2 groups # dn: cn=dasadm1,dc=example,dc=com cn: dasadm1 objectClass: top objectClass: posixGroup gidNumber: 300 objectClass: groupOfNames member: uid=dasusr1,cn=dasadm1,dc=example,dc=com memberUid: dasusr1 dn: cn=db2grp1,dc=example,dc=com cn: db2grp1 objectClass: top objectClass: posixGroup gidNumber: 301 objectClass: groupOfNames member: uid=db2inst2,cn=db2grp1,dc=example,dc=com memberUid: db2inst2 dn: cn=db2fgrp1,dc=example,dc=com cn: db2fgrp1 objectClass: top objectClass: posixGroup gidNumber: 302 objectClass: groupOfNames member: uid=db2fenc1,cn=db2fgrp1,dc=example,dc=com memberUid: db2fenc1 # # db2 users # dn: uid=dasusr1, cn=dasadm1, dc=example,dc=com cn: dasusr1 sn: dasusr1 uid: dasusr1 objectClass: top objectClass: inetOrgPerson objectClass: posixAccount uidNumber: 300 gidNumber: 300 loginShell: /bin/bash homeDirectory: /home/dasusr1 dn: uid=db2inst2,cn=db2grp1,dc=example,dc=com cn: db2inst2 sn: db2inst2 uid: db2inst2 objectClass: top objectClass: inetOrgPerson objectClass: posixAccount uidNumber: 301 gidNumber: 301 loginShell: /bin/bash homeDirectory: /home/db2inst2 dn: uid=db2fenc1,cn=db2fgrp1,dc=example,dc=com cn: db2fenc1 sn: db2fenc1 uid: db2fenc1 objectClass: top objectClass: inetOrgPerson objectClass: posixAccount uidNumber: 303 gidNumber: 303 loginShell: /bin/bash homeDirectory: /home/db2fenc1
建立一個名為“db2.ldif”的檔案並將上述示例貼上到其中。使用此檔案,將定義的結構新增到您的 LDAP 目錄中。
要將 DB2 使用者和 DB2 組新增到 LDAP 目錄,您需要將使用者繫結為“rootdn”到 LDAP 伺服器,以獲取準確的許可權。
執行以下語法以使用我們 LDIF 檔案“db2.ldif”中定義的所有物件填充 LDAP 資訊目錄
ldapadd –x –D “cn=Manager, dc=example,dc=com” –W –f <path>/db2.ldif
使用更多引數執行搜尋結果
ldapsearch –x |more
為 DB2 使用準備檔案系統
為我們的 LDAP 使用者 db2inst2 建立例項。此使用者需要主目錄,其中包含主目錄內的兩個空檔案。在建立新例項之前,需要建立一個將成為例項所有者的使用者。
建立例項使用者後,您必須在使用者主目錄中建立檔案“.profile”和“.login”,這些檔案將由 DB2 修改。要在目錄中建立此檔案,請執行以下命令
mkdir /home/db2inst2 mkdir /home/db2inst2/.login mkdir /home/db2inst2/.profile
您已在 LDAP 目錄中註冊了與 DB2 相關的所有使用者和組,現在您可以使用例項所有者 ID“db2inst2”建立名為“db2inst2”的例項,並使用用於執行使用者定義函式 (UDF) 或儲存過程的隔離使用者 ID“db2fenc1”。
/opt/ibm/db2/V10.1/instance/db2icrt –u db2fenc1 db2inst2 DBI1070I Program db2icrt completed successfully.
現在檢查例項主目錄。您可以看到一個名為“sqllib”的新子目錄以及為 DB2 使用而自定義的“.profile”和“.login”檔案。
配置用於 LDAP 支援的 DB2 身份驗證公共外掛
將所需的 LDAP 外掛複製到相應的 DB2 目錄
cp // /v10/IBMLDAPauthserver.so /home/db2inst2/sqllib/security /plugin/server/. cp / / /v10/IBMLDAPgroups.so /home/db2inst2/sqllib/security /plugin/group/.
將外掛複製到指定目錄後,您需要登入到 DB2 例項所有者並將資料庫管理器配置更改為使用這些外掛。
Su – db2inst2 db2inst2> db2 update dbm cfg using svrcon_pw_plugin IBMLDAPauthserver db2inst2> db2 update dbm cfg using group_plugin IBMLDAPgroups db2inst2> db2 update dbm cfg using authentication SERVER_ENCRYPT db2inst2> db2stop db2inst2> db2start
此修改在您啟動 DB2 例項後生效。重新啟動例項後,需要安裝和配置名為“IBMLDAPSecurity.ini”的主要 DB2 LDAP 配置檔案,以使 DB2 外掛與當前 LDAP 配置一起工作。
IBMLDAPSecurity.ini 檔案包含
;----------------------------------------------------------- ; SERVER RELATED VALUES ;----------------------------------------------------------- ; Name of your LDAP server(s). ; This is a space separated list of LDAP server addresses, ; with an optional port number for each one: ; host1[:port] [host2:[port2] ... ] ; The default port number is 389, or 636 if SSL is enabled. LDAP_HOST = my.ldap.server ;----------------------------------------------------------- ; USER RELATED VALUES ;----------------------------------------------------------- rs ; LDAP object class used for use USER_OBJECTCLASS = posixAccount ; LDAP user attribute that represents the "userid" ; This attribute is combined with the USER_OBJECTCLASS and ; USER_BASEDN (if specified) to construct an LDAP search ; filter when a user issues a DB2 CONNECT statement with an ; unqualified userid. For example, using the default values ; in this configuration file, (db2 connect to MYDB user bob ; using bobpass) results in the following search filter: OrgPerson)(uid=bob) ; &(objectClass=inet USERID_ATTRIBUTE = uid representing the DB2 authorization ID ; LDAP user attribute, AUTHID_ATTRIBUTE = uid ;----------------------------------------------------------- ; GROUP RELATED VALUES ;----------------------------------------------------------- ps ; LDAP object class used for grou GROUP_OBJECTCLASS = groupOfNames at represents the name of the group ; LDAP group attribute th GROUPNAME_ATTRIBUTE = cn ; Determines the method used to find the group memberships ; for a user. Possible values are: ; SEARCH_BY_DN - Search for groups that list the user as ; a member. Membership is indicated by the ; group attribute defined as ; GROUP_LOOKUP_ATTRIBUTE. ; USER_ATTRIBUTE - A user's groups are listed as attributes ; of the user object itself. Search for the ; user attribute defined as TRIBUTE to get the groups. ; GROUP_LOOKUP_AT GROUP_LOOKUP_METHOD = SEARCH_BY_DN ; GROUP_LOOKUP_ATTRIBUTE ; Name of the attribute used to determine group membership, ; as described above. llGroups ; GROUP_LOOKUP_ATTRIBUTE = ibm-a GROUP_LOOKUP_ATTRIBUTE = member
現在在當前例項目錄中找到檔案 IBMLDAPSecurity.ini 檔案。將上述示例內容複製到其中。
Cp //db2_ldap_pkg/IBMLDAPSecurity.ini /home/db2inst2/sqllib/cfg/
現在您需要使用以下兩個語法重新啟動 DB2 例項
db2inst2> db2stop Db2inst2> db2start
此時,如果您嘗試使用“db2start”命令,您將收到安全錯誤訊息。因為,DB2 安全配置尚未針對您的 LDAP 環境正確配置。
自定義兩種配置
保留 LDAP_HOST 名稱,它在 slapd.conf 檔案中配置。
現在編輯 IMBLDAPSecurity.ini 檔案並鍵入 LDAP_HOST 名稱。這兩個檔案中 LDAP_HOST 名稱必須相同。
檔案內容如下所示
;----------------------------------------------------------- ; SERVER RELATED VALUES ;----------------------------------------------------------- LDAP_HOST = localhost ;----------------------------------------------------------- ; USER RELATED VALUES ---------------------------- ;------------------------------- USER_OBJECTCLASS = posixAccount USER_BASEDN = dc=example,dc=com USERID_ATTRIBUTE = uid AUTHID_ATTRIBUTE = uid ;----------------------------------------------------------- ; GROUP RELATED VALUES ;----------------------------------------------------------- GROUP_OBJECTCLASS = groupOfNames GROUP_BASEDN = dc=example,dc=com GROUPNAME_ATTRIBUTE = cn GROUP_LOOKUP_METHOD = SEARCH_BY_DN GROUP_LOOKUP_ATTRIBUTE = member
更改這些值後,LDAP 會立即生效,並且您的 DB2 環境與 LDAP 完美配合。
您可以登出並重新登入到“db2inst2”使用者。
現在您的例項正在使用 LDAP 目錄。