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伺服器設定。

DB2 Server Setup

在root終端上鍵入“./db2setup”並按Enter鍵以啟動DB2伺服器的設定過程。

這樣做後,將出現“設定啟動板”螢幕。[圖2]

Set up Launch Pad

在“設定啟動板”頁面上,從左側選單中選擇“安裝產品”選項。選擇“DB2高階企業伺服器版”選項。選擇“安裝新”按鈕。

出現一個名為“DB2設定嚮導”的新框架。單擊“下一步”。[圖3]

DB2 setup wizard

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

DB2 license agreement

下一個螢幕顯示安裝型別,預設情況下設定為“典型”。

保持相同的選擇。單擊“下一步”。[圖5]

Installation Action

下一個螢幕顯示安裝操作。

選擇“安裝DB2高階企業伺服器版……”

單擊“下一步”。[圖6]

Installation Directory

在下一個螢幕上,設定程式要求選擇安裝目錄。

保持預設值並單擊“下一步”。

Server Info

下一個螢幕顯示使用者身份驗證。輸入“dasusr1”使用者的密碼。

(您的密碼可以與使用者名稱相同,以便於記住。)

DB2 Instance

在以下螢幕上,設定程式要求您建立DB2伺服器例項。

在這裡,它使用名稱“db2inst1”建立DB2例項。

DB2 Instance Name

下一個螢幕詢問您為預設例項所需的分割槽數。

您可以選擇“單個或多個”分割槽。

選擇“單分割槽例項”。單擊“下一步”。

DB2 Partition

在下一個螢幕上,設定程式要求您對正在建立的DB2例項進行身份驗證。

在這裡,預設情況下使用者名稱被建立為“db2inst1”。您可以輸入與使用者名稱相同的密碼。

單擊“下一步”。

Authentication

在下一個螢幕上,設定程式要求您輸入“db2fenc”使用者的身份驗證資訊。

在這裡,您可以輸入與使用者名稱相同的密碼。

單擊“下一步”。

Authentication Information

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

單擊“下一步”。

Notification

下一個螢幕顯示有關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>”在命令列中呼叫它。

Accessing DB22

DB2例項

簡介

例項是DB2資料庫管理器的邏輯環境。使用例項,您可以管理資料庫。根據您的需求,您可以在一臺物理機器上建立多個例項。例項目錄的內容為

  • 資料庫管理器配置檔案
  • 系統資料庫目錄
  • 節點目錄
  • 節點配置檔案 [db2nodes.cfg]
  • 除錯檔案、轉儲檔案

對於DB2資料庫伺服器,預設例項為“DB2”。建立例項目錄後,無法更改其位置。一個例項可以管理多個數據庫。在一個例項中,每個資料庫都有一個唯一的名稱,它自己的一組目錄表、配置檔案、許可權和特權。

DB2產品中例項的架構

db2_product

多個例項

您可以在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 資料庫

本章介紹如何建立、啟用和停用資料庫以及相關的語法。

資料庫架構

Database Architecture

資料庫是表、模式、緩衝池、日誌、儲存組和表空間的集合,它們協同工作以有效地處理資料庫操作。

資料庫目錄

資料庫目錄是資料庫的有組織的儲存庫。建立資料庫時,有關資料庫的所有詳細資訊都儲存在資料庫目錄中,例如預設儲存裝置的詳細資訊、配置檔案和臨時表列表等。

分割槽全域性目錄在例項資料夾中建立。此目錄包含與資料庫相關的所有全域性資訊。此分割槽全域性目錄命名為 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緩衝池

本章介紹資料庫中的緩衝池。

bufferpool

簡介

緩衝池是資料庫管理器分配的主記憶體空間的一部分。緩衝池的目的是快取來自磁碟的表和索引資料。所有資料庫都有自己的緩衝池。在建立新資料庫時會建立一個預設緩衝池,稱為“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表空間

本章詳細描述表空間。

Tablespaces

簡介

表空間是一種儲存結構,它包含表、索引、大物件和長資料。它可用於將資料庫中的資料組織到與資料儲存在系統上的位置相關的邏輯儲存組中。這些表空間儲存在資料庫分割槽組中。

表空間在資料庫中的優勢

表空間在資料庫中以多種方式提供益處,如下所示

可恢復性: 表空間使備份和恢復操作更加方便。使用單個命令,您可以備份或恢復表空間中所有資料庫物件。

自動儲存管理: 資料庫管理器根據需要建立和擴充套件容器。

記憶體利用率: 單個緩衝池可以管理多個表空間。您可以將臨時表空間分配到其自己的緩衝池,以提高排序或聯接等活動的效能。

容器

表空間包含一個或多個容器。容器可以是目錄名稱、裝置名稱或檔名。在資料庫中,單個表空間可以在同一物理儲存裝置上擁有多個容器。如果表空間是使用自動儲存表空間選項建立的,則容器的建立和管理將由資料庫管理器自動處理。如果未使用自動儲存表空間選項建立它,則需要自行定義和管理容器。

預設表空間

建立新資料庫時,資料庫管理器會為資料庫建立一些預設表空間。這些表空間用作使用者和臨時資料的儲存位置。每個資料庫至少必須包含三個表空間,如下所示

  1. 目錄表空間
  2. 使用者表空間
  3. 臨時表空間

目錄表空間: 它包含資料庫的系統目錄表。它名為 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儲存組

本章介紹資料庫儲存組。

Storage

簡介

儲存資料庫表或物件的一組儲存路徑,就是一個儲存組。您可以將表空間分配到儲存組。建立資料庫時,所有表空間都採用預設儲存組。資料庫的預設儲存組為“IBMSTOGROUP”。建立新資料庫時,如果在“CREATE DATABASE”命令末尾傳遞“AUTOMATIC STOGROUP NO”引數,則預設儲存組處於活動狀態。資料庫沒有任何預設儲存組。

列出儲存組

您可以列出資料庫中的所有儲存組。

語法: [檢視當前資料庫中可用的儲存組列表]

db2 select * from syscat.stogroups

示例: [檢視當前資料庫中可用的儲存組列表]

db2 select * from syscat.stogroups

建立儲存組

以下是在資料庫中建立儲存組的語法

語法: [建立新的儲存組。‘stogropu_name’表示新儲存組的名稱,‘path’表示資料(表)儲存的位置]

db2 create stogroup  on ‘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 stogroup  add ‘location’, ‘location’ 

示例: [將名為“sg1”的儲存組的位置路徑從舊位置修改為新位置]

db2 alter stogroup sg1 add ‘/path/data3’, ‘/path/data4’ 

刪除儲存組的資料夾路徑

在刪除儲存組的資料夾路徑之前,您可以使用 alter 命令為儲存組新增新位置。

語法: [從儲存組位置刪除舊路徑]

db2 alter stogroup  drop ‘/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模式

本章介紹並描述模式的概念。

簡介

模式是資料庫中邏輯分類的命名物件的集合。

在資料庫中,您不能建立多個同名的資料庫物件。為此,模式提供了一個組環境。您可以在資料庫中建立多個模式,並且可以使用不同的模式組建立多個同名的資料庫物件。

schemas

模式可以包含表、函式、索引、表空間、過程、觸發器等。例如,您為“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 - 備份和恢復

本章介紹資料庫的備份和恢復方法。

backup

簡介

備份和恢復方法旨在確保我們資訊的安全。在命令列介面 (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 資料庫和功能可以透過兩種不同的安全控制模式進行管理

  1. 身份驗證
  2. 授權

身份驗證

身份驗證是確認使用者登入僅符合其被授權執行的活動的許可權的過程。使用者身份驗證可以在作業系統級別或資料庫級別本身執行。透過使用生物識別身份驗證工具(例如視網膜和指紋)來防止駭客或惡意使用者訪問資料庫。

資料庫安全性可以從 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 有兩種型別

  1. 透明
  2. 外掛

讓我們看看如何配置透明 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: dbctl 
# 
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 目錄。

廣告