创建实例:db2icrt
root@nimei:/opt/ibm/db2/V9.7/instance# ls
common daslist dasutil db2ckupgrade db2iauto db2icrt db2idrop db2ilist db2instcfg db2isetup db2istrt db2iupgrade db2prechk native
dascrt dasmigr db2chkf db2clpid db2icknm db2idbm db2iexec db2imchk db2ipcld db2isrv db2iuadm db2iutil db2uit
dasdrop dasupdt db2ckmig db2dbmchk db2ickts db2idefs db2iinfo db2imigr db2iset db2istop db2iupdt db2iver disp_msg
root@nimei:/opt/ibm/db2/V9.7/instance# ./db2icrt -u db2fenc1 db2inst1
DBI1070I Program db2icrt completed successfully.
注意:必须有和实例同名的用户和用户组。
db2inst1@nimei:~$ cat .bashrc
# The following three lines have been added by UDB DB2.
if [ -f /home/db2inst1/sqllib/db2profile ]; then
. /home/db2inst1/sqllib/db2profile
fi
可以看到实例目录中的配置文件中存在了上面的一段代码
db2inst1@nimei:~$ ps -elf|grep db2inst1
4 S root 14121 12824 0 80 0 - 17706 wait 09:53 pts/12 00:00:00 su - db2inst1
4 S db2inst1 14122 14121 0 80 0 - 7022 wait 09:53 pts/12 00:00:00 -su
4 S root 19054 10784 0 80 0 - 17705 wait 13:46 pts/12 00:00:00 su - db2inst1
4 S db2inst1 19055 19054 0 80 0 - 7024 wait 13:46 pts/12 00:00:00 -su
0 R db2inst1 19855 19055 0 80 0 - 5661 - 13:50 pts/12 00:00:00 ps -elf
0 S db2inst1 19856 19055 0 80 0 - 3985 pipe_w 13:50 pts/12 00:00:00 grep --color=auto db2inst1
4 S root 22774 21617 0 80 0 - 17705 wait 10:31 pts/10 00:00:00 su - db2inst1
4 S db2inst1 22775 22774 0 80 0 - 7024 wait 10:31 pts/10 00:00:00 -su
0 S db2inst1 23379 2667 0 80 0 - 37263 msgrcv 10:32 pts/10 00:00:00 /home/db2inst1/sqllib/bin/db2bp 22775A1004 5 A
注意:ps -e表示列出所有的进程;-l表示长格式显示;-f表示完整格式的显示
由上可知有很多当前实例的进程
root@nimei:/home/db2inst1# netstat -anp | grep db2
tcp 0 0 0.0.0.0:6666 0.0.0.0:* LISTEN 10656/db2sysc 0
当前实例的端口是6666
netstat -a表示列出所有的监听的和非监听的套接字,-n表示以数字形式显示地址和端口号;-p表示显示出套接字所属进程的PID
db2inst1@nimei:~$ db2 get dbm cfg|grep db2
Java Development Kit installation path (JDK_PATH) = /home/db2inst1/sqllib/java/jdk64
Diagnostic data directory path (DIAGPATH) = /home/db2inst1/sqllib/db2dump/
Size of rotating db2diag & notify logs (MB) (DIAGSIZE) = 0
Default database path (DFTDBPATH) = /home/db2inst1
db2start/db2stop timeout (min) (START_STOP_TIME) = 10
可以查看实例参数,在实例参数中可以查看数据库的默认安装路经
手动建立的实例并不会像GUI建立的实例那样,会自动设定实例参数。 如果要使实例能够被正确attach,必须设定三个地方:
[db2inst1@ibm1 ~]$ db2set DB2COMM=tcpip
[db2inst1@ibm1 ~]$ db2 update dbm cfg using SVCENAME DB2_db2inst1
DB20000I The UPDATE DATABASE MANAGER CONFIGURATION command completed
successfully.
[db2inst1@ibm1 ~]$ db2 terminate
DB20000I The TERMINATE command completed successfully.
terminate:断开与数据库的连接
[root@nimei ~]# /opt/ibm/db2/V9.7/instance/db2iauto -on db2inst1
让实例跟随着系统启动一块启动
DAS 是Database Administration Service的缩写,如果某个DB2实例希望被远程管理,那么数据库本地必须配置DAS,才能被远端的Control Center进行注册,类似于Oracle 9i enterprise console中的agent (oracle 9i之后就淘汰了)
linux上DAS的管理员是dasusr1, 属于组dasadm1.
DAS的创建与删除、更新均是由root完成的,基本上都是 /opt/ibm/db2/V10.1/instance/ 下das开头的命令
root@nimei:/opt/ibm/db2/V9.7/instance# groupadd dasusr1
root@nimei:/opt/ibm/db2/V9.7/instance# useradd -m -s /bin/bash -d /home/dasuser1 -g dasusr1 dasuser1
root@nimei:/opt/ibm/db2/V9.7/instance# ./dascrt -u dasuser1
SQL4406W The DB2 Administration Server was started successfully.
DBI1070I Program dascrt completed successfully.
linux下启动与关闭DAS需要具有DASADM权限的用户登录操作,因此要使用dasuser1:
dasuser1@nimei:~$ db2admin stopdasuser1@nimei:~$ db2admin start
SQL4406W The DB2 Administration Server was started successfully.
1. 数据库逻辑上有大到小是 instance - database - tablespace - container - extent - datapage
2. container实际上类似于Oracle datafile的概念。一个tablespace可以跨多个container,
3. 其中extent是由连续的datapage组成 (类似Oracle中,extent与block的关系),一个extent不能跨表!是写container的最小单位
4. extentsize 实际上是间接指定其包含多少个datapage
5. datapage是DB2最小IO单位 (类似Oracle 的block),其size类似 Oracle的blocksize,也有4k 8k 16k 32k 几种
数据库操作:
创建数据库后,本地数据库目录结构如下:
db2inst1@nimei:~$ db2 create database mydb11. SQLBP.1 和SQLBP.2 包含缓冲池信息。这两个文件互为备份。
2. SQLSPCS.1 和SQLSPCS.2 文件中包含表空间信息。这两个文件互为备份。
3. SQLSGF.1 和 SQLSGF.2 包含与数据库的自动存储有关的存储路径信息,两个文件互为备份。
4. SQLDBCONF 包含数据库配置信息,切勿手动编辑此文件。
5. SQLLOGCTL.LFH 是日志控制文件,崩溃恢复处理过程中使用这些文件的信息确定要在日志中退回多远开始崩溃恢复。
6. DB2RHIST.ASC 历史记录文件及其备份 DB2RHIST.BAK 中包含关于备份,复原,表装入,表重组,表空间改变和其它数据库更改的历史记录。
7. SQLINSLK 确保一个数据库只能由数据库管理器的一个实例使用。
总结:手动创建实例的
1. DB2 Instance Creation