2006-4-20 14:51
ericsson
开始学习DB2了,在线直播写笔记
早就想好好学学这个鬼东西,前些日子准备开工,可又被杂事所扰,终于,都忙得差不多了,强迫自己从今天开始,学习DB2 。 肯定有好多错误和不对的地方,各位老大多多指点我。:handshake
[b]一、 安装DB2 V8[/b]
今天找了台机器,AIX5.3 ML03,安装DB2 过程太简单了,这里就不说了
创建instance :
[b]$ db2icrt -a SERVER -s ese -u db2fenc1 -w 64 -p db2c_db2inst1 db2inst1[/b]
后来发现,如果直接写:
[b]$ db2icrt -a SERVER -s ese -u db2fenc1 -w 64 -p DB2_db2inst1 db2inst1[/b]
估计后面就不需要重新update dbm cfg using SVCENAME ………… 了。
__________________________________________________________________________________
知识点学习补充:
实例是一个逻辑数据库管理器环境,可在其中编目数据库并设置配置参数。根据需要,可创建多个实例。可使用多个实例执行以下操作:
将一个实例用作开发环境,将另一个实例用作生产环境。
调整一个实例以用作特定的环境。
限制对敏感信息的存取。
控制每个实例中对 SYSADM、SYSCTRL 和 SYSMAINT 权限的指定。
优化每个实例的数据库管理器配置。
限制实例失败所带来的影响。若一个实例失败,则只影响一个实例。其它实例可继续正常运行。
应注意多个实例存在一些小缺点:
每个实例都需要额外的系统资源(虚拟内存和磁盘空间)。
由于要管理附加实例,因此增加了管理工作量。
实例目录存储着与一个数据库实例相关的所有信息。实例目录一旦创建,就不能更改其位置。该目录包含:
数据库管理器配置文件
系统数据库目录
节点目录
节点配置文件(db2nodes.cfg)
包含调试信息(例如异常或寄存器转储或用于 DB2(R) 通用数据库(DB2 UDB)进程的调用堆栈)的其它任何文件。
在 UNIX(R) 操作系统上,该实例目录位于 [b]INSTHOME/sqllib [/b]目录,其中 INSTHOME 是实例所有者的主目录。
[[i] 本帖最后由 ericsson 于 2006-4-29 15:24 编辑 [/i]]
2006-4-20 15:31
ericsson
[b]二、安装 DB2 UDB 修订包[/b]
这文章网上也有,自己去下载最新的或者你需要的fixpack ,ftp , compress -d , tar 之类的命令折腾之后,开始准备安装。不过安装之前要注意如下几点:
A、在每个 DB2 实例上,您都必需注册为实例所有者并执行:
1.DB2“force applications all”命令,以强制执行该实例的所有应用程序。
2.DB2“terminate”,以停止所有后端 DB2 进程。
3.db2stop,以停止实例服务。
4.db2licd end,以停止许可证守护程序。
B、注册为 admin 服务器所有者并用 db2admin stop 命令停止 admin 服务器。
然后就可以安装了,用Root用户执行
[b]./installFixPak -y [/b]
Checking level of DB2 V8 installation...
Running update all
现在就开始update了。:victory:
+-----------------------------------------------------------------------------+
Summaries:
+-----------------------------------------------------------------------------+
Installation Summary
--------------------
Name Level Part Event Result
-------------------------------------------------------------------------------
db2_08_01.ch.zh_CN.eucCN 8.1.1.104 USR APPLY SUCCESS
db2_08_01.ch.en_US.iso88591 8.1.1.104 USR APPLY SUCCESS
db2_08_01.cc 8.1.1.104 USR APPLY SUCCESS
db2_08_01.sqlproc 8.1.1.104 USR APPLY SUCCESS
db2_08_01.repl 8.1.1.104 USR APPLY SUCCESS
db2_08_01.pext 8.1.1.104 USR APPLY SUCCESS
db2_08_01.msg.zh_CN.utf8 8.1.1.104 USR APPLY SUCCESS
db2_08_01.msg.zh_CN.gbk 8.1.1.104 USR APPLY SUCCESS
db2_08_01.msg.zh_CN.eucCN 8.1.1.104 USR APPLY SUCCESS
db2_08_01.msg.en_US.iso8859 8.1.1.104 USR APPLY SUCCESS
db2_08_01.ldap 8.1.1.104 USR APPLY SUCCESS
db2_08_01.jhlp.zh_CN.eucCN 8.1.1.104 USR APPLY SUCCESS
db2_08_01.jhlp.en_US.iso885 8.1.1.104 USR APPLY SUCCESS
db2_08_01.jdbc 8.1.1.104 USR APPLY SUCCESS
db2_08_01.inst 8.1.1.104 USR APPLY SUCCESS
db2_08_01.icut 8.1.1.104 USR APPLY SUCCESS
db2_08_01.icuc 8.1.1.104 USR APPLY SUCCESS
db2_08_01.fs 8.1.1.104 USR APPLY SUCCESS
db2_08_01.essg 8.1.1.104 USR APPLY SUCCESS
db2_08_01.dj 8.1.1.104 USR APPLY SUCCESS
db2_08_01.db2.samples 8.1.1.104 USR APPLY SUCCESS
db2_08_01.db2.rte 8.1.1.104 USR APPLY SUCCESS
db2_08_01.das 8.1.1.104 USR APPLY SUCCESS
db2_08_01.cs.rte 8.1.1.104 USR APPLY SUCCESS
db2_08_01.conv 8.1.1.104 USR APPLY SUCCESS
db2_08_01.conn 8.1.1.104 USR APPLY SUCCESS
db2_08_01.cnvucs 8.1.1.104 USR APPLY SUCCESS
db2_08_01.client 8.1.1.104 USR APPLY SUCCESS
db2_08_01.cj 8.1.1.104 USR APPLY SUCCESS
db2_08_01.ca 8.1.1.104 USR APPLY SUCCESS
db2_08_01.db2.engn 8.1.1.104 USR APPLY SUCCESS
db2_08_01.ca 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.cc 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.ch.en_US.iso88591 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.ch.zh_CN.eucCN 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.db2.samples 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.fs 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.icuc 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.icut 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.jhlp.en_US.iso885 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.jhlp.zh_CN.eucCN 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.msg.en_US.iso8859 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.pext 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.client 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.cj 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.cnvucs 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.conv 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.db2.rte 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.jdbc 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.ldap 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.msg.zh_CN.eucCN 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.msg.zh_CN.gbk 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.msg.zh_CN.utf8 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.repl 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.sqlproc 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.conn 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.cs.rte 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.das 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.db2.engn 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.dj 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.essg 8.1.1.104 USR COMMIT SUCCESS
db2_08_01.inst 8.1.1.104 USR COMMIT SUCCESS
Log saved in /tmp/installFixPak.log.8.1.1.104
太慢了,等了将近15分钟, update over . 不过不能着急,还需要update 一下instance 才行。
[b]/usr/opt/db2_08_01/instance#./db2iupdt -a SERVER -w 64 -u db2fenc1 -e db2inst1[/b]
DBI1070I Program db2iupdt completed successfully.
Ok ,现在可以重新启动instance了。
2006-4-20 15:43
ericsson
[b]三、基本设置[/b]
启动instance
[b]$db2start[/b]
04/20/2006 03:33:37 0 0 SQL5043N Support for one or more communications protocols failed to start successfully. However, core database manager functionality started successfully.
SQL1063N DB2START processing was successful.
有failed 的字样,看来还需要设置些什么
1、db2set -i db2inst1 DB2COMM=tcpip
2、db2 update dbm cfg using SVCENAME DB2_db2inst1
再次启动INSTANCE
[b]db2stop[/b]
04/20/2006 03:42:38 0 0 SQL1064N DB2STOP processing was successful.
SQL1064N DB2STOP processing was successful.
[b]$db2start[/b]
04/20/2006 03:42:45 0 0 SQL1063N DB2START processing was successful.
SQL1063N DB2START processing was successful.
呵呵,那个failed 没有了。
要允许实例在每次系统重新启动后自动启动,输入以下命令:
[b] db2iauto -on db2inst1[/b]
要阻止实例在每次系统重新启动后自动启动,输入以下命令:
[b] db2iauto -off db2inst1[/b]
删除实例的命令:
[b][r6test]/usr/opt/db2_08_01/instance#./db2idrop db2inst1[/b]
[[i] 本帖最后由 ericsson 于 2006-4-26 09:54 编辑 [/i]]
2006-4-20 15:58
ericsson
[b]四、一些命令[/b]
1、db2licm 许可管理工具
db2licm -l 或者 db2licm -? 看看结果就知道了。
[b]DBI1401I Command line DB2 License Manager. [/b]
Explanation:
The db2licm tool performs basic license functions in the absence
of the Control Center. It adds, removes, lists, and modifies
licenses installed on the local system.
To determine the product identifier for your product issue the
db2licm -l command.
db2licm [-a filename]
[-e product-identifier HARD | SOFT]
[-p product-identifier
REGISTERED | CONCURRENT | OFF]
[-r product-identifier]
[-u product-identifier num-users]
[-c product-identifier num-connectors]
[-n product-identifier num-processors]
[-l]
[-v]
[-?]
The command options are:
-a Adds a license for a product. Specify a file name containing
valid license information. This can be obtained from your
licensed product CD or contact your IBM representative or
authorized dealer.
-e Updates the enforcement policy on the system. Valid values
are: HARD and SOFT. HARD specifies that unlicensed requests will
not be allowed. SOFT specifies that unlicensed requests will be
logged but not restricted.
-p Updates the license policy type to use on the system. The
keywords CONCURRENT, REGISTERED, or CONCURRENT REGISTERED can be
specified. Specify OFF to turn off all policies.
-r Removes the license for a product. After the license is
removed, the product functions in "Try & Buy" mode.
-u Updates the number of user entitlements that have been
purchased. Specify the password of the product for which the
entitlements were purchased and the number of users.
-c Updates the number of connector entitlements that have been
purchased. Specify the password of the product for which the
entitlements were purchased and the number of connectors.
-n Updates the number of entitled processors. Specify the
number of processors that you are entitled to use this product
with.
-l Lists all the products with available license information,
including the product identifier.
-v Displays version information.
-? Displays help information. When this option is specified,
all other options are ignored, and only the help information is
displayed.
2、启动停止instance 的 db2start and db2stop
3、设置系统重新启动后instance 自动启动的方法,在/usr/opt/db2_08_01/instance中,用Root用户执行:
[b]db2iaotu -on db2inst1[/b] 开
[b]db2iaotu -off db2inst1[/b] 关
4、确定哪一个instance 用于当前会话 ,用db2inst1用户执行
[b] db2 get instance [/b]
5、设置当前instance
[b] db2 set db2instance <new_instance_name>[/b]
要在注册表全局级设置DB2INSTDEF注册表变量,输入:
[b]db2set db2instdef=<new_instancename>[/b]
6、获得系统上可用的所有instance
[b] db2ilist [/b]
还有很多很多,慢慢的看吧:victory:
2006-4-21 08:58
ericsson
惭愧,就我这两把刷子,一夜之间竟成版主 :L 。 继续读书。。。。。。。。
2006-4-21 09:27
大漠孤星
[quote]原帖由 [i]ericsson[/i] 于 2006-4-21 08:58 发表
惭愧,就我这两把刷子,一夜之间竟成版主 :L 。 继续读书。。。。。。。。 [/quote]
不是只有比尔.盖茨能当斑竹。。我们需要的是技术,对论坛热情兼备的人才。
2006-4-21 10:57
wcp2004
说得好,能把自己做的东西写出来,供大家分享,敬佩!望继续!
2006-4-21 11:38
ericsson
[b]五、概要文件注册表和环境变量 [/b]
使用db2set 命令更新注册表变量,而不需要重新引导,此信息会立即存储在概要文件注册表中,该注册表将更新的信息应用于更改后启动的DB2 UDB服务器实例和应用程序。
[b]四个概要文件注册表: [/b]
1、实例级别概要文件注册表 db2set -i
2、全局级别概要文件注册表 db2set -g
3、实例节点级别概要文件注册表 db2set -i <instance name> <nodename>
4、实例概要文件注册表 db2set -i
[b]声明注册表和环境变量[/b]
db2set 命令支持本地声明注册表变量和环境变量
显示db2set 命令帮助信息 db2set ?
[b]列出所有受支持的注册表变量的完整集合[/b]
db2set -lr
[b]列出当前实例或者缺省实例的所有已定义的注册表变量[/b]
db2set
[b]列出概要文件注册表中所有定义的注册表变量[/b]
db2set -all
[b]显示一个注册表变量在当前实例或者缺省实例中的值[/b]
db2set registry_variable_name
[b]显示一个注册表变量在所有级别的值[/b]
db2set registry_variable_name -all
[b]更改一个注册表变量[/b]
db2set registry_variable_name=new_value
[b]更改该实例中所有数据库的注册表变量缺省值[/b]
db2set registry_variable_name=new_vaue -i instance_name
[b]更改系统中所有实例的注册表变量缺省值[/b]
db2set registry_variable_name=new_value -g
还有一些,不一一列出。
在看环境变量这部分,重点几个文件及其权限,感觉很重要
[b]实例级别概要文件注册表[/b] 文件位于
INSTHOME/sqllib/profile.env
权限 : -rw-rw-r-- <db2inst1> <db2iadm1> profile.env
[b]全局级别概要文件注册表[/b] 文件位于
/var/db2/<version_id>/default.env
该文件的存取许可权和所有权应该是
-rw-rw-r-- <instance_owner> <instance_owner_group> default.env
[b]实例节点级别概要文件注册表[/b] 文件位于
INSTHOME/sqllib/nodes/<node_number>.env
[b]实例概要文件注册表[/b] 文件位于
/var/db2/<version_id>/profiles.reg
权限: -rw-r--r-- root system profiles.reg
再详细补充一下:
为了正确地管理 DB2 概要文件注册表,在 UNIX 操作系统上必须遵循下列文件所有权规则。
“DB2 实例级概要文件注册表”文件位于:
INSTHOME/sqllib/profile.env
此文件的存取许可权和所有权应该是:
-rw-rw-r-- <db2inst1> <db2iadm1> profile.env
其中 <db2inst1> 是实例所有者,而 <db2iadm1> 是实例所有者的组。
INSTHOME 是实例所有者的主路径。
“DB2 全局级概要文件注册表”位于:
/var/db2/<version_id>/default.env(对于 AIX、Solaris 和 Linux 操作系统,其中,<version_id> 是当前版本)。
/var/opt/db2/<version_id>/default.env(对于 HP-UX 操作系统,其中 <version_id> 是当前版本)。
此文件的存取许可权和所有权应该是:
-rw-rw-r-- <Instance_Owner> <Instance_Owner_Group> default.env
为了修改全局注册表变量,用户必须作为 root 用户登录。
“DB2 实例节点级概要文件注册表”位于:
INSTHOME/sqllib/nodes/<node_number>.env
该目录和此文件的存取许可权和所有权应该是:
drwxrwsr-w <Instance_Owner> <Instance_Owner_Group> nodes
-rw-rw-r-- <Instance_Owner> <Instance_Owner_Group> <node_number>.env
INSTHOME 是实例所有者的主路径。
“DB2 实例概要文件注册表”位于:
/var/db2/<version_id>/profiles.reg(对于 AIX、Solaris 和 Linux,其中 <version_id> 是当前版本)。
/var/opt/db2/<version_id>/profiles.reg(对于 HP-UX 操作系统,其中 <version_id> 是当前版本)。
此文件的存取许可权和所有权应该是:
-rw-r--r-- root system profiles.reg
有四个概要文件注册表:
DB2 实例级概要文件注册表。大多数 DB2 环境变量都位于此注册表中。特定实例的环境变量设置保存在此注册表中。在此级别定义的值将覆盖在全局级的对应设置。
DB2 全局级概要文件注册表。若未对特定的实例设置环境变量,则使用此注册表。此注册表具有在当前机器范围内有效的环境变量设置。在 DB2 UDB ESE 中,每台机器上都有一个全局级概要文件。
DB2 实例节点级概要文件注册表。在多分区环境中,此注册表级别包含特定于分区(节点)的变量设置。在此级别定义的值将覆盖实例级和全局级的对应设置。
DB2 实例概要文件注册表。此注册表包含此系统可识别的所有实例名的列表。可通过运行 db2ilist 查看系统上提供的所有实例的完整列表。
[[i] 本帖最后由 ericsson 于 2006-4-26 09:56 编辑 [/i]]
2006-4-21 11:48
ericsson
[b]六、DAS[/b]
DAS 管理服务器是一种控制点,仅用于辅助DB2 服务器上的任务,如果要使用提供的工具(如“配置助手”“控制中心”“开发中心”),则必须有一个正在运行的DAS。
见过有的在生产上就直接把DAS删除,所以草草的看了一下,决定pass it .
[b]删除办法 :[/b]
su - dasusr1
db2admin stop
backup all files in the das directory
su - root
run dasdrop
另外,一台机器即时有多个instance , 但只能有一个das . 在安装期间,将DAS配置为在引导操作系统是启动。
[[i] 本帖最后由 ericsson 于 2006-4-21 11:51 编辑 [/i]]
2006-4-24 11:22
ericsson
[b]七、创建sample 数据库 [/b]
今天早上来,准备创建一个sample数据库先玩玩,结果 …………:L
/usr/opt/db2_08_01/bin#[b]./db2sampl[/b]
SQL10007N Message "-1390" could not be retrieved. Reason code: "3".
/usr/opt/db2_08_01/bin64[b]#./db2sampl[/b]
SQL10007N Message "-1390" could not be retrieved. Reason code: "3".
都报错,寻找解决办法中。。
2006-4-25 16:48
ericsson
[b]续 - 创建sample数据库 [/b]
太愚昧了,不过也感觉奇怪 …………
[b][r6test]/#find . -name db2sampl -print[/b]
./usr/opt/db2_08_01/samples/db2sampl
./usr/opt/db2_08_01/bin/db2sampl
./usr/opt/db2_08_01/bin64/db2sampl
可是明明/home/db2inst1/sqllib/bin 下面有 db2sampl 的,怎么会find 不到?
实例删除、创建折腾了2次,刚才把hostname改了,发现居然instance 不成功了,说/etc/services中找不到什么communication port or ………… 之类的话,算了,重新启动系统再说了。
总之,就是愚昧所致。。
2006-4-25 17:07
ericsson
[b]续 - 创建sample数据库 [/b]
这么简单的东西,居然也折腾了一会,唉。该死的find . 也是自己傻,居然还到/usr/…… 下面去找db2sampl .
[db2inst1@r6test]/home/db2inst1/sqllib/bin$[b]db2start[/b]
04/25/2006 05:06:20 0 0 SQL1063N DB2START processing was successful.
SQL1063N DB2START processing was successful.
[db2inst1@r6test]/home/db2inst1/sqllib/bin$[b]./db2sampl[/b]
[db2inst1@r6test]/home/db2inst1/sqllib/bin$[b]db2 connect to sample[/b]
Database Connection Information
Database server = DB2/AIX64 8.2.4
SQL authorization ID = DB2INST1
Local database alias = SAMPLE
[db2inst1@r6test]/home/db2inst1/sqllib/bin[b]$db2 list db directory[/b]
System Database Directory
Number of entries in the directory = 1
Database 1 entry:
Database alias = SAMPLE
Database name = SAMPLE
Local database directory = /home/db2inst1
Database release level = a.00
Comment =
Directory entry type = Indirect
Catalog database partition number = 0
Alternate server hostname =
Alternate server port number =
[db2inst1@r6test]/home/db2inst1$[b]db2 list tablespaces[/b] 看看sample里面都默认建立了啥表空间:D
Tablespaces for Current Database
Tablespace ID = 0
Name = SYSCATSPACE
Type = System managed space
Contents = Any data
State = 0x0000
Detailed explanation:
Normal
Tablespace ID = 1
Name = TEMPSPACE1
Type = System managed space
Contents = System Temporary data
State = 0x0000
Detailed explanation:
Normal
Tablespace ID = 2
Name = USERSPACE1
Type = System managed space
Contents = Any data
State = 0x0000
Detailed explanation:
Normal
[[i] 本帖最后由 ericsson 于 2006-4-25 17:15 编辑 [/i]]
2006-4-25 17:08
jxufe
支持一下,实例建好后,马上把profile.sh帖到实例用户HOME下的.profile里,再重新登陆一下
2006-4-25 17:09
ericsson
[quote]原帖由 [i]jxufe[/i] 于 2006-4-25 17:08 发表
支持一下,实例建好后,马上把profile.sh帖到实例用户HOME下的.profile里,再重新登陆一下 [/quote]
多谢老大指点,我马上去看看profile.sh
2006-4-25 17:11
ericsson
刚刚看了一下,居然没有profile.sh , 是不是 db2profile 啊? 另外,我看在/home/db2inst1/.profile 文件中已经有下面的语句:
if [ -f /home/db2inst1/sqllib/db2profile ]; then
. /home/db2inst1/sqllib/db2profile
fi
profile.sh 是?
[[i] 本帖最后由 ericsson 于 2006-4-25 17:13 编辑 [/i]]
2006-4-25 17:17
ericsson
[b]八、创建数据库 - 准备和基础知识学习 [/b]
在创建数据库之前,应该花足够的时间来设计数据库的内容、布局、潜在增长和用途。
定义初始表空间,当创建一个数据库时,要定义三个表空间:
A、用于系统目录表的SYSCATSPACE
B、用于保存数据库处理期间创建的系统临时表的TEMPSPACE1
C、用于保存用户定义的表和索引的 USERSPACE1
注: 当第一次创建一个数据库时,不创建用户临时表空间。
若未使用CREATE DATABASE命令指定任何表空间参数,则数据库管理器使用系统管理存储器(SMS)目录容器创建这些表空间。这些目录容器将在位该数据库创建的子目录中创建。 这些表空间的扩展数据库大小被设置为缺省值。
呵呵,先把裸设备都创建好再说了:
a、Create the raw device for db2
mklv -y'dblv01' rootvg 1
mklv -y'dblv02' rootvg 1
mklv -y'dblv03' rootvg 1
mklv -y'dblv04' rootvg 1
mklv -y'dblv05' rootvg 1
mklv -y'dblv06' rootvg 1
b、改变raw device 宿主权限:
chown db2inst1:db2grp1 dblv01
chown db2inst1:db2grp1 dblv02
chown db2inst1:db2grp1 dblv03
chown db2inst1:db2grp1 dblv04
chown db2inst1:db2grp1 dblv05
chown db2inst1:db2grp1 dblv06
chown db2inst1:db2grp1 rdblv01
chown db2inst1:db2grp1 rdblv02
chown db2inst1:db2grp1 rdblv03
chown db2inst1:db2grp1 rdblv04
chown db2inst1:db2grp1 rdblv05
chown db2inst1:db2grp1 rdblv06
在创建数据库时必须创建一个目录表空间和至少一个常规表空间,以及至少一个系统临时表空间。通过使用 CREATE DATABASE 命令或以后使用 CREATE TABLESPACE 命令,可以创建更多的所有类型的表空间(目录表空间除外)。
[b]基础知识:[/b]
EXTENTSIZE 是在将数据写入到下一个容器之前写入到当前容器中的数据的页数(如果表空间中存在多个容器的话)。
PREFETCHSIZE 指定在执行数据预取时将从表空间读取的页数
当数据库管理器确定顺序 I/O 是适当的,并且确定预取操作可能有助于提高性能时,会使用预取操作(通常是大型表扫描)。比较好的做法是将 PREFETCHSIZE 值显式地设置成表空间的 EXTENTSIZE 值与表空间容器数的乘积的倍数。例如:如果 EXTENTSIZE 是 32,并且表空间中有 4 个容器,那么理想的 PREFETCHSIZE 应当是 128、256 等等。
扩展块大小(Extent size)
指定在跳到下一个容器之前将写到当前容器中的页数。存储数据时数据库管理器反复循环使用所有容器。该参数只有在表空间中有多个容器时才起作用。
预取大小(Prefetch size)
指定当执行数据预取时将从表空间读取的页数。预取操作在查询引用所需的数据之前读入这些数据,这样一来查询就不必等待执行 I/O 了。当数据库管理器确定顺序 I/O 是适当的,并且确定预取操作可能有助于提高性能时,它就选择预取操作。
开销(Overhead)和传送速率(Transfer rate)
这些值用于确定查询优化期间的 I/O 成本。这两个值的测量单位都是毫秒,而且它们应当分别是所有容器开销和传送速率的平均值。开销是与 I/O 控制器活动、磁盘寻道时间和旋转延迟时间相关联的时间。传送速率是将一个页读入内存所必需的时间量。它们的缺省值分别是 24.1 和 0.9。可以根据硬件规格计算这些值。
[[i] 本帖最后由 ericsson 于 2006-4-25 17:25 编辑 [/i]]
2006-4-25 17:34
ericsson
[b]八、创建数据库 - 建库[/b]
也就是一个命令,不过建好之后,系统会默认创建表空间,还需要针对自己的需求规划,创建自己的表空间。
db2 => create database mydb2 using codeset GBK TERRITORY zh_CN
删除数据库:
db2 => drop database mydb2
未完待续,下班回家吃法啦 :lu2:
[[i] 本帖最后由 ericsson 于 2006-4-25 17:37 编辑 [/i]]
2006-4-26 09:49
ericsson
[b]实例分配内存[/b]
早上学习一下这段东西,是否理解并吃透了先不管,先看个脸熟再说 :lu2:
发生下列事件时,将为数据库管理器的每个实例分配内存:
•[b]当启动数据库管理器(db2start)时[/b]: 分配数据库管理器全局共享内存,并且一直会保持此分配状态,直到数据库管理器停止运行(db2stop)为止。此区域中包含数据库管理器在管理所有数据库连接上的活动时所需的信息。当第一个应用程序与数据库连接时,将分配全局内存区和专用内存区。
•[b]当第一次激活数据库或与数据库连接时:[/b] 将分配数据库全局内存。所有可能与该数据库连接的应用程序均使用数据库全局内存。数据库全局内存的大小由 database_memory 配置参数指定。指定的内存可以大于最初所需的内存,以便以后可以动态地分配附加内存。虽然在数据库活动时不能增加或减少数据库全局内存的总容量,但是可以调整数据库全局内存中的各个内存区的大小。此类内存区包括缓冲池、锁定表、数据库堆、实用程序堆、程序包高速缓存和目录高速缓存。在已启用数据库管理器分区内并行性配置参数(intra_parallel)的环境中,或者在已启用连接集中器的环境中,还可以分配共享排序堆作为数据库全局内存的一部分。
•[b]当应用程序与数据库连接时:[/b] 在分区数据库环境中、在已启用数据库管理器分区内并行性配置参数( intra_parallel )的非分区数据库环境中或在已启用连接集中器的环境中,可将多个应用程序分配至 应用程序组 以共享内存。每个应用程序组均有其自身分配的共享内存。在应用程序组共享内存中,每个应用程序均有其自身的应用程序控制堆,但都使用应用程序组的共享堆。
[b]以下三个数据库配置参数决定了应用程序组内存的大小: [/b]
1 appgroup_mem_sz 参数,用于指定应用程序组的共享内存的大小
2 groupheap_ratio 参数,用于指定允许共享堆占用应用程序组共享内存的百分比
3 app_ctl_heap_sz 参数,用于指定应用程序组中每个应用程序的控制堆大小。
[b]在性能方面,对应用程序内存进行分组的好处是提高了高速缓存和内存使用的效率。 [/b]
此外,应用程序全局内存的某些元素还可以动态地调整大小。
[b]•当创建代理程序时:[/b] 图中未显示此事件。当出现连接请求或并行环境中出现新的 SQL 请求时,系统会指定一个代理程序并为其分配代理程序专用内存,其中包含仅用于该代理程序的内存分配,例如排序堆和应用程序堆。
[b]当数据库已被一个应用程序使用时[/b],任何随后连接的应用程序只能分配到代理程序专用内存和应用程序全局共享内存。
此外,图中还列示了下列配置参数设置,它们用于限制为每个特定用途分配的内存大小。请注意,在分区数据库环境中,将在每个数据库分区中分配此类内存。
[b]•numdb [/b]
此参数指定不同应用程序可以使用的并发活动数据库的最大数目。由于每个数据库都有其自身的全局内存区,因此在增大此参数的值时,所分配的内存容量也可能会增加。
[b]•maxappls [/b]此参数指定可以同时连接至单个数据库的应用程序的最大数目。它将影响可能为该数据库分配的代理程序专用内存容量和应用程序全局内存容量。请注意,对于每个数据库,可将此参数设置为不同的值。
[b]•用于并行处理的 maxagents 和 max_coordagents 参数 [/b]
图中没有显示这些参数。它们用于限制一个实例中的所有活动数据库上可以同时存在的数据库管理器代理程序的数目。与 maxappls 一起,这些参数可以限制为代理程序专用内存和应用程序全局内存分配的内存容量。
2006-4-26 13:47
ericsson
刚刚测试了创建表空间、bufferpool之类的。
开始学习这块内容。
2006-4-26 13:49
ericsson
再来一个图,学习学习
2006-4-26 14:03
ericsson
[b]九、表空间[/b]
数据库中的所有数据都存储在许多表空间中。可以认为表空间是孩子而数据库是其父母,其中表空间(孩子)不能有多个数据库(父母)。由于表空间有不同用途,因此根据它们的用途和管理方式将它们分类。根据用途有五种不同的表空间:
目录表空间
每个数据库只有一个目录表空间,它是在发出 CREATE DATABASE 命令时创建的。目录表空间被 DB2 命名为 SYSCATSPACE,它保存了系统目录表。总是在创建数据库时创建该表空间。
常规表空间
常规表空间保存表数据和索引。它还可以保存诸如大对象(Large Object,LOB)之类的长数据,除非这些数据显式地存储在长表空间中。如果某些表空间是数据库管理的空间(Database Managed Space,DMS),则可以将表及其索引分别放到单独的常规表空间中。我们将在本文后面定义 DMS 和系统管理的空间(System Managed Space,SMS)之间的区别。每个数据库中必须至少有一个常规表空间。创建数据库时指定该表空间的缺省名为 USERSPACE1。
长表空间
长表空间用于存储长型或 LOB 表列,它们必须驻留在 DMS 表空间中。它们还可以存储结构化类型的列或索引数据。如果没有定义长表空间,那么将把 LOB 存储在常规表空间中。长表空间是可选的,缺省情况下一个都不创建。
系统临时表空间
系统临时表空间用于存储 SQL 操作(比如排序、重组表、创建索引和连接表)期间所需的内部临时数据。每个数据库必须至少有一个系统临时表空间。随数据库创建的系统临时表空间的缺省名为 TEMPSPACE1。
用户临时表空间
用户临时表空间存储已声明的全局临时表。创建数据库时不存在用户临时表空间。至少应当创建一个用户临时表空间以允许定义已声明的临时表。用户临时表空间是可选的,缺省情况下一个都不创建。
[b]表空间管理[/b]
可以用两种不同的方式管理表空间:
系统管理的空间(SMS)
SMS 表空间由操作系统进行管理。容器被定义成常规操作系统文件,并且是通过操作系统调用访问的。这意味着所有的常规操作系统功能将处理以下内容:操作系统将缓冲 I/O;根据操作系统约定分配空间;如有必要就自动扩展表空间。但是,不能从 SMS 表空间删除容器,并且仅限于将新的容器添加到分区的数据库。前一节中所说明的那三个缺省表空间都是 SMS。
数据库管理的空间(DMS)
DMS 表空间是由 DB2 管理的。可以将容器定义成文件(在创建表空间时将把给定的大小全部分配给它们)或设备。分配方法和操作系统允许多少 I/O,DB2 就可以管理多少 I/O。可以通过使用 altER TABLESPACE 命令来扩展容器。还可以释放未使用的那部分 DMS 容器(从 V8 开始)。
容器
每个表空间都有一个或多个容器。重申一次,您可以认为容器是孩子,而表空间是其父母。每个容器只能属于一个表空间,但是一个表空间可以拥有许多容器。可以将容器添加到 DMS 表空间,或者从 DMS 表空间中删除容器,而且可以更改容器的大小。只能将容器添加到某个分区中分区数据库上的 SMS 表空间,在添加之前该分区还未给表空间分配容器。添加新的容器时,将启动一个自动的重新均衡操作以便将数据分布到所有容器上。重新均衡操作不会妨碍对数据库的并发访问。
表空间设置
可以在创建表空间时给它们指定许多设置,或者也可以稍后使用 altER TABLESPACE 语句时指定其设置。
页大小的含义
页大小 行大小限制 列数限制 最大容量
4 KB 4 005 500 64 GB
8 KB 8 101 1 012 128 GB
16 KB 16 293 1 012 256 GB
32 KB 32 677 1 012 512 GB
表空间最多可包含 16384 个页,因此选择较大的页大小可以增加表空间的容量。
扩展块大小(Extent size)
指定在跳到下一个容器之前将写到当前容器中的页数。存储数据时数据库管理器反复循环使用所有容器。该参数只有在表空间中有多个容器时才起作用。
预取大小(Prefetch size)
指定当执行数据预取时将从表空间读取的页数。预取操作在查询引用所需的数据之前读入这些数据,这样一来查询就不必等待执行 I/O 了。当数据库管理器确定顺序 I/O 是适当的,并且确定预取操作可能有助于提高性能时,它就选择预取操作。
开销(Overhead)和传送速率(Transfer rate)
这些值用于确定查询优化期间的 I/O 成本。这两个值的测量单位都是毫秒,而且它们应当分别是所有容器开销和传送速率的平均值。开销是与 I/O 控制器活动、磁盘寻道时间和旋转延迟时间相关联的时间。传送速率是将一个页读入内存所必需的时间量。它们的缺省值分别是 24.1 和 0.9。可以根据硬件规格计算这些值。
[[i] 本帖最后由 ericsson 于 2006-4-26 16:11 编辑 [/i]]
2006-4-26 16:27
ericsson
1、 察看表空间的属性和容器
[b]db2 => list tablespaces[/b]
Tablespaces for Current Database
Tablespace ID = 0
Name = SYSCATSPACE
Type = System managed space
Contents = Any data
State = 0x0000
Detailed explanation:
Normal
Tablespace ID = 1
Name = TEMPSPACE1
Type = System managed space
Contents = System Temporary data
State = 0x0000
Detailed explanation:
Normal
Tablespace ID = 2
Name = USERSPACE1
Type = Database managed space
Contents = Any data
State = 0x0000
Detailed explanation:
Normal
Tablespace ID = 3
Name = SYSTOOLSPACE
Type = System managed space
Contents = Any data
State = 0x0000
Detailed explanation:
Normal
Tablespace ID = 4
Name = MYDB2_TB02
Type = Database managed space
Contents = Any data
State = 0x0000
Detailed explanation:
Normal
Tablespace ID = 5
Name = MYDB2_TB01
Type = Database managed space
Contents = Any data
State = 0x0000
Detailed explanation:
Normal
[b]db2 => list tablespaces show detail[/b]
Tablespaces for Current Database
Tablespace ID = 0
Name = SYSCATSPACE
Type = System managed space
Contents = Any data
State = 0x0000
Detailed explanation:
Normal
Total pages = 6150
Useable pages = 6150
Used pages = 6150
Free pages = Not applicable
High water mark (pages) = Not applicable
Page size (bytes) = 4096
Extent size (pages) = 32
Prefetch size (pages) = 32
Number of containers = 1
Tablespace ID = 1
Name = TEMPSPACE1
Type = System managed space
Contents = System Temporary data
State = 0x0000
Detailed explanation:
Normal
Total pages = 1
Useable pages = 1
Used pages = 1
Free pages = Not applicable
High water mark (pages) = Not applicable
Page size (bytes) = 4096
Extent size (pages) = 32
Prefetch size (pages) = 32
Number of containers = 1
Tablespace ID = 2
Name = USERSPACE1
Type = Database managed space
Contents = Any data
State = 0x0000
Detailed explanation:
Normal
Total pages = 15360
Useable pages = 15296
Used pages = 96
Free pages = 15200
High water mark (pages) = 96
Page size (bytes) = 4096
Extent size (pages) = 32
Prefetch size (pages) = 64
Number of containers = 2
Tablespace ID = 3
Name = SYSTOOLSPACE
Type = System managed space
Contents = Any data
State = 0x0000
Detailed explanation:
Normal
Total pages = 87
Useable pages = 87
Used pages = 87
Free pages = Not applicable
High water mark (pages) = Not applicable
Page size (bytes) = 4096
Extent size (pages) = 32
Prefetch size (pages) = 32
Number of containers = 1
Tablespace ID = 4
Name = MYDB2_TB02
Type = Database managed space
Contents = Any data
State = 0x0000
Detailed explanation:
Normal
Total pages = 7680
Useable pages = 7664
Used pages = 24
Free pages = 7640
High water mark (pages) = 24
Page size (bytes) = 8192
Extent size (pages) = 8
Prefetch size (pages) = 144
Number of containers = 2
Tablespace ID = 5
Name = MYDB2_TB01
Type = Database managed space
Contents = Any data
State = 0x0000
Detailed explanation:
Normal
Total pages = 7680
Useable pages = 7664
Used pages = 24
Free pages = 7640
High water mark (pages) = 24
Page size (bytes) = 8192
Extent size (pages) = 8
Prefetch size (pages) = 144
Number of containers = 2
要列出容器,我们需要使用以上输出中的 Tablespace ID
[b]db2 => list tablespace containers for 5[/b]
Tablespace Containers for Tablespace 5
Container ID = 0
Name = /dev/rdblv05
Type = Disk
Container ID = 1
Name = /dev/rdblv06
Type = Disk
该命令将列出指定表空间中的所有容器。如上所示的路径指向容器物理上所在的位置
2006-4-26 16:30
ericsson
[b]十、缓冲池 [/b]
一个缓冲池是与单个数据库相关联的,可以被多个表空间使用。当考虑将缓冲池用于一个或多个表空间时,必须保证表空间页大小和缓冲池页大小对于缓冲池所“服务”的所有表空间而言都是一样的。一个表空间只能使用一个缓冲池。
创建数据库时,会创建一个名为 IBMDEFAULTBP 的缺省缓冲池,所有的表空间都共享该缓冲池。可以使用 CREATE BUFFERPOOL 语句添加更多的缓冲池。缓冲池的缺省大小是 BUFFPAGE 数据库配置参数所指定的大小,但是可以通过在 CREATE BUFFERPOOL 命令中指定 SIZE 关键字来覆盖该缺省值。足够的缓冲池大小是数据库拥有良好性能的关键所在,因为它可以减少磁盘 I/O 这一最耗时的操作。大型缓冲池还会对查询优化产生影响,因为更多的工作可在内存中完成。
基于块的缓冲池
V8 允许您留出缓冲池的一部分(最高可达 98%)用于基于块的预取操作。基于块的 I/O 可以通过将块读入相邻的内存区而不是将它分散装入单独的页,来提高预取操作的效率。每个缓冲池的块大小必须相同,并且由 BLOCKSIZE 参数进行控制。该值等于块的大小(单位为页),从 2 到 256,缺省值为 32。
扩展存储器
DB2 不将扩展存储器用于缓冲区。但是,可以用扩展存储器来高速缓存内存页,使得从内存移出页变得更快。
[[i] 本帖最后由 ericsson 于 2006-4-26 17:23 编辑 [/i]]
2006-4-26 17:22
ericsson
查看当前系统的bufferpool属性
[b]SELECT * FROM SYSCAT.BUFFERPOOLS[/b]
令将缓冲池添加到现有的表空间
db2 => [b]alter tablespace MYDB2_TB01 BUFFERPOOL BP01[/b]
DB20000I The SQL command completed successfully.
要找出哪个缓冲池被分配给了表空间
db2 => [b]SELECT TBSPACE, BUFFERPOOLID FROM SYSCAT.TABLESPACES[/b]
页:
[1]
2
3
4
Powered by Discuz! Archiver 5.5.0
© 2001-2006 Comsenz Inc.