Skip to content

DB2 - 数据库

本章涵盖了 Db2 中创建、连接和管理数据库的基本操作。

一个 Db2 实例可以管理多个数据库。每个数据库都是一个独立的单元,拥有自己的数据、日志和配置集。逻辑层次结构如下:

  • 实例 (Instance): 管理系统资源的 Db2 服务器进程。
  • 数据库 (Database): 相关数据对象的集合。它是连接的主要单元。
  • 表空间 (Tablespaces): 组织表的逻辑存储单元。它们映射到物理存储(容器)。
  • 模式 (Schemas): 一种在数据库中分组和组织对象(如表、视图、索引)的方式。
  • 表 (Tables)、视图 (Views)、索引 (Indexes): 实际存储和提供数据访问的对象。

物理上,Db2 将所有这些信息组织在服务器文件系统上的结构化目录中,但作为用户,您主要通过 SQL 与逻辑对象进行交互。

CREATE DATABASE 命令初始化一个新的数据库。默认情况下,它会向 PUBLIC 授予一组特权,允许任何用户连接并创建表。

使用默认设置创建新数据库的语法:

CREATE DATABASE <database_name>

示例:

db2 CREATE DATABASE sample

输出:

DB20000I The CREATE DATABASE command completed successfully.

强烈建议指定 UTF-8 字符集(codeset),以确保您的数据库能够处理国际字符。

db2 CREATE DATABASE myappdb USING CODESET UTF-8 TERRITORY US

限制性数据库不会向 PUBLIC 授予默认特权。您必须显式授予用户访问它的权限。这是生产环境中的最佳实践。

语法:

CREATE DATABASE <database_name> RESTRICTIVE

示例:

db2 CREATE DATABASE proddb RESTRICTIVE

要查看当前实例中已编目的所有数据库:

db2 LIST DATABASE DIRECTORY

输出(示例):

System Database Directory
Number of entries in the directory = 2
Database 1 entry:
Database alias = SAMPLE
Database name = SAMPLE
Local database directory = /home/db2inst1
Database 2 entry:
Database alias = PRODDB
Database name = PRODDB
Local database directory = /home/db2inst1

在执行 SQL 查询之前,您必须建立与特定数据库的连接。

语法:

CONNECT TO <database_name>

示例:

db2 CONNECT TO sample

输出:

Database Connection Information
Database server = DB2/LINUXX8664 11.5.8
SQL authorization ID = DB2INST1
Local database alias = SAMPLE

要断开连接,请使用 db2 CONNECT RESET。

激活数据库(ACTIVATE DATABASE)会预启动其服务并分配内存,这可以提高首次连接的性能。这通常在服务器重启后对生产数据库执行。

db2 ACTIVATE DATABASE sample

停用(DEACTIVATE DATABASE)会在没有活动连接时关闭数据库服务。除非执行特定的维护任务,否则很少需要这样做。

db2 DEACTIVATE DATABASE sample

Db2 在实例(数据库管理器)和数据库级别提供了广泛的配置参数。您可以使用 CLP 查看和更新它们。

语法:

db2 GET DATABASE CONFIGURATION FOR <db_name>
# 短别名
db2 GET DB CFG FOR <db_name>

语法:

db2 UPDATE DB CFG FOR <db_name> USING <parameter_name> <value>

示例:增加主日志文件大小。

db2 UPDATE DB CFG FOR sample USING LOGFILSIZ 4096

注意:某些参数更改需要重新连接或重新激活数据库才能生效。

警告: 此命令不可逆,将永久删除数据库及其所有对象和所有数据。

您不能连接到您打算删除的数据库。

语法:

DROP DATABASE <db_name>

示例:

db2 DROP DATABASE sample

输出:

DB20000I The DROP DATABASE command completed successfully.