Db2 简明教程

DB2 Quick Guide

DB2 Introduction

本章介绍了 DB2 的历史、版本、版本及其各自的功能。

Overview

DB2 是 IBM 的一项数据库产品,也是一款关系数据库管理系统 (RDBMS)。DB2 旨在高效存储、分析和检索数据。DB2 产品在 XML 的支持下扩展了面向对象特征和非关系结构。

History

最初,IBM 为其特定平台开发了 DB2 产品。自 1990 年以来,IBM 决定开发通用数据库 (UDB) DB2 服务器,可以在任何权威操作系统(如 Linux、UNIX 和 Windows)上运行。

Versions

对于 IBM DB2,UDB 当前版本 10.5 同时具有 BLU 加速的功能,其代号为“开普勒”。迄今为止,所有版本的 DB2 如下所示:

Version

Code Name

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

Data server editions and features

根据 DB2 必需功能的要求,组织可以选择适当的 DB2 版本。下表显示了 DB2 Server 版本及其功能:

Editions

Features

高级企业服务器版本和企业服务器版本 (AESE/ESE)

专为中型到大型企业组织而设计。平台 - Linux,UNIX 和 Windows。表分区高可用性灾难恢复 (HARD) 物化查询表 (MQTs) 多维集群 (MDC) 连接集中器纯 XML 备份压缩同构联合

Workgroup Server Edition (WSE)

适用于工作组或中型企业组织。通过使用此 WSE,您可以使用 - 高可用性灾难恢复 (HARD) 在线重组纯 XML Web 服务联合支持 DB2 同构联合同构 SQL 复制备份压缩

Express -C

它免费提供 DB2 的所有功能。它可以在任何物理或虚拟系统上运行,配置大小不限。

Express Edition

专为入门级和中型企业组织而设计。它是一款功能齐全的 DB2 数据服务器。它只提供有限的服务。本版本包含 - Web 服务联合 DB2 同构联合同构 SQL 复制备份压缩

Enterprise Developer Edition

它只提供单个应用程序开发人员。用于设计、构建和制作原型,将应用程序部署到任何 IBM 服务器。该软件无法用于开发应用程序。

DB2 Server Installation

本章介绍了 DB2 服务器的安装步骤。

Introduction

您可以从 www.ibm.com 下载 DB2 服务器试用版或购买产品许可证。有两种独立的 DB2 服务器可供下载,具体取决于计划在其上执行操作的操作系统的规模。例如,如果您想下载适用于 32 位 Linux 或 UNIX 操作系统的 DB2 服务器,则需要下载 32 位 DB2 服务器。64 位 DB2 服务器也适用此规则。

Hardware requirements

处理器:最低 Core 2Duo

RAM:最低 1GB

硬盘:最低 30GB

Software requirements

在安装 DB2 服务器之前,您的系统需要做好准备,其中需要包含所需的软件。对于 Linux,您需要安装“libstdc++6.0”。

Checking system compatibility

在安装 DB2 服务器之前,您需要验证您的系统是否与 DB2 服务器兼容。若要确认兼容性,您需要在命令控制台上调用“db2prereqcheck”命令。

Installing DB2 on Linux operating system

打开终端并在控制台上使用“CD <DB2 安装文件夹>”命令设置 db2 安装映像文件夹路径。然后键入“./db2prereqcheck”命令,该命令会确认您的系统与 DB2 服务器的兼容性。

./db2prereqcheck

图 1 显示了 Linux 操作系统和硬件系统的兼容性要求。

按照给定的步骤在您的 Linux 系统上安装 DB2:

  1. Open the terminal.

  2. Login as root user.

  3. Open DB2 Installation folder.

  4. 键入“./db2setup”并按 Enter 键。

该进程将启动 DB2 服务器设置的执行。

db2 setup

在根终端键入“./db2setup”并按 Enter 键以启动 DB2 服务器的设置流程。

执行此操作后,将出现“设置 LaunchPad”屏幕。[图 2]

install

在设置 LaunchPad 页面上,从左侧菜单中选择“安装产品”选项。选择“DB2 高级企业服务器版”选项。选择“新建安装”按钮。

将出现一个名为“DB2 设置向导”的新框架。单击“下一步”。[图 3]

db2setupwizard

将出现下一个屏幕并显示 DB2 许可协议。选择“我接受条款…​”单击“下一步”。[图 4]

db2 ase

下一个屏幕会显示安装类型选项,该选项默认设置为“典型”。

保持同样的选择。单击“下一步”。[图 5]

installation action

下一个屏幕将显示安装操作。

选择“安装 DB2 高级企业服务器版…​”

单击“下一步”。[图 6]

installation dir

在下一个屏幕上,设置程序会要求您选择安装目录。

保持默认,然后单击“下一步”。

server info

下一个屏幕会显示用户身份验证。输入“dasusr1”用户的密码。

(您的密码可以与用户名相同,这样便于记忆。)

db2 instance

在以下屏幕中,设置会要求您创建 DB2 服务器实例。

在此处,它会创建一个名为“db2ins1”的 DB2 实例。

db2ins1

下一个屏幕询问您默认实例需要的分区数。

您可以选择“单一或多重”分区。

选择“单一分区实例”。单击"下一步"。

multi ins

在下一个屏幕,该设置会要求您为正创建的 DB2 实例进行身份验证。

此处,默认情况下,用户名被创建为“db2inst1”。您可以输入相同于用户名的密码。

单击“下一步”。

db2ins2

在下一个屏幕,该设置要求输入“db2fenc”用户的身份验证信息。

此处,您可以输入相同于用户名的密码。

单击“下一步”。

db2fanc

在下一个屏幕,您可以选择“现在不为您的 db2 服务器设置发送通知”选项。

单击“下一步”。

notification

下一个屏幕向您显示有关 db2 设置的信息。

单击“完成”。

此时,DB2 安装过程已完成。

Verifying DB2 installation

您需要验证 DB2 服务器的安装,以进行实用性检查。完成 DB2 服务器安装后,注销当前用户模式并登录到“db2inst1”用户。在“db2inst1”用户环境中,您可以打开终端并执行以下命令来验证您的 db2 产品是否安装正确。

db2level

该命令显示当前实例中已安装 DB2 产品的当前版本和服务级别。

Syntax:

db2level

Example:

db2level

Output:

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 产品的所有许可相关信息。

Syntax:

db2licm <parameter>

Example:

db2licm -l

Output:

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"

Command Line Processor (CLP)

CLP 可以在三种模式中的一种中启动:

  1. Command mode :在此模式中,每个命令和 SQL 语句必须以“db2”作为前缀。例如,查询“db2 activate database sample”。

  2. Interactive input mode :您可以使用“db2”命令启动此模式。此处,您可以传入没有前缀的 SQL 语句。例如,“activate database sample”。

  3. Batch mode :在此处,您需要创建一个脚本文件,它包含所有 SQL 查询要求并使用“.db2”扩展名保存该文件。您可以使用“db2 -tf <filename.db2>”语法在命令行中调用它。

accessing db2

DB2 Instance

Introduction

实例是 DB2 数据库管理器的逻辑环境。使用实例,您可以管理数据库。根据我们的要求,您可以在一台物理机上创建多个实例。实例目录的内容为:

  1. Database Manager Configuration file

  2. System Database Directory

  3. Node Directory

  4. Node Configuration File [db2nodes.cfg]

  5. Debugging files, dump files

对于 DB2 数据库服务器,默认实例为“DB2”。不可能在创建实例目录后更改其位置。一个实例可以管理多个数据库。在一个实例中,每个数据库具有唯一名称、其自己的目录表集、配置文件、权限和特权。

Architecture of instance in DB2 product

db2 product

Multiple instances

您可以在 Linux、UNIX 和 Windows 上的一个 DB2Server 中创建多个实例。可以在一台物理机上安装多个 DB2Server。

Creating instance on Linux

如果将 DB2 服务器安装为 root 用户,则可以在 Linux 和 UNIX 上创建多个实例。一个实例可以在 Linux 和 UNIX 上独立地同时运行。一次只能在一个数据库管理器实例内工作。

实例文件夹包含数据库配置文件和文件夹。实例目录在 Windows 上的存储位置根据操作系统不同而异。

Listing instances

以下命令用于列出实例:

db2ilist

此命令列出系统上可用的所有实例。

Syntax:

db2ilist

Example: [查看在 DB2 副本中创建的实例数量]

db2ilist

Output:

db2inst1
db2inst2
db2inst3

Instance environment commands

这些命令可用于在 DB2 CLI 中安排实例。

Get instance

此命令显示当前正在运行的实例的详细信息。

Syntax:

db2 get instance

Example: [查看激活当前用户的当前实例]

db2 get instance

Output:

The current database manager instance is : db2inst1

Set instance

要在 DB2 UDB 上启动或停止某个实例的数据库管理器,可针对当前实例执行以下命令。

Syntax:

set db2instance=<instance_name>

Example: [为当前用户安排 “db2inst1” 环境]

set db2instance=db2inst1

db2start

使用此命令,可以启动一个实例。执行此操作之前,您需要运行 “set instance”。

Syntax:

db2start

Example: [启动一个实例]

db2start

Output:

SQL1063N DB2START processing was successful

db2stop

使用此命令,可以停止一个正在运行的实例。

Syntax:

db2stop

Output:

SQL1064N DB2STOP processing was successful.

Creating an instance

让我们了解一下如何创建一个新实例。

db2icrt

如果要创建一个新实例,您需要使用 root 登录。实例 ID 不是 root ID 或 root 名称。

以下是创建新实例的步骤:

Step1 :为实例创建一个操作系统用户。

Syntax:

useradd -u <ID> -g <group name> -m -d <user location> <user name>
-p <password>

Example : [在组 “db2iadm1” 中为用户名为 “db2inst2” 的实例创建一个用户,密码为 “db2inst2”]

useradd -u 1000 -g db2iadm1 -m -d /home/db2inst2 db2inst2 -p db2inst2

Step2 : 以 root 用户身份访问 DB2 实例目录,创建新实例。

Location:

cd /opt/ibm/db2/v10.1/instance

Step3 : 使用以下语法创建实例:

Syntax:

./db2icrt -s ese -u <inst id> <instance name>

Example : [使用 ESE(企业服务器版)特性以用户 db2inst2 创建新实例 db2inst2]

./db2icrt -s ese -u db2inst2 db2inst2

Output:

DBI1446I The db2icrt command is running, please wait.
 ….
 …..
DBI1070I Program db2icrt completed successfully.

Arranging communication port and host for an instance

编辑 /etc/services 文件并添加端口号。在给出的语法中,“inst_name”表示实例名称,“inst_port”表示实例的端口号。

Syntax:

db2c_<inst name> <inst_port>/tcp

Example : [在 services 文件中为实例 db2inst2 添加变量 db2c_db2inst2 的端口号 50001/tcp]

db2c_db2inst2 50001/tcp

Syntax 1 : [使用服务名称更新数据库管理器配置。以下语法中的 svcename 表示实例服务名称,inst_name 表示实例名称]

db2 update database manager configuration using svcename db2c_&<inst_name>

Example 1 : [使用值 db2c_db2inst2 为实例 db2inst2 变量 svcename 更新 DBM 配置]

db2 update database manager configuration using svcename db2c_db2inst2

Output

DB20000I The UPDATE DATABASE MANAGER CONFIGURATION command completed successfully.

Syntax 2 : 为当前实例设置 tcpip 通信协议

db2set DB2COMM=tcpip

Syntax 3 : [停止并启动当前实例以从数据库管理器配置获取更新的值]

db2stop
db2start

Updating an instance

你可以使用以下命令更新实例:

db2iupdt

此命令用于在同一版本发布中更新实例。在执行该命令之前,你需要使用 db2stop 命令停止实例数据库管理器。在语法中,“inst_name”表示要更新为较新版本或已安装的 DB2 服务器版本的先前发布或已安装的 DB2 服务器实例名称。

Syntax 1 : 以正常模式更新实例

db2iupdt <inst_name>

Example1:

./db2iupdt db2inst2

Syntax 2 : 以调试模式更新实例

db2iupdt -D <inst_name>

Example

db2iupdt -D db2inst2

Upgrading an instance

你可以将实例从以前的 DB2 副本版本升级到当前最新安装的 DB2 副本版本。

db2iupgrade

在 Linux 或 UNIX 系统上,该命令位于 DB2DIR/instance 目录中。在以下语法中,“inst_name”表示以前的版本 DB2 实例,“inst_username”表示当前安装版本 DB2 副本实例用户。

Syntax 2 :

db2iupgrade -d -k -u <inst_username> <inst_name>

Example :

db2iupgrade -d -k -u db2inst2 db2inst2

Command Parameters:

-d : 启用调试模式。

-k : 如果 DB2 副本(你在其中运行此命令)中支持预升级实例类型,将保留该类型。

如果在 Linux 上对 DB2iupgrade 命令使用超级用户 (su),你必须使用 “-” 选项发出 “su” 命令。

Dropping an instance

你可以放弃或删除 “db2icrt” 命令创建的实例。

db2idrop

在 Linux 和 UNIX 操作系统中,此命令位于 DB2_installation_folder/instance 目录中。

Syntax : [在以下语法中,“inst_username” 表示实例用户名,而“inst_name” 表示实例名称]

db2idrop -u <inst_username> <inst_name>

Example : [要放弃 db2inst2]

./db2idrop -u db2inst2 db2inst2

Using other commands with instance

要找出我们现在正在处理哪个 DB2 实例的命令。

Syntax 1 : [要检查数据库管理器激活的当前实例]

db2 get instance

Output:

The current database manager instance is:  db2inst1

Syntax 2 : [要查看具有操作系统位和发行版本的当前实例]

db2pd -inst | head -2

Example:

db2pd -inst | head -2

Output:

Instance db2inst1 uses 64 bits and DB2 code release SQL10010

Syntax 3 : [要检查当前工作实例的名称]

db2 select inst_name from sysibmadm.env_inst_info

Example:

db2 select inst_name from sysibmadm.env_inst_info

Output:

INST_NAME  --------------------------------------
db2inst1
1 record(s) selected.

Syntax : [要将新实例设置为默认值]

db2set db2instdef=<inst_name> -g

Example : [要将新创建的实例排列为默认实例]

db2set db2instdef=db2inst2 -g

DB2 Databases

本章介绍如何使用相关语法创建、激活和停用数据库。

Database architecture

database archi

数据库是表、模式、缓冲池、日志、存储组和表空间的集合,它们协同工作以高效处理数据库操作。

Database directory

数据库目录是数据库的有序存储库。创建数据库时,数据库的所有详细信息都存储在数据库目录中,例如默认存储设备、配置文件和临时表列表等的详细信息。

分区全局目录在实例文件夹中创建。此目录包含与数据库相关的所有全局信息。此分区全局目录命名为 NODExxxx/SQLyyy,其中 xxxx 为数据分区号,yyy 为数据库令牌。

在分区全局目录中,会创建一个面向成员的目录。此目录包含本地数据库信息。面向成员的目录命名为 MEMBERxxxx,其中 xxxx 是成员号。DB2 Enterprise Server Edition 环境在单个成员上运行,并且仅有一个面向成员的目录。此面向成员的目录被唯一命名为 MEMBER0000。

Partitioned global directory

目录位置:<实例>/NODExxx/SQLxxx

分区全局目录包含如下列出的与数据库相关联的文件。

  1. 全局死锁写入文件事件监视文件

  2. 表空间信息文件 [SQLSPCS.1、SQLSPCS.2]

  3. 存储组控制文件 [SQLSGF.1、SQLSGF.2]

  4. 临时表空间容器文件。[/storage path//T0000011/C000000.TMP/SQL00002.MEMBER0001.TDA]

  5. Global Configuration file [SQLDBCONF]

  6. 历史文件 [DB2RHIST.ASC, DB2RHIST.BAK, DB2TSCHG.HIS, DB2TSCHG.HIS]

  7. Logging-related files [SQLOGCTL.GLFH.1, SQLOGCTL.GLFH.2]

  8. Locking files [SQLINSLK, SQLTMPLK]

  9. Automatic Storage containers

Member specific directory

目录位置:/NODExxxx/SQLxxxx/MEMBER0000

此目录包含:

  1. Objects associated with databases

  2. 缓冲池信息文件 [SQLBP.1, SQLBP.2]

  3. Local event monitoring files

  4. 与日志记录相关联的文件 [SQLOGCTL.LFH.1, SQLOGCTL.LFH.2, SQLOGMIR.LFH]

  5. Local configuration files

  6. 死锁事件监视文件。在 ESE 和分区数据库环境中,详细死锁事件监视文件存储在目录节点的数据库目录中。

Creating database

您可以使用 CREATE DATABASE 命令在实例中创建数据库。所有数据库均使用在创建实例时创建的“IBMSTOGROUP”默认存储组创建。在 DB2 中,所有数据库表都存储在“表空间”中,后者使用各自的存储组。

数据库权限被自动设置为 PUBLIC [CREATETAB, BINDADD, CONNECT, IMPLICIT_SCHEMA 和 SELECT],但是,如果存在 RESTRICTIVE 选项,则不会以 PUBLIC 授予权限。

Creating non-restrictive database

此命令用于创建非限制性数据库。

Syntax : [要在创建新数据库。'database_name' 表示要创建的新数据库名称。]

db2 create database <database name>

Example : [要创建名为 ‘one’ 的新非限制性数据库]

db2 create database one

Output:

DB20000I The CREATE DATABASE command completed successfully.

Creating restrictive database

调用此命令后将创建限制性数据库。

Syntax : [在下面的语法中,“db_name” 表示数据库名称。]

db2 create database <db_name> restrictive

Example : [要创建名为 “two” 的新限制性数据库]

db2 create database two restrictive

Creating database with different user defined location

在不同路径上使用“IBMSTOGROUP”默认存储组创建数据库。先前,您调用“create database”命令时没有指定用户定义的位置来存储或创建特定位置的数据库。若要使用用户定义的数据库位置创建数据库,请按照以下步骤操作:

Syntax : [在以下语法中,“db_name” 表示“database name” , “data_location” 表示必须将数据存储在哪些文件夹中, “db_path_location” 表示 “data_location” 的驱动程序位置。]

db2 create database '<db_name>' on '<data location>' dbpath on '<db_path_location>'

Example : [要创建名为 “four” 的数据库,其中数据存储在 “data1” 中,并且此文件夹存储在 “dbpath1” 中]

db2 create database four on '/data1' dbpath on '/dbpath1'

Viewing local or system database directory files

执行此命令以查看当前实例中提供目录列表。

Syntax:

db2 list database directory

Example:

db2 list database directory

Output:

 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         =

Activating database

此命令启动特定数据库所需的所有服务,这样应用程序才可使用此数据库。

Syntax :[“db_name” 表示数据库名称]

db2 activate db <db_name>

Example : [激活数据库“one”]

db2 activate db one

Deactivating database

使用此命令,您可以停止数据库服务。

Syntax:

db2 deactivate db <db_name>

Example : [停用数据库“one”]

db2 deactivate db one

Connecting to database

创建数据库后,要投入使用,需要连接或启动数据库。

Syntax:

db2 connect to <database name>

Example : [将数据库 one 连接到当前 CLI]

db2 connect to one

Output:

 Database Connection Information
 Database server        = DB2/LINUXX8664 10.1.0
 SQL authorization ID   = DB2INST4
 Local database alias   = ONE

Verifying if database is restrictive

要检查此数据库是否有限制,以下是语法:

Syntax : [在以下语法中,“db” 表示数据库,“cfg” 表示配置,“db_name” 表示数据库名]

db2 get db cfg for <db_name> | grep -i restrict

Example : [要检查数据库“one”是否有限制]

db2 get db cfg for one | grep -i restrict

Output:

Restrict access                       = NO

Configuring the database manager and the database

实例配置(Database Manager 配置)存储在名为“db2system”的文件中,而数据库相关配置则存储在名为“SQLDBCON”的文件中。这些文件无法直接编辑。您可以使用调用 API 的工具编辑这些文件。使用命令行处理器,您可以使用这些命令。

Database Manager Configuration Parameters

Syntax : [获取实例数据库管理程序的信息]

db2 get database manager configuration
db2 get dbm cfg

Syntax : [更新实例数据库管理程序]

db2 update database manager configuration
db2 update dbm cfg

Syntax : [重置先前的配置]

db2 reset database manager configuration
db2 reset dbm cfg

Database Configuration Parameters

Syntax : [获取数据库的信息]

db2 get database configuration
db2 get db cfg

Syntax : [更新数据库配置]

db2 update database configuration
db2 update db cfg

Syntax : [重置数据库配置中先前配置的值]

db2 reset database configuration
db2 reset db cfg

Syntax : [检查当前活动数据库的大小]

db2 "call get_dbsize_info(?,?,?,-1)"

Example : [确认当前激活数据库的大小]

db2 "call get_dbsize_info(?,?,?,-1)"

Output:

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

Estimating space required for database

要估计数据库的大小,必须考虑以下因素的贡献:

  1. System Catalog Tables

  2. User Table Data

  3. Long Field Data

  4. Large Object (LOB) Data

  5. Index Space

  6. Temporary Work Space

  7. XML data

  8. Log file space

  9. Local database directory

  10. System files

Checking database authorities

可以使用以下语法来检查授予公共用户非限制性数据库的哪些数据库权限。

Step 1 :使用认证用户 Id 和实例密码连接到数据库。

Syntax :[使用用户名和密码连接到数据库]

db2 connect to <db_name> user <userid> using <password>

Example :[使用用户 Id“db2inst4”和密码“db2inst4”连接“one”数据库]

db2 connect to one user db2inst4 using db2inst4

Output:

 Database Connection Information
 Database server        = DB2/LINUXX8664 10.1.0
 SQL authorization ID   = DB2INST4
 Local database alias   = ONE

Step2 :验证数据库的权限。

Syntax :[下面的语法显示了当前数据库的权限服务的结果]

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"

Example:

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"

Output:

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.

Dropping Database

使用 Drop 命令,可以从实例数据库目录中移除我们的数据库。此命令可以删除其所有对象、表、空间、容器和关联文件。

Syntax :[从实例中删除任意数据库]

db2 drop database <db_name>

Example :[从实例中删除“six”数据库]

db2  drop database six

Output:

DB20000I The DROP DATABASE command completed successfully

DB2 Bufferpools

本章为您介绍了数据库中的缓冲池。

bufferpool

Introduction

缓冲池是指数据库管理器分配的主存储空间部分。缓冲池的目的是从磁盘缓存表和索引数据。所有数据库都有自己的缓冲池。在新数据库创建时,会创建一个默认缓冲池。它被称为“IBMDEFAULTBP”。根据用户要求,可以创建多个缓冲池。在缓冲池中,数据库管理器将表行数据作为一个页面放置。此页面会一直驻留在缓冲池中,直到关闭数据库或用新数据写入该空间。缓冲池中已更新数据但未写入磁盘的页面称为“脏”页面。在缓冲池中更新的数据页面写入磁盘后,缓冲池就准备好接收其他数据。

Relationship between tablespaces and bufferpools

每个表空间都与数据库中的特定缓冲池相关联。一个表空间与一个缓冲池相关联。缓冲池和表空间的大小必须相同。多个缓冲池允许您配置数据库使用的内存,以提高其整体性能。

Bufferpool sizes

在使用“CREATE DATABASE”命令时设置缓冲池页面的大小。如果不指定页面大小,它将采用默认页面大小,即 4KB。创建缓冲池后,以后无法修改页面大小

Listing the available bufferpools in the current database directory

Syntax : [下面的语法显示数据库中所有可用的缓冲池]

db2 select * from syscat.bufferpools

Example : [要查看当前数据库中的可用缓冲池]

db2 select * from syscat.bufferpools

Output:

BPNAME      BUFFERPOOLID DBPGNAME   NPAGES      PAGESIZE    ESTORE
NUMBLOCKPAGES BLOCKSIZE   NGNAME
------------------------------------------------------------
IBMDEFAULTBP
 1 -
 -2        4096 N                  0           0 -

 1 record(s) selected.

Creating the bufferpool

要为数据库服务器创建新的缓冲池,您需要两个参数,即“缓冲池名称”和“页面大小”。执行以下查询以创建新的缓冲池。

语法:[在下面的语法中,“bp_name”表示缓冲池名称,“size”表示您需要为缓冲池声明的页面大小 (4K、8K、16K、32K)]

db2 create bufferpool <bp_name> pagesize <size>

Example : [要创建一个名称为“bpnew”、大小为“8192”(8Kb) 的新缓冲池。]

db2 create bufferpool bpnew pagesize 8192

Output

DB20000I The SQL command completed successfully.

Dropping the bufferpool

在删除缓冲池之前,需要检查是否有表空间已分配给它。

Syntax : [要删除缓冲池]

drop bufferpool <bp_name>

Example : [要删除名为“bpnew”的缓冲池]

db2 drop bufferpool bpnew

Output

DB20000I The SQL command completed successfully.

DB2 Tablespaces

本章将详细说明表空间

tablespace

Introduction

表空间是一种存储结构,其中包含表、索引、大型对象和长数据。可用于将数据库中的数据组织到与数据在系统上的存储位置相关的逻辑存储组中。这些表空间存储在数据库分区组中

Benefits of tablespaces in database

表空间在数据库中有以下多种好处:

Recoverability : 表空间让备份和恢复操作更方便。使用单个命令,您可以在表空间中备份或恢复所有数据库对象。

Automatic storage Management : 数据库管理器会根据需要创建和扩展容器。

Memory utilization : 单个缓冲池可以管理多个表空间。您可以为临时表空间指定它们自己的缓冲池,以提高诸如排序或联接之类的活动的性能。

Container

表空间包含一个或多个容器。容器可以是目录名、设备名或文件名。在数据库中,单个表空间可以在同一物理存储设备上拥有多个容器。如果表空间是通过自动存储表空间选项创建的,则容器的创建和管理将由数据库管理器自动处理。如果未使用自动存储表空间选项创建,则您需要自己定义和管理容器。

Default tablespaces

当创建一个新数据库时,数据库管理器会为数据库创建一些默认表空间。此表空间用于存储用户和临时数据。每个数据库至少需要包含三个表空间,如下所示:

Catalog tablespace : 其中包含数据库的系统目录表。它被命名为 SYSCATSPACE,并且无法删除。

User tablespace : 此表空间包含用户定义的表。在数据库中,我们有一个默认的用户表空间,名为 USERSPACE1。如果您在创建表时没有指定为此表指定用户定义表空间,则数据库管理器将为您选择默认用户表空间。

Temporary tablespace : 临时表空间包含临时表数据。此表空间包含系统临时表空间或用户临时表空间。

系统临时表空间在数据库管理器执行诸如排序或联接之类的操作时保存所需临时数据。数据库必须至少有一个系统临时表空间,它被命名为 TEMPSPACE1。它在创建数据库时创建。用户临时表空间保存来自表的临时数据。使用 DECLARE GLOBAL TEMPORARY TABLE 或 CREATE GLOBAL TEMPORARY TABLE 语句创建。在创建数据库时不会默认创建此临时表空间。

Tablespaces and storage management:

根据您希望如何使用表空间可以使用不同的方法设置表空间。您可以设置操作系统来管理表空间分配、也可以让数据库管理器分配空间或者为您的数据选择自动分配表空间。

有以下三种类型的管理空间可用:

System Managed Space (SMS) : 操作系统的文件系统管理器分配和管理存储表的空间。按需分配存储空间。此模型包含表示数据库对象的多个文件。此表空间类型已在用户定义的表空间的 10.1 版中弃用,并未在目录和临时表空间中弃用。

Database Managed Space (DMS) : 数据库服务器控制存储空间。按您在创建 DMS 表空间时指定的容器定义在文件系统上预分配存储空间。从用户定义的表空间的 10.1 版修复包 1 中弃用,但并未在系统表空间和临时表空间中弃用。

Automatic Storage Tablespace : 可以自动管理数据库服务器。数据库服务器根据数据库中的数据创建和扩展容器。使用自动存储管理,无需提供容器定义。数据库服务器会负责创建和扩展容器,以利用分配给数据库的存储。如果向存储组添加存储空间,则在现有容器达到其最大容量时会自动创建新的容器。如果您想立即使用新添加的存储,则可以重新平衡表空间。

Page, table and tablespace size:

临时 DMS 和自动存储表空间,您为数据库选择的页面大小确定表空间大小的最大限制。对于表 SMS 和临时自动存储表空间,页面大小限制表本身的大小。页面大小可以是 4kb、8kb、16kb 或 32kb。

Tablespace type

4K page size limit

8K page size limit

16K page size limit

32K page size limit

DMS,非临时自动存储表空间常规

64G

128G

256G

512G

DMS,临时 DMS 和非临时自动存储表空间大

1892G

16384G

32768G

65536G

DB2 Storagegroups

本章描述了数据库存储组。

storage

Introduction

存储数据库表或对象的一组存储路径是一个存储组。您可以将表空间分配给存储组。当您创建一个数据库时,所有表空间都采用默认存储组。数据库的默认存储组是“IBMSTOGROUP”。当您创建一个新的数据库时,如果在“CREATE DATABASE”命令的末尾传递了“AUTOMATIC STOGROUP NO”参数,则默认存储组为活动状态。数据库没有任何默认存储组。

Listing storagegroups

您可以列出数据库中的所有存储组。

Syntax : [查看当前数据库中可用存储组的列表]

db2 select * from syscat.stogroups

Example : [查看当前数据库中可用存储组的列表]

db2 select * from syscat.stogroups

Creating a storagegroup

以下是数据库中创建存储组的语法:

Syntax : [创建一个新的 stogroup。“stogropu_name”表示新存储组的名称,“path”表示存储数据(表)的位置]

db2 create stogroup  on ‘path’

Example : [在路径“data1”文件夹上创建一个新的 stogroup “stg1”]

db2 create stogroup stg1 on ‘/data1’

Output:

DB20000I The SQL command completed succesfully

Creating tablespace with stogroup

以下是使用 storegroup 创建表空间的方法:

Syntax : [使用已存在的存储组创建一个新的表空间]

db2 create tablespace <tablespace_name>  using stogroup <stogroup_name>

Example : [使用已存在的存储组“stg1”创建一个名为“ts1”的新表空间]

db2 create tablespace ts1 using stogroup stg1

Output:

DB20000I The SQL command completed succesfully

Altering a storagegroup

您可以使用以下语法更改 storegroup 的位置:

Syntax : [将存储组从旧位置移动到新位置]

db2 alter stogroup  add ‘location’, ‘location’

Example : [针对名为“sg1”的存储组,修改位置从旧位置到新位置的路径]

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

Dropping folder path of storagegroup

在删除存储组的文件夹路径之前,您可以使用 alter 命令为存储组添加新位置。

Syntax : [从存储组位置中删除旧路径]

db2 alter stogroup  drop ‘/path’

Example : [从“stg1”中删除存储组位置]

db2 alter stogroup stg1 drop ‘/path/data1’

Rebalancing a tablespace

当在数据库上进行事务且表空间变满时,为存储组或表空间创建新文件夹时需要重新平衡表空间。重新平衡使用新存储组更新数据库配置文件。

Syntax : [将表空间从旧存储组路径重新平衡到新存储组]

db2 alter tablspace <ts_name> rebalance

Example :[重新配置]

db2 alter tablespace ts1 rebalance

Renaming a storagegroup

Syntax :[修改现有存储名称的名称]

db2 rename stogroup <old_stg_name> to <new_stg_name>

Example :[将存储组的名称从“sg1”修改为新名称“sgroup1”]

db2 rename stogroup sg1 to sgroup1

Dropping a storage group

Step 1 :在删除任何存储组之前,您可以为表空间分配其他不同的存储组。

Syntax :[为表空间指定另一个存储组]

db2 alter tablspace <ts_name> using stogroup <another sto_group_name>

Example :[为表空间“ts1”从一个旧的存储组更改为新的名为“sg2”的存储组]

db2 alter tablespace ts1 using stogroup sg2

Step 2:

Syntax :[删除现有存储组]

db2 drop stogorup <stogroup_name>

Example :[从数据库中删除存储组“stg1”]

db2 drop stogroup stg1

DB2 Schemas

本章介绍和描述了模式的概念。

Introduction

模式是在数据库中按照逻辑分类的已命名对象的集合。

在数据库中,您无法创建名称相同的多个数据库对象。为此,模式提供了一个组环境。您可以在数据库中创建多个模式,并且可以创建名称相同但模式组不同的多个数据库对象。

schemas

模式可以包含表、函数、索引、表空间、过程、触发器等。例如,您可以为“employee”数据库创建两个名为“Professional”和“Personal”的不同模式。可以创建两个名称相同的不同表“Employee”。在此环境中,一个表包含专业信息,另一个表包含员工的个人信息。尽管有两个名称相同的表,但它们有两个不同的模式“Personal”和“Professional”。因此,用户可以在不遇到任何问题的情况下使用这两个表。当对表命名有约束时,此功能非常有用。

让我们看看与模式相关的一些命令:

Getting currently active schema

Syntax:

db2 get schema

Example : [获取当前数据库模式]

db2 get schema

Setting another schema to current environment

Syntax:

db2 set schema=<schema_name>

Example : [将“schema1”组织到当前实例环境]

db2 set schema=schema1

Creating a new Schema

Syntax : [使用授权用户 ID 创建新的模式]

db2 create schema <schema_name> authroization <inst_user>

Example : [创建使用“db2inst2”授权的“schema1”模式]

db2 create schema schema1 authorization db2inst2

Exercise

让我们创建两个名称相同但模式不同的表。在此,您使用两个不同的模式创建雇员表,一个用于个人信息,另一个用于专业信息。

Step 1 : 创建两个架构。

Schema 1 : [创建名为 professional 的架构]

db2 create schema professional authorization db2inst2

Schema 2 : [创建名为 personal 的架构]

db2 create schema personal authorization db2inst2

Step 2 : 创建两个表格,名称相同,用于存放员工详细信息

Table1 : professional.employee

db2 create table professional.employee(id number, name
varchar(20), profession varchar(20), join_date date,
salary number);

Table2 : personal.employee

db2 create table personal.employee(id number, name
varchar(20), d_birth date, phone bigint, address
varchar(200));

执行完这些步骤后,你将得到两个同名表格 'employee',它们有两个不同的架构。

DB2 Data Types

本章介绍了 DB2 中使用的各种数据类型。

Introduction

在 DB2 数据库表格中,根据开发人员的要求,每列都有各自的数据类型。数据类型是指表格列中值的类型和范围。

Built-in data types

  1. Datetime*TIME*: 表示一天中的时间,包括小时、分钟和秒。 TIMESTAMP : 以年、月、日、小时、分钟、秒和微秒的形式表示日期和时间的值。 DATE : 以年、月、日这三部分的形式表示一天的日期。

  2. *String*Character

  3. CHAR (fixed length) : 固定长度字符。可变长度

  4. VARCHAR : 可变长度字符。

  5. CLOB : 大型对象字符串,在字符长度可能超过 VARCHAR 数据类型限制时使用。图形

  6. GRAPHIC 固定长度: 包含双字节字符的固定长度图形字符串 可变长度

  7. VARGRAPHIC : 包含双字节字符的可变长度图形字符串。

  8. DBCLOB : 大型对象类型 二进制

  9. BLOB (可变长度): 大型对象中的二进制字符串

  10. BOOLEAN : 以 0 和 1 的形式表示。

  11. *Signed numeric*Exact

  12. Binary integer SMALLINT [role="role="16BIT""]: Using this you can insert small int values into columns*INTEGER [32BIT]* : 使用此数据类型可在列中插入较大的整数*BIGINT [64 位]*: 使用此数据类型可在列中插入较大的整数

  13. Decimal*DECIMAL (packed)*DECFLOAT (十进制浮点数):可用于插入十进制浮点数Approximate

  14. Floating points REAL (单精度):可用于插入单精度的浮点数。 DOUBLE (双精度):可用于插入双精度的浮点数。

  15. eXtensible Mark-up Language XML:可将 XML 数据存储到该数据类型中。

DB2 Tables

表是由数据库管理器维护的逻辑结构。在表中,每个垂直块称为列(元组),每个水平块称为行(实体)。以列和行为形式存储的数据集合称为表。在表中,每一列都有不同的数据类型。表用于存储持久性数据。

Type of tables

  1. Base Tables : 他们持有持久数据。有不同种类的基本表,包括: Regular Tables : 通用表,带有索引的通用表是通用表。 Multidimensional Clustering Table (MDC) : 这种类型的表在多个键上物理群集,并且用于维护大型数据库环境。DB2 pureScale 中不支持这类表。 Insert time clustering Table (ITC) : 与 MDC 表类似,行按插入表的顺序群集。它们可以是分区表。它们也不支持 pureScale 环境。 Range-Clustered tables Table (RCT) : 这些类型的表提供快速且直接的数据访问。它们实现为顺序集群。表中的每条记录都有一个记录 ID。这些类型的表用于数据与表中一个或多个列紧密群集的情况。DB2 pureScale 中也不支持这类表。 Partitioned Tables : 这些类型的表用于数据组织架构,其中表数据被分为多个存储对象。可以将数据分区添加到、附加到分区表或从分区表中分离出来。可以将表中的多个数据分区存储在一个表空间中。 Temporal Tables : 数据库中表的变更历史记录存储在临时表中,比如以前执行的修改的详细信息。

  2. Temporary Tables : 对于不同数据库操作的临时工作,需要使用临时表。临时表 (DGTT) 不显示在系统目录中,不能在创建的临时表中使用 XML 列。

  3. Materialized Query Tables : MQT 可用于提高查询的性能。这类表由查询定义,该查询用于确定表中的数据。

Creating Tables

以下语法创建表:

Syntax : [要创建新表]

db2 create table <schema_name>.<table_name>
(column_name column_type....) in <tablespace_name>

Example : 我们在“professional”架构中创建一个表来存储“employee”详细信息。此表有“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

Output:

DB20000I The SQL command completed successfully.

Listing table details

以下语法用于列出表详细信息:

Syntax : [要查看使用架构创建的表的列表]

db2 select tabname, tabschema, tbspace from syscat.tables

Example : [要查看当前数据库中的表的列表]

db2 select tabname, tabschema, tbspace from syscat.tables

Output:

TABNAME      TABSCHEMA     TBSPACE
------------ ------------- --------
EMPLOYEE     PROFESSIONAL    TS1


 1 record(s) selected.

Listing columns in a table

以下语法列出表格中的列:

Syntax : [要查看表的列和数据类型]

db2 describe table <table_name>

Example : [要查看表“employee”的列和数据类型]

db2 describe table professional.employee

Output:

             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.

Hidden Columns

可以隐藏表中的整个列。如果调用“select * from”查询,则结果表中不会返回隐藏的列。将数据插入表时,没有列列表的“INSERT”语句不会期望任何隐式隐藏列的值。这些类型的列在物化查询表中高度引用。这些类型的列不支持创建临时表。

Creating table with hidden column

以下语法使用隐藏列创建表:

Syntax : [要创建带有隐藏列的表]

db2 create table <tab_name> (col1 datatype,col2 datatype
implicitly hidden)

Example : [要创建带有隐藏列“phone”的“customer”表]

db2 create table professional.customer(custid integer not
null, fullname varchar(100), phone char(10)
implicitly hidden)

Inserting data values in table

以下语法在表中插入值:

Syntax : [要在表中插入值]

db2 insert into <tab_name>(col1,col2,...)
 values(val1,val2,..)

Example : [要在“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')

Output:

DB20000I  The SQL command completed successfully.

Retrieving values from table

以下语法从表中检索值:

Syntax :[从表中检索值]

db2 select * from &lttab_name>

Example :[从“customer”表中检索值]

db2 select * from professional.customer

Output:

CUSTID      FULLNAME
----------- ------------------------
        100 ravi

        101 krathi

        102 gopal

  3 record(s) selected.

Retrieving values from a table including hidden columns

以下语法从选定列中检索值:

Syntax :[从表中检索选定的隐藏列值]

db2 select col1,col2,col3 from <tab_name>

Example :[从表中检索选定列值结果]

db2 select custid,fullname,phone from professional.customer

Output:

CUSTID  FULLNAME    PHONE
------- ---------   ------------
100     ravi        9898989

101     krathi      87996659

102     gopal       768678687

  3 record(s) selected.

如果您想要查看隐藏列中的数据,您需要执行“DESCRIBE”命令。

Syntax

db2 describe table <table_name> show detail

Example:

db2 describe table professional.customer show detail

Output:

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.

Altering the type of table columns

您可以使用此“alter”命令修改我们的表结构,如下所示:

Syntax

db2 alter table <tab_name> alter column <col_name> set data type <data_type>

Example: :[将员工表的列“id”的数据类型从“int”修改为“bigint”]

db2 alter table professional.employee alter column id set data type bigint

Output:

DB20000I The SQL command completed successfully.

Altering column name

您可以更改列名,如下所示:

Syntax :[将表的列名从旧名称修改为新名称]

db2 alter table <tab_name> rename column <old_name> to <new_name>

Example: :[将“customers”表中列名从“fullname”修改为“custname”]

db2 alter table professional.customer rename column fullname to custname

Dropping the tables

要删除任何表,您需要使用“DROP”命令,如下所示:

Syntax

db2 drop table <tab_name>

Example: :[从数据库中删除客户表]

db2 drop table professional.customers

要删除表的整个层次结构(包括触发器和关系),您需要使用“DROP TABLE HIERARCHY”命令。

Syntax

db2 drop table hierarchy <tab_name>

Example: :[删除表“customer”的整个层次结构]

db2 drop table hierarchy professional.customers

DB2 Alias

本章描述了使用数据库对象的别名创建别名和在数据中使用数据库对象的别名。

Introduction

别名是数据库对象的其他名称。它可用于引用数据库对象。您可以说,它是数据库对象的昵称。定义别名是为了使数据库对象的名称简短,从而减小查询大小并增加查询的可读性。

Creating database object aliases

您可以按如下方式创建数据库对象别名:

Syntax

db2 create alias <alias_name> for <table_name>

Example : 为“professional.customer”表创建别名名称

db2 create alias pro_cust for professional.customer

如果您传递“SELECT * FROM PRO_CUST”或“SELECT * FROM PROFESSIONAL.CUSTOMER”,则数据库服务器将显示相同的结果。

Syntax :[直接使用模式名称从表中获取值]

db2 select * from <schema_name>.<table_name>

Example :[从 customer 表中获取值]

db2 select * from professional.customer

Output:

CUSTID  FULLNAME    PHONE
------- ---------   ------------
100     ravi        9898989
101     krathi      87996659
102     gopal       768678687

  3 record(s) selected.

Retrieving values using alias name of the table

您可以按如下方式使用数据库中的别名来获取值:

Syntax :[通过调用表的别名从表中获取值]

db2 select * from <alias_name>

Example :[使用别名从 customer 表中获取值]

db2 select * from pro_cust

Output:

CUSTID  FULLNAME    PHONE
------- ---------   ------------
100     ravi        9898989
101     krathi      87996659
102     gopal       768678687

  3 record(s) selected.

DB2 Constraints

本章描述了数据库中的各种约束。

Introduction

为了强制执行数据库的完整性, 定义了一组规则,称为约束。这些约束允许或禁止列中的值。

在实时数据库活动中, 应该根据某些限制添加数据。例如, 在销售数据库中, 销售 ID 或交易 ID 应当唯一。约束类型有:

  1. NOT NULL

  2. Unique

  3. Primary key

  4. Foreign Key

  5. Check

  6. Informational

约束仅与表相关。它们仅应用于特定表。它们在创建表时定义和应用于表。

Explanation of each constraint:

NOT NULL

这是禁止表中一个或多个列的空值规则。

Syntax:

db2 create table <table_name>(col_name col_type not null,..)

Example : [要创建一个销售表,其中有四列(id、itemname、qty、price),在此向所有列添加“非空”约束以避免在表中形成任何空单元。]

db2 create table shopper.sales(id bigint not null, itemname
varchar(40) not null, qty int not null,price double not null)

Inserting NOT NULL values into table

你可以按如下方式在表中插入值:

Example: [错误查询]

db2 insert into shopper.sales(id,itemname,qty)
values(1,'raagi',12)

Output: [正确查询]

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

Example: [正确查询]

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)

Output:

DB20000I The SQL command completed successfully.

Unique constraints

使用这些约束,你可以唯一地设置列的值。为此, 在创建表时使用“非空”约束声明唯一约束。

Syntax:

db2 create table <tab_name>(<col> <col_type> not null unique, ...)

Example:

db2 create table shopper.sales1(id bigint not null unique,
itemname varchar(40) not null, qty int not null,price
double not null)

Inserting the values into table

Example: 插入具有唯一 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)

Example: 插入一个具有“id”值 3 的新行

db2 insert into shopper.sales1(id, itemname, qty, price)
values(3, 'cheese', 60, 80)

Output : 当你尝试插入一行已存在的 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

Primary key

与唯一约束类似,你可以使用“主键”和“外键”约束来声明多个表之间的关系。

Syntax:

db2 create table <tab_name>( ,.., primary
key ())

Example : 创建“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))

Foreign key

外键是一张表中的一组列,必须匹配另一张表中一行的至少一个主键。它是一种引用约束或引用完整性约束。它是一条关于一个或多个表中多列值的逻辑规则。它使表之间存在必需的关系。

先前, 你创建了一张名为“shopper.salesboys”的表。对于此表,主键为“sid”。现在你正在创建一张具有不同模式的销售人员个人详细信息的新表,名为“employee”和表名为“salesboys”。在这种情况下,“sid”是外键。

Syntax:

db2 create table <tab_name>(<col> <col_type>,constraint
<const_name> foreign key (<col_name>)
                  reference <ref_table> (<ref_col>)

Example : [要创建一个名为“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
                       )

Example : [将值插入到主键表“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)

Example : [将值插入外键表 “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 错误。

Example : [错误执行]

db2 insert into employee.salesboys values(105,'rayan',89851130)

Output:

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

Checking constraint

您需要使用此约束来为表中的特定列添加条件限制。

Syntax:

db2 create table
 (
  primary key (),
  constraint  check (condition or condition)
 )

Example : [使用约束值创建 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)
 )

Inserting values

您可以按如下所示将值插入表中:

db2 insert into empl values (1,'lee', 15, 'mgr', '1985-01-01' ,
40000.00, 1000.00)

Dropping the constraint

以下列出删除各种约束的语法。

Dropping UNIQUE constraint

Syntax:

db2 alter table <tab_name> drop unique <const_name>

Dropping primary key

Syntax:

db2 alter table <tab_name> drop primary key

Dropping check constraint

Syntax:

db2 alter table <tab_name> drop check <check_const_name>

Dropping foreign key

Syntax:

db2 alter table <tab_name> drop foreigh key <foreign_key_name>

DB2 Indexes

本章涵盖索引简介、索引类型、索引创建和丢弃。

Introduction

索引是一组指针,可以引用表中的行、MDC 或 ITC 表中的块、XML 存储对象中由一个或多个键的值逻辑排序的 XML 数据。在 DB2 表列上创建索引以加快查询的数据访问速度,高效地对数据进行聚集和分区。它还可以提高对视图的操作性能。具有唯一索引的表可以包含具有唯一键的行。根据表要求,你可以采用不同类型的索引。

Types of indexes

  1. Unique and Non-Unique indexes

  2. Clustered and non-clustered indexes

Creating indexes

若要创建唯一索引,请使用以下语法:

Syntax:

db2 create unique index <index_name> on
&lttable_name>(<unique_column>) include (<column_names..>)

Example :为“shopper.sales1”表创建索引。

db2 create unique index sales1_indx on
shopper.sales1(id) include (itemname)

Dropping indexes

若要丢弃索引,请使用以下语法:

Syntax:

db2 create unique index <index_name> on
&lttable_name>(<unique_column>) include (<column_names..>)

Example:

db2 drop index sales_index

DB2 Triggers

本章介绍触发器,它们的类型以及触发器的创建和放弃。

Introduction

触发器是一组针对数据库中指定表上的 INSERT、UPDATE 或 DELETE 操作进行响应而执行的 actions。触发器一次性存储在数据库中。它们处理数据管理。可以在多个应用程序之间访问和共享它们。使用触发器的优点在于,如果需要在应用程序中进行任何更改,则在触发器处进行,而不是更改访问触发器的每个应用程序。触发器易于维护,且它们迫使应用程序开发更快。触发器使用 SQL 语句 “CREATE TRIGGER” 定义。

Types of triggers

有两种类型的触发器:

1. BEFORE triggers

它们在任何 SQL 操作之前执行。

2. AFTER triggers

它们在 SQL 操作之后执行。

Creating a BEFORE trigger

让我们看看如何创建触发器序列:

Syntax:

db2 create sequence <seq_name>

Example :为 shopper.sales1 表创建触发器序列

db2 create sequence sales1_seq as int start with 1 increment by 1

Syntax:

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>

Example :为 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)

Retrieving values from table

让我们看看如何从表中检索值:

Syntax:

db2 select * from <tablename>

Example :

db2 select * from shopper.sales1

Output

  ID       ITEMNAME       QTY
-------  ------------   ----------
    3      bicks            100
    2      bread            100

  2 record(s) selected.

Creating an AFTER trigger

让我们看看如何创建 after 触发器:

Syntax:

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>

Example: [插入和检索值]

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

Output:

//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.

Dropping a trigger

以下是如何删除数据库触发器:

Syntax:

db2 drop trigger <trigger_name>

Example:

db2 drop trigger slaes1_trigger

DB2 - Sequences

本章将介绍序列、序列创建、序列查看和序列删除的概念。

Introduction

序列是一种软件函数,它在一定范围内生成升序或降序整数,以生成主键并在表之间协调其他键。您可以使用序列来利用整数,比如,employee_id 或 transaction_id。序列可以支持 SMALLINT、BIGINT、INTEGER 和 DECIMAL 数据类型。序列可以在多个应用程序中共享。无论事务如何,序列都会递增或递减。

通过 CREATE SEQUENCE 语句创建序列。

Types of Sequences

有两种类型的序列:

  1. NEXTVAL :它返回递增的序列号。

  2. PREVIOUS VALUE :它返回最近生成的值。

Parameters of sequences

以下参数用于序列:

Data type :这是返回递增值的数据类型。(SMALLINT、BIGINT、INTEGER、NUMBER、DOUBLE)

START WITH :序列从该参考值开始。

MINVALUE :序列开始使用的最小值。

MAXVALUE :序列的最大值。

INCREMENT BY :序列递增的步长值。

Sequence cycling :CYCLE 子句导致重复生成序列。通过引用已由前序序列生成并存储到数据库中的返回的值来进行序列生成。

Creating a sequence

你可以使用以下语法创建序列:

Syntax:

db2 create sequence <seq_name>

Example :[用从 1 开始的递增值创建具有“sales1_seq”名称的新序列]

db2 create sequence sales1_seq as int start
with 1 increment by 1

Viewing the sequences

你可以使用以下语法查看序列:

Syntax:

db2 value <previous/next> value for <seq_name>

Example :[查看序列“sales1_seq”中先前更新过的值的列表]

db2 values previous value for sales1_seq

Output:

 1
-----------
  4
  1 record(s) selected.

Dropping the sequence

若要移除序列,你需要使用 “DROP SEQUENCE” 命令。以下是如何操作:

Syntax:

db2 drop sequence <seq_name>>

Example :[从数据库中丢弃序列“sales1_seq”]

db2 drop sequence sales1_seq

Output:

 DB20000I The SQL command completed successfully.

DB2 Views

本章介绍了视图的介绍、创建、修改和删除视图。

Introduction

视图是表示存储在表中的数据的另一种方式。它不是一个真实表,并且没有永久存储。视图提供了一种查看一个或多个表中的数据的方法。它是针对结果表的命名规范。

Creating a view

可以使用以下语法创建视图:

Syntax:

db2 create view <view_name> (<col_name>,
<col_name1...) as select <cols>..
from <table_name>

Example :为 shopper.sales1 表创建视图

db2 create view view_sales1(id, itemname, qty, price)
as select id, itemname, qty, price from
shopper.sales1

Modifying a view

可以使用以下语法修改视图:

Syntax:

db2 alter view <view_name> alter <col_name>
add scope <table_or_view_name>

Example :[向现有视图“view_sales1”添加新表列]

db2 alter view view_sales1 alter id add
scope shopper.sales1

Dropping the view

可以使用以下语法删除视图:

Syntax:

db2 drop view <view_name>

Example:

db2 drop view sales1_view

DB2 with XML

本章介绍在 DB2 中使用 XML。

Introduction

有了 PureXML 功能,你可以在数据库表的列中存储格式良好的 XML 文档。这些列具有 XML 数据库。将 XML 数据存储在 XML 列中,可以使其以本机分层形式保持数据。DB2 数据库服务器功能可以访问和管理已存储的 XML 数据。将 XML 数据存储在其本机分层形式中能够高效地搜索、检索和更新 XML。若要更新 XML 数据中的值,你需要使用 XQuery、SQL 或两者的组合。

Creating a database and table for storing XML data

通过发布以下语法创建一个数据库:

Syntax:

db2 create database xmldb

默认情况下,数据库使用 UTF-8 (UNICODE) 编码集。激活数据库并连接到它:

Syntax:

db2 activate db <db_name>
db2 connect to <db_name>

Example:

db2 activate db xmldb
db2 connect to xmldb

创建一个格式良好的 XML 文件,并创建一个数据类型为“XML”的表。必须将包含在双引号中的 SQL 查询传递到 XML 语法。

Syntax:

db2 “create table <schema>.<table>(col <datatype>,
col <xml datatype>)”

Example:

db2 "create table shope.books(id bigint not null
primary key, book XML)"

使用 SQL 语句“INSERT”将 XML 值插入到表中,格式良好的 XML 文档被插入到 XML 类型列中。

Syntax:

db2 “insert into <table_name> values(value1, value2)”

Example:

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>')"

Updating XML data in a table

您可以使用以下语法更新表中的 XML 数据:

Syntax:

db2 “update <table_name> set <column>=<value> where
<column>=<value>”

Example:

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 and Recovery

本章介绍数据库的备份和恢复方法。

backup

Introduction

备份和恢复方法旨在保证我们信息的安全性。在命令行界面 (CLI) 或图形用户界面 (GUI) 中使用备份和恢复实用程序,您可以在 DB2 UDB 中备份或恢复数据库的数据。

Logging

日志文件包含错误日志,这些错误日志用于从应用程序错误中恢复。日志保留数据库中更改的记录。如下所述,日志记录有两种类型:

Circular logging

这是一种方法,即在需要分配新事务日志文件时,覆盖旧的事务日志,从而擦除日志文件序列并重新使用它们。您只允许在脱机模式下进行完全备份。即,数据库必须脱机才能进行完全备份。

Archive logging

此模式支持使用称为向前恢复的日志文件进行在线备份和数据库恢复。可以通过将 logretain 或 userexit 设置为 ON,将备份模式从循环更改为归档。对于归档日志记录,备份设置数据库需要一个对 DB2 进程可写的目录。

Backup

使用 Backup 命令,您可以复制整个数据库。此备份副本包括数据库系统文件、数据文件、日志文件、控制信息等。

可以同时在脱机和联机时进行备份。

Offline backup

Syntax: [列出活动应用程序/数据库]

db2 list application

Output:

Auth Id  Application    Appl.      Application Id
DB       # of
         Name           Handle
Name    Agents
-------- -------------- ---------- ---------------------
----------------------------------------- -------- -----
DB2INST1 db2bp          39
*LOCAL.db2inst1.140722043938
ONE      1

Syntax: [强制应用程序使用应用程序。已处理 ID]

db2 "force application (39)"

Output:

DB20000I  The FORCE APPLICATION command completed
successfully.

DB21024I  This command is asynchronous and may not
be effective immediately.

Syntax: [要终止数据库连接]

db2 terminate

Syntax: [要停用数据库]

db2 deactivate database one

Syntax: [要获取备份文件]

db2 backup database <db_name> to <location>

Example:

db2 backup database one to /home/db2inst1/

Output:

Backup successful. The timestamp for this backup image is :
20140722105345

Online backup

首先,您需要将模式从 Circular logging 更改为 Archive Logging

Syntax: [要检查数据库是否使用循环记录还是存档记录]

db2 get db cfg for one | grep LOGARCH

Output:

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 中添加路径。

Updating logarchmeth1 with required archive directory

Syntax: [要创建目录]

mkdir backup
mkdir backup/ArchiveDest

Syntax: [要为文件夹提供用户权限]

chown db2inst1:db2iadm1 backup/ArchiveDest

Syntax: [要更新配置 LOGARCHMETH1]

db2 update database configuration for one using LOGARCHMETH1
'DISK:/home/db2inst1/backup/ArchiveDest'

您可以进行离线备份以确保安全,激活数据库并连接到数据库。

Syntax: [要执行联机备份]

db2 backup database one online to
/home/db2inst1/onlinebackup/ compress include logs

Output:

db2 backup database one online to
/home/db2inst1/onlinebackup/ compress include logs

使用以下命令验证备份文件:

Syntax:

db2ckbkp <location/backup file>

Example:

db2ckbkp
/home/db2inst1/ONE.0.db2inst1.DBPART000.20140722112743.001

列出备份文件的历史记录

Syntax:

db2 list history backup all for one

Output:

                    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:

Restoring the database from backup

要从备份文件恢复数据库,您需要按照给定的语法进行操作:

Syntax:

db2 restore database <db_name> from <location>
taken at <timestamp>

Example:

db2 restore database one from /home/db2inst1/ taken at
20140722112743

Output:

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.

向前滚动日志目录中位于的所有日志,包括磁盘驱动器故障前的最新更改。

Syntax:

db2 rollforward db <db_name> to end of logs and stop

Example:

db2 rollforward db one to end of logs and stop

Output:

                                 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 - Database Security

本章介绍数据库安全性。

Introduction

可以通过两种不同的安全控制模式管理 DB2 数据库和函数:

Authentication

认证是确认用户仅根据他授权执行的活动权限登录的过程。用户认证可以在操作系统级别或数据库级别本身执行。通过使用诸如视网膜和指纹等生物特征认证工具来防止数据库遭受黑客或恶意用户的破坏。

可以在 db2 数据库系统外部管理数据库安全性。以下是一些类型的安全认证流程:

  1. 基于操作系统的认证。

  2. 轻量级目录访问协议 (LDAP)

对于 DB2,安全服务作为独立产品成为操作系统的一部分。对于认证,它需要两个不同的凭据,它们分别是用户 ID 或用户名和密码。

Authorization

您可以在 DB2 数据库系统中访问 DB2 数据库及其功能,这些功能由 DB2 数据库管理器管理。授权是由 DB2 数据库管理器管理的一个过程。管理器获取有关当前经过认证用户的的信息,以指示用户可以执行或访问哪些数据库操作。

以下是可以用于授权的不同权限方式:

Primary permission :直接授予授权 ID。

Secondary permission :如果用户是成员,则授予组和角色

Public permission :公开授予所有用户。

Context-sensitive permission :授予受信任上下文角色。

可以根据以下类别向用户授予授权:

  1. System-level authorization

  2. System administrator [SYSADM]

  3. System Control [SYSCTRL]

  4. System maintenance [SYSMAINT]

  5. System monitor [SYSMON]

权威机构对实例级别的功能提供控制。权威机构会提供组权限,以控制维护和权限操作。例如,数据库和数据库对象。

  1. Database-level authorization

  2. Security Administrator [SECADM]

  3. Database Administrator [DBADM]

  4. Access Control [ACCESSCTRL]

  5. Data access [DATAACCESS]

  6. SQL administrator. [SQLADM]

  7. Workload management administrator [WLMADM]

  8. Explain [EXPLAIN]

权限机构在数据库内部提供控制。数据库的其他权限包括 LDAD 和 CONNECT。

  1. Object-Level Authorization :对象级别授权涉及在对象上执行操作时验证权限。

  2. Content-based Authorization :用户可以使用基于标签的访问控制 [LBAC] 对特定表上的各个行和列拥有读写访问权限。

DB2 表和配置文件用于记录与授权名称相关联的权限。当用户尝试访问数据时,记录的权限会验证以下权限:

  1. 用户的授权名称

  2. 用户所属的组

  3. 直接授予用户或间接授予组的角色

  4. 通过受信任上下文获得的权限。

在使用 SQL 语句时,DB2 授权模型会考虑以下权限的组合:

  1. 授予与 SQL 语句相关联的主授权 ID 的权限。

  2. 与 SQL 语句关联的辅助授权 ID。

  3. Granted to PUBLIC

  4. 授予受信任上下文的权限。

Instance level authorities

让我们探讨一些与实例相关的权限。

System administration authority (SYSADM)

这是实例级别最高级别的管理权限。拥有 SYSADM 权限的用户可以在实例内执行一些数据库和数据库管理器命令。拥有 SYSADM 权限的用户可以执行以下操作:

  1. Upgrade a Database

  2. Restore a Database

  3. 更新数据库管理器配置文件。

System control authority (SYSCTRL)

这是系统控制权限中最高级别。它用于针对数据库管理器实例及其数据库执行维护和实用操作。这些操作可能会影响系统资源,但它们不允许直接访问数据库中的数据。

拥有 SYSCTRL 权限的用户可以执行以下操作:

  1. 更新数据库、节点或分布式连接服务 (DCS) 目录

  2. 强制用户退出系统级

  3. 创建或放弃数据库级

  4. 创建、更改或放弃表空间

  5. Using any table space

  6. Restoring Database

System maintenance authority (SYSMAINT)

它是系统控制权限的第二级。它提供对数据库管理器实例及其数据库执行维护和实用操作的功能。这些操作影响系统资源,但不会允许直接访问数据库中的数据。该权限旨在让用户维护包含敏感数据的数据库管理器实例中的数据库。

只有具有 SYSMAINT 或更高级别系统权限的用户才能执行以下任务:

  1. Taking backup

  2. Restoring the backup

  3. Roll forward recovery

  4. Starting or stopping instance

  5. Restoring tablespaces

  6. Executing db2trc command

  7. 在实例级别用户或数据库级别用户的情况下,获取系统监视器快照。

具有 SYSMAINT 的用户可以执行以下任务:

  1. 查询表空间的状态

  2. Updating log history files

  3. Reorganizing of tables

  4. 使用 RUNSTATS(收集目录统计信息)

System monitor authority (SYSMON)

有了此权限,用户可以监视或获取数据库管理器实例或其数据库的快照。SYSMON 权限允许用户运行以下任务:

  1. 获取数据库管理器监视器开关

  2. GET MONITOR SWITCHES

  3. GET SNAPSHOT

  4. 列出活动数据库列表列出应用程序列出数据库分区组列出 DCS 应用程序列出程序包列出表列出表空间容器列出表空间列出实用程序

  5. RESET MONITOR

  6. UPDATE MONITOR SWITCHES

Database authorities

每个数据库权限都持有执行数据库上某些操作的授权 ID。这些数据库权限与特权不同。以下是一些数据库权限的列表:

ACCESSCTRL :允许授予和撤消所有对象特权和数据库权限。

BINDADD :允许在数据库中创建新程序包。

CONNECT :允许连接到数据库。

CREATETAB :允许在数据库中创建新表。

CREATE_EXTERNAL_ROUTINE :允许创建应用程序和数据库用户使用的过程。

DATAACCESS :允许访问存储在数据库表中的数据。

DBADM :充当数据库管理员。它授予所有其他数据库权限,但 ACCESSCTRL、DATAACCESS 和 SECADM 除外。

EXPLAIN :允许解释查询计划,而不要求他们拥有访问表中数据的权限。

IMPLICIT_SCHEMA :允许用户通过使用 CREATE 语句创建对象来隐式创建架构。

LOAD :允许将数据加载到表中。

QUIESCE_CONNECT :允许在数据库静默(暂时禁用)时访问数据库。

SECADM :允许充当数据库的安全管理员。

SQLADM :允许监控和调整 SQL 语句。

WLMADM :允许充当工作负载管理员

Privileges

SETSESSIONUSER

授权标识符权限涉及授权标识符上的操作。只有一个称为 SETSESSIONUSER 权限的权限。它可以授予用户或组,并允许会话用户将其身份切换到授予了权限的任何授权标识符。此权限由用户 SECADM 权限授予。

Schema privileges

此权限涉及对数据库中架构的操作。架构的所有者具有操作架构对象(如表、视图、索引、程序包、数据类型、函数、触发器、过程和别名)的所有权限。可以向用户、组、角色或 PUBLIC 授予以下权限中的任何一种:

  1. CREATEIN :允许在架构中创建对象

  2. ALTERIN :允许在架构中修改对象。

DROPIN

这允许删除架构中的对象。

Tablespace privileges

这些权限涉及数据库中表空间上的操作。可以向用户授予表空间的 USE 权限。然后这些权限允许他们在表空间中创建表。当创建表空间时,权限所有者可以使用具有 GRANT OPTION 命令的 USE 权限授予权限。而 SECADM 或 ACCESSCTRL 权限具有表空间上 USE 权限的权限。

Table and view privileges

用户必须对数据库有 CONNECT 权限才能使用表和视图权限。表和视图的权限如下所述:

CONTROL

它提供了表或视图的所有权限,包括删除和授予、撤销向用户授予的单个表权限。

ALTER

它允许用户修改表。

DELETE

它允许用户从表或视图中删除行。

INDEX

它允许用户将行插入到表或视图中。它还可以运行导入实用程序。

REFERENCES

它允许用户创建并删除外键。

SELECT

它允许用户从表或视图中检索行。

UPDATE

它允许用户在表、视图中更改条目。

Package privileges

用户必须对数据库具有 CONNECT 权限。包是一个数据库对象,其中包含数据库管理器以在特定应用程序中以最有效方式访问数据的信息。

CONTROL

它为用户提供了重新绑定、删除或执行包的权限。拥有此权限的用户将被授予 BIND 和 EXECUTE 权限。

BIND

它允许用户绑定或重新绑定该包。

EXECUTE

允许执行包。

Index privileges

此权限自动在索引上接收 CONTROL 权限。

Sequence privileges

序列会自动在序列上接收 USAGE 和 ALTER 权限。

Routine privileges

它涉及数据库中例程(例如函数、过程和方法)的操作。

DB2 - Roles

Introduction

角色是一个可以分配给用户、组、PUBLIC 或其他角色的多个权限的数据库对象,这通过使用 GRANT 语句来实现。

Restrictions on roles

  1. 角色无法拥有数据库对象。

  2. 在创建以下数据库对象时,不会考虑授予组的权限和角色。包含静态 SQL 的包视图物化查询表 (MQT) 触发器 SQL 例程

Creating and granting membership in roles

Syntax: [创建新角色]

db2 create role <role_name>

Example : [创建名为“sales”的新角色以添加某些表,这些表将由某些用户或组管理]

db2 create role sales

Output:

DB20000I The SQL command completed successfully.

Granting role from DBADM to a particular table

Syntax: [向表授予角色的权限]

db2 grant select on table <table_name> to role <role_name>

Example : [向角色“sales”添加管理表“shope.books”的权限]

db2 grant select on table shope.books to role sales

Output:

DB20000I  The SQL command completed successfully.

安全管理员向必需用户授予角色。(在你使用此命令之前,你需要创建用户。)

Syntax: [向角色添加用户]

db2 grant role <role_name> to user <username>

Example : [向角色“sales”添加用户“mastanvali”]

db2 grant sales to user mastanvali

Output:

DB20000I  The SQL command completed successfully.

Role hierarchies

要为角色创建层级结构,需要向每个角色授予权限/成员资格,以便与另一个角色关联。

Syntax: [在此语法之前,创建一个名为“production”的新角色]

db2 grant role <roll_name> to role <role_name>

Example : [向另一个角色“production”提供角色“sales”的权限]

db2 grant sales to role production

DB2 - LDAP

Introduction

LDAP 是轻量级目录访问协议。LDAP 是一个基于客户端-服务器模型且在 TCP/IP 栈上层运行的全局目录服务行业标准协议。LDAP 提供了一个连接、访问、修改和搜索 Internet 目录的工具。

LDAP 服务器包含信息,这些信息以目录树的形式组织。客户端要求服务器提供信息或针对特定信息执行某些操作。服务器通过提供所需的(如果有的话)信息来应答客户端,或将客户端转给其他服务器处理所需的请求。然后,客户端从其他服务器获取所需信息。

目录的树形结构在所有参与服务器上始终保持相同。这是 LDAP 目录服务的一个显著特性。因此,无论客户端参考的是哪台服务器,客户端始终会以无差错的方式获取所需信息。这里,我们使用 LDAP 对 IBM DB2 进行认证,以替代操作系统认证。

LDAP 有两种类型:

我们来看看如何配置透明 LDAP。

Configuring transparent LDAP

要开始配置透明 LDAP,您需要配置 LDAP 服务器。

LDAP server configuration

创建一个 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 client configuration

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。这是一个用于使用加密密码和特定类型为 posixAccount 的 LDAP 对象的 LDAP 认证的公用接口。此类型的所有 LDAP 对象都表示包含可移植操作系统接口 (POSIX) 属性的抽象帐户。

网络安全服务 (NSS) 是一组支持跨平台开发支持安全性的客户端和服务器应用程序的库。其中包括 SSL、TLS、PKCS S/MIME 等库以及其他安全标准。

您需要为此接口和两个其他映射属性指定基准 DN。OpenLDAP 客户端配置文件包含下面给出的条目:

host localhost
base dc=example,dc=com

到此为止,您只需定义 LDAP 服务的主机和基准 DN。

Validating OpenLDAP environment

在配置 LDAP 服务器和 LDAP 客户端后,请验证两者是否能通信。

Step1 :使用以下命令检查您的本地 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

Testing connection to LDAP server with ldapsearch

ldapsearch 命令打开与 LDAP 服务器的连接,绑定到它,并执行一个搜索查询,可以使用特殊参数“x”指定此搜索查询,通过使用 -x 参数而不是更加复杂的安全认证层(SASL)之类的机制来连接到您的 LDAP 服务器,以进行简单身份验证。

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

Configuring DB2

在处理 LDAP 服务器和客户端后,您需要配置 DB2 数据库以用于 LDAP。让我们讨论如何安装和配置数据库,以便在 DB2 用户身份验证过程中使用 LDAP 环境。

Configuring DB2 and LDAP interaction plug-ins

IBM 提供了一个带有 DB2 LDAP 插件的免费软件包。DB2 软件包包括三个 DB2 安全插件,各针对以下一项:

  1. server side authentication

  2. client side authentication

  3. group lookup

根据您的需求,您可以使用上述三个插件中的任何一个或全部。该插件不支持某些用户在 LDAP 中定义,而其他用户在操作系统中定义的环境。如果您决定使用 LDAP 插件,则需要在 LDAP 服务器中定义与数据库关联的所有用户。该原则也适用于该组插件。

您必须决定哪些插件对我们的系统是强制性的。在客户端系统上发生 CONNECT 或 ATTACH 语句时提供用户 ID 和密码验证的情形中,使用客户端身份验证插件。因此,必须将数据库管理器配置参数 SRVCON_AUTH 或 AUTHENTICATION 设置为值 CLIENT。很难保护客户端身份验证,通常不建议使用。通常建议使用服务器插件,因为如果客户端执行 CONNECT 或 ATTACH 语句,它会执行用户 ID 和密码的服务器端验证,这是安全的方式。服务器插件还提供了一种将 LDAP 用户 ID 映射到 DB2 授权 ID 的方法。

现在您可以开始安装和配置 DB2 安全插件,您需要考虑 DB2 所需的目录信息树。DB2 使用间接授权,这意味着用户属于一个组,而该组被授予较少的权限。您需要在 LDAP 目录中定义所有 DB2 用户和 DB2 组。

Image

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

Preparing file system for DB2 usage

为我们的 LDAP 用户 db2inst2 创建实例。此用户需要包含空文件的目录。在创建新实例之前,您需要创建一个成为该实例所有者的用户。

在创建实例用户后,您必须在用户主目录(DB2 将对其进行修改)中创建文件“.profile”和“.login”。要在该目录中创建此文件,请执行以下命令:

mkdir /home/db2inst2
mkdir /home/db2inst2/.login
mkdir /home/db2inst2/.profile

您已经在 LDAP 目录中注册了所有与 DB2 相关联的用户和组,现在您可以使用实例所有者 ID“db2inst2”和 fenced 用户 ID“db2fenc1”创建一个名为“db2inst2”的实例,这是运行用户定义函数 (UDF) 或存储过程所必需的。

/opt/ibm/db2/V10.1/instance/db2icrt –u db2fenc1 db2inst2
DBI1070I Program db2icrt completed successfully.

现在检查实例主目录。您会看到一个名为“sqllib”的新子目录,以及为 DB2 使用而定制的 .profile 和 .login 文件。

Configuring authentication public-ins for LDAP support in 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 实例后生效。在重新启动该实例后,您需要安装和配置主 DB2 LDAP 配置文件“IBMLDAPSecurity.ini”,以使 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”命令,您会收到安全错误消息。因为尚未针对您的 LDAP 环境正确配置 DB2 安全配置。

Customizing both configurations

将 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 目录一起工作。