WEB开发网
开发学院数据库DB2 DB2 9 基础(730 考试)认证指南,第 3 部分: 访问... 阅读

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

 2009-01-22 16:39:08 来源:WEB开发网   
核心提示:什么组成了 DB2 数据库?数据库的逻辑、物理和性能特性DB2 数据库实际上由一个对象集合组成,从用户的角度来看,DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据,数据库是一组通常以某种方式相关联的表, 从数据库管理员(DBA,第 4 部分: 处理 DB2 数据 DB2 9 基础(730 考

什么组成了 DB2 数据库?

数据库的逻辑、物理和性能特性

DB2 数据库实际上由一个对象集合组成。从用户的角度来看,数据库是一组通常以某种方式相关联的表。

从数据库管理员(DBA,也就是您)的角度来看,数据库比这要复杂一点儿。实际的数据库包含许多物理对象和逻辑对象:

表、视图、索引、模式

锁、触发器、存储过程、包

缓冲池、日志文件、表空间

这些对象中的一部分(比如表或视图)帮助决定如何对数据进行组织。其他对象(比如表空间)涉及数据库的物理实现。最后,一些对象(比如缓冲池和其他内存对象)只处理如何管理数据库性能。

DBA 应该首先关注数据库的物理实现,而不是直接研究所有可能的参数和对象组合。如何创建数据库并分配它所需的磁盘存储?要正确地回答这个问题,需要了解数据库中的基本对象以及它们如何映射到物理磁盘存储。

DB2 存储模型

DB2 利用一个逻辑存储模型和一个物理存储模型来处理数据。用户操作的实际数据放在表 中。表由行和列组成,用户并不知道数据的物理表示。这一事实有时候称为数据的物理独立性。

表本身放在表空间 中。表空间作为数据库与包含实际表数据的容器对象之间的一层。表空间可以包含多个表。

容器 是一个物理存储设备。它可以由目录名、设备名或文件名标识。容器被分配给表空间。表空间可以跨许多容器,这意味着可以突破操作系统对于一个容器可以包含的数据量的限制。下图说明了所有这些对象之间的关系。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

尽管表是表空间中的基本对象,但是 DBA 必须了解 DB2 系统中的其他对象以及它们如何映射到表空间。

表、索引、长字段和表空间

表、索引和长字段(有时候称为二进制大对象,BLOB)是在 DB2 数据库中创建的对象。这些对象映射到表空间,表空间本身映射到物理磁盘存储。

表是数据记录的无序集合。它由列和行组成,行常常也称为记录。表可以是持久的表(基表)、临时的(声明)表或临时的(派生)表。从 DBA 的角度来看,空间都会分配给这些表对象,但是是在不同的表空间中。

索引 是与一个表相关联的物理对象。索引用来在表中实施惟一性(也就是说,确保没有重复的值)以及改进检索信息时的性能。运行 SQL(结构化查询语言)语句并不需要索引;但是,如果创建索引来提高查询处理的速度,您的用户会因此受益!

长字段(即 BLOB)是表中的一种数据类型。这种数据类型通常由非结构化数据(图像、文档、音频文件)组成,常常包含大量的信息。如果在表中存储这种类型的数据,就会在删除、插入和操作这些对象时导致过大的开销。所以并不是将它们直接放在表的行中,而是存储一个指针,这个指针链接到一个 Large 表空间(以前称为 Long Field 表空间)。DBA 需要了解这种数据类型,从而创建适当的表空间来包含这些对象。

另一种特殊的数据类型是 XML(eXtensible Markup Language,可扩展标记语言)。XML 这种数据类型可以存储在行中,也可以存储在与 BLOB 对象相似的单独的表空间中。XML 数据类型的独特之处在于,它可以跨一个表中的多个页面,而其他数据类型必须放在与行相同的页面中。DBA 需要利用应用程序设计器来决定表中存储的 XML 对象应该放在常规(数据)页面中,还是放在自己的单独的表空间中。如果检索性能是重要的因素,DBA 应该使用比较大的页面大小并将 XML 列放在与常规数据相同的表空间中。

有了关于这些对象类型的知识,现在就可以决定需要分配的空间类型了。

DMS 和 SMS 表空间

表空间是数据库与这个数据库中存储的表之间的逻辑层。表空间在数据库中创建,表在表空间中创建。DB2 支持三种表空间:

系统管理的空间(System-Managed Space,SMS):在这里,由操作系统的文件系统管理器分配和管理空间。在 DB2 9 之前,如果不带任何参数创建数据库或表空间,就会导致所有表空间作为 SMS 对象创建。

数据库管理的空间(Database-Managed Space,DMS):在这里,由数据库管理程序控制存储空间。这种表空间本质上是一种特殊用途的文件系统实现,可以最好地满足数据库管理程序的需要。

DMS 的自动存储(Automatic Storage With DMS):自动存储实际上不是一种单独的表空间类型,而是一种处理 DMS 存储的不同方式。DMS 容器需要比较多的维护(见后面的一节),在 DB2 V8.2.2 中引入了自动存储,作为简化空间管理的方式。

SMS 表空间需要的维护非常少。但是,与 DMS 表空间相比,SMS 表空间提供的优化选项少而且性能不好。

那么,应该选择哪种表空间设计呢?

DMS、SMS 与自动存储

尽管下面的表并不全面,但是它包含在 DMS、自动存储和 SMS 表空间之间进行选择时要考虑的一些因素。

特性 SMS DMS 自动存储
是否分段(Striping)?
默认类型 Version 8 Version 9
对象管理操作系统DB2DB2
空间分配按需增长/收缩预先分配;大小可以收缩和增长,但是需要 DBA 干预。 预先分配;可以自动增长。
管理的简便性最好;很少需要调优,甚至不需要 好,但是需要一些调优(例如, EXTENTSIZE PREFETCHSIZE)最好;很少需要调优,甚至不需要
性能非常好最好;可通过利用原始容器多获得 5% 到 10% 的收益最好;但是,可以不使用原始容器
表空间最大大小64GB(4K 页面)2TB(4K 页面)2TB(4K 页面)

除了使用 SMS 表空间可以简化管理之外,这两种存储模型之间最显著的差异是表空间的最大大小。在使用 SMS 时,DBA 最多只能在表空间中放 64GB 的数据。将页面大小改为 32K,可以将这个限制扩大到 512GB,但代价是每个页面上的可用空间可能会更少。改为 DMS 模型会将表空间限制扩大到 2TB(4K 页面大小的情况下)。如果将页面大小改为 32K,可用空间可以增长到 16TB。尽管还有让表大小突破 64GB 限制的其他方法,但是最简单的方法可能是一开始就使用 DMS 表空间。

DMS 与自动存储

DB2 8.2.2 引入了自动存储的概念。自动存储允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。在 DB2 9 中,数据库在创建时将启用自动存储,除非 DBA 显式地覆盖这个设置。

启用自动存储的数据库有一个或多个相关联的存储路径。表空间可以定义为 “由自动存储进行管理”,它的容器由 DB2 根据这些存储路径进行分配。数据库只能在创建时启用自动存储。对于在最初没有启用自动存储的数据库,不能在以后启用这个特性。同样,对于在最初启用了自动存储的数据库,也不能在以后禁用这个特性。

下面的表总结了管理非自动存储和自动存储之间的一些差异。

特性 非自动存储 自动存储
容器的创建 必须在创建表空间时显式地提供容器。 不能在创建表空间时提供容器;它们将由 DB2 自动地分配。
容器大小的调整 在默认情况下,表空间大小的自动调整是关闭的(AUTORESIZE NO)。 在默认情况下,表空间大小的自动调整是打开的(AUTORESIZE YES)。
初始大小不能使用 INITIALSIZE 子句指定表空间的初始大小。 使用 INITIALSIZE 子句指定表空间的初始大小。
容器的修改可以使用 ALTER TABLESPACE 语句(ADD、DROP、BEGIN NEW STRIPE SET 等等)执行容器操作。不能执行容器操作,因为由 DB2 控制空间管理。
管理的简便性可以使用重定向的恢复操作重新定义与表空间相关联的容器。不能使用重定向的恢复操作重新定义与表空间相关联的容器,因为由 DB2 控制空间管理。

引入自动存储模型的主要目的是简化 DMS 表空间的管理,同时保持其性能特征。有的时候 DBA 必须定义使用的表空间的所有特征,但是许多应用程序都会从自动存储提供的简化管理获益。

DB2 存储模型小结

我们在本节讨论了许多内容。我们来总结一下已经学到的 DB2 数据库知识。

数据库是一个对象集合,对象包括表、索引、视图和长对象。

这些对象存储在表空间中,表空间由容器组成。

表空间可以由操作系统管理(SMS),也可以由 DB2 管理(DMS,自动存储)。

应该主要根据性能和维护因素决定要使用的表空间类型。

既然已经掌握了不同类型的表空间,就该创建第一个数据库了。下一节将讲解如何创建数据库。

创建第一个数据库

First Steps

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。

第一个真正的数据库

从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。

DB2 创建了什么?

在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。

TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。

USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。

CREATE DATABASE 命令

DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
      '-DB-------'        '-| Database options |-'

数据库选项

CREATE DATABASE 选项:
|--+----------------------------+------------------------------->
  '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
  |   .-,---------.              |
  |   V      |              |
  '-ON----+-path--+-+--+----------------------+-'
      '-drive-'  '-DBPATH ON--+-path--+-'
                   '-drive-'
>--+-----------------------+------------------------------------>
  '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
  '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
  |        .-SYSTEM---------. |
  '-COLLATE USING--+-COMPATIBILITY--+-'
          +-IDENTITY-------+
          +-IDENTITY_16BIT-+
          +-UCA400_NO------+
          +-UCA400_LSK-----+
          +-UCA400_LTH-----+
          '-NLSCHAR--------'
>--+---------------------------------------+-------------------->
  '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
  '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
  '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

tblspace-defn:
|--MANAGED BY--------------------------------------------------->
           .-,------------------.
           V          |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
  |          .-,-----------------------------------------------.  |
  |          V                         |  |
  +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
  |           '-DEVICE-'                      |
  '-AUTOMATIC STORAGE---------------------------------------------------------'
>--+-----------------------------+------------------------------>
  '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
  '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
  '-AUTORESIZE--+-NO--+-' '-INITIALSIZE--integer--+-K|M|G-+-'
         '-YES-'              
>--+------------------------------------+----------------------->
  '-INCREASESIZE--integer--+-PERCENT-+-'
              '-+-K|M|G-'
>--+-------------------------------+----------------------------|
  '-MAXSIZE--+-NONE-------------+-'
       '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。

数据库位置

CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST
  AUTOMATIC STORAGE ON
  /db2/storagepath001,
  /db2/storagepath002,
  /db2/storagepath003
  AUTORESIZE YES
  INITIALSIZE 300 M
  INCREASESIZE 75 M
  MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

AUTORESIZE YES

当表空间用光空间时,系统将自动地扩展容器的大小。

INITIALSIZE 300 M

没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

INCREASESIZE 75 M (或百分数)

当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

MAXSIZE NONE

表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。

代码页和整理次序

所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESET 和 TERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。

表空间定义

三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+-------------------->
  '-CATALOG TABLESPACE--| tblspace-defn |-'
 
>--+------------------------------------+----------------------->
  '-USER TABLESPACE--| tblspace-defn |-'
 
>--+-----------------------------------------+------------------>
  '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
 
           .-,------------------.
           V          |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
  |          .-,-----------------------------------------------.  |
  |          V                         |  |
  '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
             '-DEVICE-'
 
>--+-----------------------------+------------------------------>
  '-EXTENTSIZE--number-of-pages-'
 
>--+-------------------------------+---------------------------->
  '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILE 或 DEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE number of pages

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 K、M 或 G。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE number of pages

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 K、M 或 G。

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。

CREATE DATABASE 命令示例

下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2) DFT_EXTENT_SZ 4
( 3) CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)  (FILE 'C:CATCATALOG.DAT' 2000, FILE 'D:CATCATALOG.DAT' 2000)
( 5)  EXTENTSIZE 8
( 6)  PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8) ('C:TEMPTS','D:TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)  (FILE 'C:TSUSERTS.DAT' 121)
(11)  EXTENTSIZE 24
(12)  PREFETCHSIZE 48

我们来详细地看看每一行:

CREATE DATABASE:这个语句定义要创建的数据库的名称。

DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

FILE 'C:....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

EXTENTSIZE 8:EXTENTSIZE 是 8 个页面。

PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

'C:TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

FILE 'C:TS...':这个空间只有一个容器,它由 121 个页面组成。

EXTENTSIZE 24:USER 表空间的 EXTENTSIZE 是 24 个页面。

PREFETCHSIZE 48:查询将同时预获取 48 个页面。

数据库创建小结

本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

对 DB2 数据库进行编目

为什么要对数据库进行编目?

在创建数据库时 DB2 会自动地对数据库进行编目。它在本地数据库目录中为数据库编写一个条目,在系统数据库目录中编写另一个条目。如果数据库是从远程客户机(或者是从同一台机器上另一个实例执行的客户机)创建的,那么也会在客户机实例上的系统数据库中创建一个条目。

那么,为什么必须对数据库进行编目?如果没有编目信息,应用程序就无法连接数据库!DB2 有多个用来访问数据库的目录。这些目录让 DB2 能够找到已知的数据库,无论它们是在本地系统上,还是在远程系统上。系统数据库目录包含一个列表和指针,它们指出可以找到每个已知数据库的地方。节点目录包含的信息指出如何以及在哪里能够找到远程系统或实例。要在这些目录中放进一个条目,需要使用 CATALOG 命令。要删除条目,应该使用 UNCATALOG 命令。

CATALOG 命令

CATALOG 命令的语法图如下。

>-CATALOG--+-DATABASE-+--database-name--+-----------+---------->
      '-DB-------'         '-AS--alias-'
>--+-------------------+---------------------------------------->
  +-ON--+-path--+-----+
  |   '-drive-'   |
  '-AT NODE--nodename-'
>--+--------------------------------------------------------------+-->
  '-AUTHENTICATION--+-SERVER-----------------------------------+-'
           +-CLIENT-----------------------------------+
           +-SERVER_ENCRYPT---------------------------+
           +-KERBEROS TARGET PRINCIPAL--principalname-+
           +-DATA_ENCRYPT-----------------------------+
           '-GSSPLUGIN--------------------------------'
>--+------------------------+---------------------------------->
  '-WITH--"comment-string"-'

对数据库进行编目相当简单明了。在一般情况下,在创建数据库时不需要这个步骤。但是,如果以前没有对数据库进行过编目,希望为这个数据库设置一个 ALIAS(替代名),或者需要从客户机访问这个数据库,那么可能需要这么做。

在客户机上进行编目

需要连接 DB2 数据库的用户应该在本地工作站上对数据库进行编目。为此,用户要使用 CATALOG 命令或 DB2 Configuration Assistant(CA)。CA 允许维护应用程序可以连接的一个数据库列表。它对节点和数据库进行编目,而对用户隐藏了这些任务固有的复杂性。(关于 Configuration Assistant 的更多信息,请参考 本系列中的第一个教程。)

在客户机上对数据库进行编目有三种方法:

使用发现的自动配置

使用访问配置文件的自动配置

手工配置

教程中将描述所有这些方法。从客户机的角度来看,使用配置文件或发现对数据库进行编目是最容易的方法。手工配置要求了解数据库的位置和特征才能成功地执行命令。

要使用自动配置,DBA 必须为他的用户生成配置文件,或者在 DB2 数据库中设置发现服务。在本教程中,我们不介绍创建这些设施的细节,但是建议您阅读 DB2 管理手册来了解这些特性的更多细节。

使用发现的自动配置

如果使用这种自动配置,那么不需要提供任何详细的通信信息,就能够让 DB2 客户机与 DB2 服务器进行联系。

要想使用发现特性将数据库添加到系统中,需要执行以下步骤。(注意,必须运行并启用 DB2 Administration Server,CA 的发现特性才能返回关于本地 DB2 系统的信息。)

启动 CA。启动 CA 的方法是在 Windows 上通过 Start 菜单,或者在 Windows 或 UNIX 上通过 db2ca 命令。

在 CA 菜单栏上在 Selected 下面,选择 Add Database Using Wizard。

选择 Search the Network 单选按钮并点击 Next。

双击 Known Systems 旁边的文件夹,列出客户机已知的所有系统。

点击一个系统旁边的加号( +),列出这个系统上的实例和数据库。选择要添加的数据库,然后点击 Next。

在 Database Alias 字段中输入本地数据库别名。如果愿意,还可以在 Comment 字段中输入描述这个数据库的注释。

如果计划使用 ODBC,那么将这个数据库注册为 ODBC 数据源。必须已经安装了 ODBC 才能执行这个操作。

点击 Finish。

现在就可以使用添加的数据库了。

使用访问配置文件的自动配置

访问配置文件是另一种配置 DB2 客户机来远程访问 DB2 服务器及其数据库的自动方法。访问配置文件包含客户机对 DB2 服务器上的数据库进行编目所需的信息。

与发现特性一样,在使用访问配置文件时,不需要提供任何详细的通信信息,就能够让 DB2 客户机与 DB2 服务器进行联系。

有两种访问配置文件:

服务器访问配置文件 是从 DB2 服务器创建的。它们包含 DB2 服务器已经编目的所有实例和数据库的相关信息。

客户机访问配置文件 用来在客户机之间复制编目的数据库和/或客户机设置(DBM CFG,CLI/ODBC)。

这两种配置文件都可以从一个 DB2 系统导出,然后导入另一个 DB2 系统。

通常会使用访问配置文件配置大量客户机。可以使用 DB2 Control Center 导出并导入服务器访问配置文件。(关于 Control Center 的更多信息,请参考 本系列中的第一个教程。)使用 Configuration Assistant(CA)导出并导入客户机访问配置文件。

如果有大量需要配置的客户机,还应该考虑使用 LDAP(轻量目录访问协议)。可以使用 LDAP 将编目信息存储在一个中心位置。每个客户机只需要知道这个中心位置,就能够连接网络上可用的任何数据库。关于 LDAP 的更多细节请参考 DB2 Administration Guide。

手工配置

还可以手工配置数据库连接。为此,需要知道在客户机和服务器之间设置通信的细节。

可以对主机数据库使用手工配置;使用发现特性通过 DB2 Connect 服务器进行连接;或者按照前面的描述使用来自客户机的间接连接的信息。手工配置连接有两种方法:

使用 CA 中的 Manual 选项。在这种情况下,会通过 GUI 界面提示您输入所需的所有值。

使用 CATALOG NODE/DB 命令。在这种情况下,必须知道命令的语法并从命令行界面输入命令。

在这两种情况下,都可以通过手工配置利用在使用自动方法时不可用的一些高级选项,例如可以选择在哪里执行身份验证。

命令行 CATALOG NODE/DB 方法是这两者中比较麻烦的,但是它有一个优点:可以将配置步骤保存成脚本,这样就可以在必要时重新进行配置。

使用 CA 对数据库进行编目

在下面几节中,您将看到使用 Configuration Assistant 对数据库进行手工编目所需的步骤。

在开始之前,需要知道以下信息:

包含数据库的服务器实例所支持的协议之一

配置服务器实例连接所需的协议连接信息

服务器名

远程服务器上数据库的名称

从 DB2 文件夹中选择 Configuration Assistant 来调出最初的 CA 屏幕。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

选择这个程序之后,将显示以下屏幕。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

这个屏幕的顶部显示系统上当前已经编目的数据库的列表。用户可以使用各种菜单项配置数据库连接,但是 DBA 感兴趣的选项是 Selected 菜单中的 Add Database Using Wizard 按钮:

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

选择 Add 启动 Add Database Wizard。

下面几节描述配置客户机所需的每个步骤。

CA:要使用哪种方法?

CA 向导的第一个面板询问您希望使用哪种方法来对数据库进行编目。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

向导提供了三种对数据库进行编目的方法:

使用配置文件

搜索网络

手工配置连接

我们感兴趣的选项是手工配置。(正如前几节所描述的,对于希望在客户机上对数据库进行编目的用户,使用配置文件或搜索网络要容易得多。)

既然选择了手工配置选项,就需要选择希望使用的通信协议。

CA:通信协议

在下面的面板中,选择用来连接数据库的协议。根据协议修改 Protocol Parameters 框的内容。下面是可以选择的协议以及它们的一些参数:

TCP/IP:服务器主机名/IP 地址、端口号

NetBIOS:服务器工作站名、适配器号

Named Pipe:服务器计算机名、实例

APPC/APPN:服务器符号式的目的地名

LOCAL:这个机器上的本地数据库

这里列出了 DB2 支持的所有协议。如果选择 APPC,操作系统选择是 OS/390、z/OS、OS/400、VM 或 VSE。Windows 和 UNIX 上的 DB2 服务器不再接受使用 APPC 的客户机连接。但是,如果安装了 DB2 Connect,DB2 客户机仍然可以连接主机系统。

如果选择 TCP/IP,那么选择是基于 LAN 的、OS/390、z/OS、OS/400 或 VM。

在点击 Finish 之前,应该检查机器是否在网络上正确地配置了。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

CA:通信细节

现在,输入要进行编目的数据库的通信细节。这个屏幕因通信协议而异。在下面的示例中,数据库与客户机在同一台机器上(本地)。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

CA:数据库细节

现在,输入要进行编目的数据库的细节。在 Database Name 字段中输入数据库的名称(服务器上的名称)。可以接受同样的名称作为数据库的本地别名,或者将别名改为您选择的名称。如果愿意,还可以输入描述。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

CA:ODBC 设置

可以将数据库注册为 ODBC 数据源。如下图所示,在默认情况下选中了这个选项。可以从 Optimize for Application 菜单选择某个应用程序,从而对这个应用程序的 ODBC 设置进行优化。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

如果计划对这个数据库运行 Windows 应用程序,您应该熟悉这种环境中可用的各种优化设置。

CA:节点、系统和安全选项

Configuration Assistant 中还显示另外三个面板。Security Options 对于任何类型的数据库都会显示,但是 Node 和 System 面板只对于远程数据库才会显示。

节点信息:如果计划使用 Control Center,那么应该填写节点信息,因为这会影响这个工具的行为。通过服务器上的 DB2SYSTEM 和 DB2INSTANCE 值给出系统和实例名。还应该选择远程系统的操作系统。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

系统信息:需要提供系统信息,包括数据库所在的远程系统的系统、主机和操作系统。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

安全信息:可以指定对用户的身份验证在哪里执行(在服务器上,这是默认设置;在客户机上;或在主机或 OS/400 上)。还可以为 TCP/IP 连接选择 SOCKS 安全,这允许访问防火墙之外的远程数据库。(关于 DB2 安全的更多信息,请参考 本系列中的第二个教程。)

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

CA:成功的编目操作

在 CCA Catalog 屏幕上点击 Finish 之后,DB2 将尝试对数据库进行编目。如果成功了,就会显示以下窗口:

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

现在,可以测试连接,确保客户机可以与数据库进行通信。如果测试成功,现在就可以使用应用程序来访问 DB2 数据库。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

编目小结

在创建 DB2 数据库的服务器上通常不需要对它进行编目。但是,要想从客户机访问数据库,客户机就必须先在本地对数据库进行编目,这样应用程序才能访问它。

可以使用 CATALOG 命令对数据库进行编目,但是 Configuration Assistant(CA)可以用来进行自动发现和对数据库进行编目,这要简单得多。

如果不愿意在每个客户机上对数据库进行编目,DBA 还可以使用 LDAP 服务创建一个存储数据库信息的中心存储库。

用 Control Center 操纵 DB2 对象

使用 Control Center

Control Center 是 DB2 管理的中心点。Control Center 向用户提供执行日常数据库管理任务所需的工具。它允许轻松地访问其他服务器管理工具、给出整个系统的清晰的视图、执行远程数据库管理并对复杂的任务提供一步步的帮助。

既然是这样,我们为什么还要费那么多力气学习如何从命令行创建数据库?尽管 Control Center 会使 DBA 的生活更轻松,但是有时候希望创建脚本来自动地创建对象或进行数据库维护。Control Center 可以帮助您生成、管理和调度这些脚本,但是脚本都是作为 DB2 命令运行的。在某些情况下,在您使用的操作系统上可能没有 Control Center 可用,所以没有别的办法,只能使用 DB2 命令。

从 DB2 程序组中的 General Administration 文件夹调用 Control Center:

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

显示的屏幕与下图相似:

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

Systems 对象代表本地和远程机器。要显示系统已经进行编目的所有 DB2 系统,应该点击 Systems 旁边的加号( +),展开这个对象。屏幕左边会列出 DB2 系统(本地和远程)。在这个图中,系统 LOCAL 包含 DB2 实例 DB2,这个实例中包含数据库 SAMPLE。当 Tables 突出显示时,在 Contents 面板中显示关于每个系统的详细信息。上图中显示了 SAMPLE 数据库中现有的许多表。

Control Center 的主要组件如下:

菜单栏:用来访问 Control Center 功能和在线帮助。

工具栏:用来访问其他管理工具。

Objects 面板:显示在 Control Center 窗口的左边。它包含可以从 Control Center 进行管理的所有对象以及它们之间的关系。

Contents 面板:这显示在 Control Center 窗口的右边,其中包含属于或对应于 Objects 面板中选择的对象的对象。

Contents 面板工具栏:这些图标用来调整 Contents 面板中对象和信息的视图。还可以在 View 菜单中选择这些功能。

Details 面板:Details 面板显示关于选择的对象的详细信息。

在 Control Center 中还有鼠标停留帮助,在将鼠标指针移动到工具栏上的每个图标上时,会提供对图标的简短描述。

创建和操作数据库

Control Center 可以用来创建和管理数据库。还记得前面曾经使用 CREATE DATABASE 命令来创建数据库吗?在下面,您将看到如何使用 Control Center 完成同样的任务。

在 Control Center 的左边(Objects 面板),将鼠标移动到 Database 关键字上并右击它。这时会显示一个选项菜单,提供对于数据库可用的选项。在这种情况下,选择 Create Database => Standard...,如下图所示。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

选择这个选项之后,DB2 将显示一系列面板,需要填写这些面板来创建数据库。接下来,您将看到如何使用这些向导简化一些常见的 DBA 任务。

Create Database 向导:数据库名称

Create Database 向导将带领您执行许多步骤来生成数据库。第一个屏幕询问数据库的名称、创建它的默认驱动器(如果没有指定其他驱动器,就会使用这个驱动器)和别名。另外,可以添加关于数据库内容的注释。

关于第一个面板有几点需要特别注意。如果希望在数据库中使用 XML 列,那么它必须定义为 UTF-8(Enable database for XML)。另外,在 DB2 9 中自动存储是数据库的默认设置。如果希望覆盖这个默认设置,就必须选择 I want to manage my storage manually。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

Create Database 向导:用户/编目/临时表

向导的后三个面板要求填写关于如何创建用户、编目和临时表空间的信息。如果选择 Low Maintenance 选项,向导就会创建 SMS 表空间。如果选择 High Performance,就需要指定用于这个表空间的设备和文件系统。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

无论选择哪个选项,都可以指定希望分配给这个表空间的容器(文件、设备)。如果点击 Add 按钮,将会显示另一个面板,可以在这里定义要使用的容器。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

如果没有为表空间指定容器或文件,DB2 将在前面指定的默认驱动器上自动地生成一个。

Create Database 向导:性能选项

可以设置两个性能参数:EXTENTSIZE 和 PREFETCHSIZE。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

我们来看这两个参数的作用:

EXTENTSIZE:区段(extent) 是表空间的容器中的一个空间单元。数据库对象(除了 LOB 和 long varchar 之外)都存储在 DB2 中的页面 中。这些页面组合成区段。区段大小是在表空间级定义的。一旦为表空间指定了区段大小,就不能改变了。数据库配置参数 DFT_EXTENT_SZ 指定数据库中所有表空间的默认区段大小。这个值的范围是 2 到 256 个页面;因此,绝对大小是从 8 KB 到 1024 KB(对于 4 KB 页面),或者从 16 KB 到 2048 KB(对于 8 KB 页面)。可以在 CREATE TABLESPACE 语句中使用 EXTENTSIZE 参数覆盖这个数字。

如果打算在表的设计中使用多维聚簇(MDC),区段就是一个重要的设计决定。MDC 表将为创建的每个新的维集分配一个区段。如果区段太大,那么区段的很大一部分有可能是空的(对于包含很少记录的维集)。关于 MDC 及其对 EXTENTSIZE 的影响的更多信息,请参考 DB2 Administration Guide。

PREFETCHSIZE:连续的预获取是指数据库管理程序能够提前预测查询,在实际引用页面之前读取这些页面。这种异步的检索可以显著减少执行时间。可以通过修改 CREATE TABLESPACE 语句中的 PREFETCHSIZE 参数来控制执行预获取的积极程度。在默认情况下,这个值设置为 DFT_PREFETCH_SZ 数据库配置参数。这个值代表在 DB2 触发预获取请求时每次读取多少个页面。通过将这个值设置为区段大小的倍数,可以并行地读取多个区段。当表空间的容器在不同的硬盘上时,这个功能甚至效率更高。

这些参数的默认值对于许多应用程序是合适的,但是对于执行许多查询或分析大量数据的应用程序,可以考虑设置更高的 PREFETCHSIZE。

Create Database 向导:代码页和整理次序

在数据库创建过程中,遇到的下一个选项涉及代码页和整理次序。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

当一个 DB2 应用程序绑定到 DB2 数据库时,会对应用程序和数据库的代码页进行比较。如果它们的代码页不相同,就会尝试对每个 SQL 语句执行代码页转换。如果使用与访问的数据库不同的代码页,那么一定要确保代码页是兼容的并可以执行转换。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的编码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。在需要以本机(二进制)格式存储数据时,要避免使用有代码页的数据类型。一般情况下,使用相同的应用程序代码页和数据库代码页是有好处的,可以避免进行代码页转换。

Create Database 向导:创建总结

在系统中输入所有参数之后,Create Database 向导将显示一个总结屏幕,其中总结了您做出的所有选择。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

总结页面上一个极其有用的特性是 Show Command 按钮。如果按下它,就会看到用来创建数据库的 DB2 命令,如下图所示。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

可以保存这个命令以便在以后执行,或者将它复制和粘贴到正在开发的脚本中。如果对输入到系统中的参数满意了,就点击 Finish 按钮来创建数据库。

Control Center 小结

DB2 Control Center 是一种能够使日常数据库维护大大简化的强大工具。各种向导可以帮助您创建或修改许多数据库对象。

还可以使用 Control Center 生成 DB2 命令,从而以后在脚本或程序中使用。这个特性允许开发要使用的命令,而不必实际执行它。

创建和访问基本的 DB2 对象

更多的 Control Center 技巧

尽管 Control Center 对于创建数据库非常有用,但是它还有许多功能,可以用来创建、修改或删除几乎任何数据库对象。我们来看看 Control Center 中的其他功能。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

在屏幕的左边是 Objects 面板。如果要创建新对象,将鼠标放在对象类型(比如表)上并右击它。对于大多数对象,这时会显示一个选项菜单,包括创建对象的选项。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

作为 DBA,您应该熟悉这些 Create 按钮。这些向导对于判断如何生成 DB2 命令非常有用。可以将 Show Command 按钮作为一种出色的学习工具使用。即使是经验丰富的 DBA 也可以使用 Control Center 生成很少使用的命令!

修改现有的对象

通过在 Objects 面板中的对象名上右击,创建新的对象。如果需要修改或删除一个对象,那么需要在 Control Center 右边的 Contents 面板中显示它。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

在上图中,Contents 面板中列出了 SAMPLE 数据库中的表。既然显示了这些表,就可以修改它们了。右击要修改的对象,就会看到下面的菜单:

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

对于表对象可以执行许多操作。例如,可以查看表的内容示例、修改表或进行重组。

DBA 感兴趣的两个命令是 Show Related 和 Generate DDL 命令。Show Related 显示与这个表相关的所有数据库对象,比如索引或表空间。Generate DDL 命令将对表的定义进行反向工程,这样就可以在失败时重新设计表。(当然,总是应该对数据库进行备份。)

Details 面板

Control Center 还包含 Details 面板,它提供关于 Object 面板中选择的项目的详细信息。这个特性相当有用,因为它使用户能够快速地查看表的定义。例如,在选择表时,Details 面板将显示表模式(列定义),还有显示表内容、查询表或显示相关对象的选项。

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据

如果选择另一种类型的对象,Details 面板将显示适合所选对象类型的操作选项。

结束语

DB2 Control Center 还可以用来修改数据库中现有的对象。对于每种对象类型,会显示相应的选项。

DBA 在 Control Center 中执行的大多数操作都可以被捕捉并保存在脚本中。这个特性和命令向导可以减少输入命令的工作量,从而大大简化数据库维护。

关于 DB2 Control Center 的更多信息可以在工具提供的在线帮助中找到。另外,DB2 Administration Guide 和 DB2 Command Reference 提供了关于数据库特性和功能以及如何设计数据库来获得最佳性能的大量信息。这些书是出色的参考资料,在设计自己的数据库时应该把它们放在手边!

本系列其他教程推荐

DB2 9 基础(730 考试)认证指南,第 1 部分: DB2 规划 1

DB2 9 基础(730 考试)认证指南,第 1 部分: DB2 规划 2

DB2 9 基础(730 考试)认证指南,第 2 部分: 安全性

DB2 9 基础(730 考试)认证指南,第 4 部分: 处理 DB2 数据

DB2 9 基础(730 考试)认证指南,第 5 部分: 处理 DB2 对象

DB2 9 基础(730 考试)认证指南,第 6 部分: 数据并发性

DB2 9 基础(730 考试)认证指南,第 7 部分: XQuery 简介

Tags:DB 基础 考试

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接