新建aix实例

时间:2022-06-08 03:15:14

http://www.cnblogs.com/kfarvid/archive/2010/12/21/1912553.html   DB2数据库

http://wenku.baidu.com/view/0f342101cc175527072208ca.html?re=view  表空间和缓冲池

请注意:为什么实例用户和实例名需要相同?

创建实例命令中,并没有实例用户的选项,但是系统却通过实例名找到该用户,

并在/home下的相关目录里建立了实例文件夹和文件(sqllib)。

-bash-3.2# cd instance                            在instance目录下

-bash-3.2# ./db2icrt -u test test                       
DBI1070I  Program db2icrt completed successfully.

-bash-3.2# cd /home
-bash-3.2# ls
ASKeyLinux  dasusr1     esaadmin    lost+found  test
TT_DB       db2fenc1    guest       poka        wqs
chong       db2inst1    hegl        poka01      yang
-bash-3.2# cd test
-bash-3.2# ls
.profile     .sh_history  sqllib

3.创建数据库
su - test

$ db2start
07/09/2014 11:04:01     0   0   SQL1063N  DB2START processing was successful.
SQL1063N  DB2START processing was successful.
$ db2 create db tcashman
DB20000I  The CREATE DATABASE command completed successfully.

$ db2 connect to cashmant

Database Connection Information

Database server        = DB2/AIX64 9.7.0
 SQL authorization ID   = TEST
 Local database alias   = CASHMANT

$ db2 list tables for all          显示该数据库所有的表

$ db2 drop db tcashman                                                         删除数据库
DB20000I  The DROP DATABASE command completed successfully.
$ db2stop

删除实例

-bash-3.2# cd /opt/IBM/db2/V9.7/instance

-以root身份执行 $DB2HOME/instance/db2idrop -f 实例名,注意一定要加-f,否则不会删除实例下面sqllib文件。如果不幸忘了,执行db2icrt,会报sqllib文件存在的错误,即使先删掉这个文件也不行,执行一下db2icrt,就会生成一部分sqllib,进入死胡同,呵呵,这个是由于用实例用户登录造成的,也许有个db2profile文件在登录时搞怪,该怎么办呢?看我的吧!用一个非实例的用户登录,su成root,然后再删掉sqllib,试试再db2icrt,问题解决了:)

bash-3.2# ./db2idrop -f test                    注意一定要加-f,否则不会删除实例下面sqllib文件             
DBI1324W  Support of the -f command is deprecated. For
      more information, see the DB2 Information Center.

DBI1070I  Program db2idrop completed successfully.

-bash-3.2# cd test                           此时test用户下sqllib文件已删除
-bash-3.2# ls
.profile     .sh_history
-bash-3.2#

-bash-3.2$ db2 get dbm cfg                        查看实例参数配置

TCP/IP Service name                          (SVCENAME) =                            (默认情况是无内容)

需要设置该参数信息,通过

$ cat /etc/services

db2c_db2inst1   50000/tcp                                         // this is the connection port for instance DB2
DB2_db2inst1    60000/tcp                                        // These ports reserved for DB2 Fast Communications Manager
DB2_db2inst1_1  60001/tcp
DB2_db2inst1_2  60002/tcp
DB2_db2inst1_END        60003/tcp
DB2_test        60004/tcp
DB2_test_1      60005/tcp
DB2_test_2      60006/tcp
DB2_test_END    60007/tcp

另外,在server端db2 get dbm cfg命令得出的下面内容里,db2c_DB2在services文件里对应的端口号就是server监听程序的端口号。TCP/IP Service name (SVCENAME) = db2cDB2。如果想要修改dbm参数,可以用如下命令:db2 update dbm cfg  using SVCENAME db2cDB2_another。db2cDB2_another是事先定义好的端口变量。

注意到,这里SVCENAME是实例级变量,在语句db2 catalog tcpip node WEST remote 9.181.139.155 server 50000中,catalog的node由IP地址以及端口号确定,端口50000对应于实例级参数SVCENAME,所以,node的实际意义就是instance. 只是node是instance在网络上catalog的表示。

确保服务器端的db2已经启动:db2start
确保客户端DB2COMM设置为tcpip
先查看db2comm设置:db2set –all
如果没有设置这个注册表,执行db2set db2comm=tcpip
将SVCENAME设置成/etc/services中的端口号或者服务名了吗?
执行db2 get dbm cfg查看,找到SVCENAME,如果当前值不是服务器端的端口号或者服务名,进行更新设置
执行:db2 update dbm cfg SVCENAME db2inst1
注:db2inst1为服务名,这个在/etc/services文件中db2inst1 50000/tcp
一致

新建数据库

-bash-3.2$ db2 create database tcashman using codeset utf-8 territory cn
DB20000I  The CREATE DATABASE command completed successfully.

-bash-3.2$ db2 connect to tcashman

Database Connection Information

Database server        = DB2/AIX64 9.7.0
 SQL authorization ID   = DB2INST1
 Local database alias   = TCASHMAN

mkdir: 0653-357 Cannot access directory /home.
/home: The file access permissions do not allow the specified action.      问题是访问文件没有权限

-bash-3.2$ chmod 755 db2inst1

-bash-3.2$ cd /home/db2inst1
-bash-3.2$ ls
data        db2inst1    export_sql  fsms_8k_1   sqllib      tempo
-bash-3.2$ cd data
-bash-3.2$ ls 
-bash-3.2$ db2look -d cashman -e -a -x -i db2inst1 -w '1qaz!QAZ' -o db_714.sql
-- Generate statistics for all creators
-- Creating DDL for table(s)
-- Output is sent to file: db_714.sql
-bash-3.2$ ls
db_714.sql

导入表结构

db2 connect to tcashman

db2 -tvf /home/db2inst1/data/db_714.sql

工具目录数据库

使用任务中心前需要进行必要的工具设置,需要创建一些数据库对象,可以创建在已有的一个数据库中,也可以单独创建一个数据库。

在你安装数据库的过程中应该有这个选项,你应该是cancel掉了。

安装完成后,也可以使用如下命令创建:

CREATE        TOOLS   CATALOG    NODE_NAME      CREATE DATABASE DATABASE_NAME

说明:

NODE_NAME也就是上面报错的“******”,即计算机名称;

DATABASE_NAME要创建的数据库名称。

模式

模式(Schema)是一个逻辑分组,每个数据库内部的对象在创建时,都可以显式或者隐式地指定模式,同一个模式下的对象构成一个集合。从某种角度来说,模式与用户比较相似,但是与用户也有不同之处,DB2 的用户必须存在于操作系统中,而模式并不需要存在于操作系统中,也不需要与用户一一对应上。

通常情况下,使用数据对象都需要指定模式名称和对象名称,即:

模式名称 . 对象名称

如 db2inst1.employees 代表模式 db2inst1 下的表 employees。不同的模式下,对象名称可以相同,不会相互干扰。

显式创建模式的命令为:

CREATE SCHEMA < 模式名称 > [AUTHORIZATION 用户名 ]

该命令的含义是创建一个指定名称的模式,如果包含 AUTHORIZATION 子句,则表示该用户是这个模式的拥有者。

如果模式 my 不存在,则会创建该模式,接着在模式 my 下创建表 table1。

如果在创建对象或者查询数据的时候没有指定模式名称,系统会使用专用寄存器 CURRENT SCHEMA 中指定的值作为模式名称。可以使用如下 DB2 命令查看该专用寄存器(参见 3.17 节)的值:

VALUES CURRENT SCHEMA

可以通过如下 DB2 命令修改该寄存器中的值:

SET CURRENT SCHEMA < 模式名称 >

这样该专用寄存器中记录的就是指定的模式名称。

如果没有专门指定名称,DB2 使用当前登录的用户名作为该专用寄存器的值。

下边是安装完数据库软件,在现有的数据库中安装的工具目录数据库。

DB2 工具目录:                         
    名称:                                 TOOLSDB
    模式:                                 SYSTOOLS
    实例:                                 DB2
    位置:                                 本地

DB2表空间管理

查询表空间命令

C:\Users\hb>db2 connect to cashman

C:\Users\hb>db2 list tablespaces

C:\Users\hb>db2 list tablespaces show detail

查看表空间的容器即物理地址

C:\Users\hb>db2 list tablespace containers for 2    //2是指 tablespace ID

DMS和SMS德区别

DMS 即 database managed space存储空间是在创建表空间时分配的,而不是在需要时在向操作系统申请的。并且,在这两种类型的表空间上,数据的放置也是有一些不同之处。例如:考虑进行高效率的表扫描时,数据块在物理上连续存放是很重要的。对于SMS(system managed space)来说,操作系统的文件系统将决定每个逻辑文件页面的物理存储位置。

应该注意的是,当使用DMS表空间时,有两个容器选项:原始设备(raw)和文件(file)。

使用原始设备容器时,数据库管理程序直接控制整个设备,并总能确保数据块中的页连续分配。

SMS和DMS表空间相比,要达到最佳的性能,则应该选用DMS表空间。因为使用文件容器或者SMS表空间移动数据时会发生双重缓冲(在DB2数据库管理程序级首先缓冲一次数据,然后在文件系统再缓冲一次数据,这就是双重缓冲),所以使用设备容器可能提供更好的性能。

业务类型  

通常的业务类型有OLTP、OLAP、批处理、报表、以及这几种业务混合的类型。下面我们来介绍主要业务类型的特点。

联机事务处理(OLTP)工作负载的特征是:事务需要对数据进行随机访问,通常涉及频繁插入或更新活动和返回一组数据的查询。通常访问是随机的,并且是访问一页或几页,一般不太可能发生预存取(prefetch)。其实对于性能要求很高的OLTP应用,可以把一些频繁访问的配置表、参数表等建立在内存盘上。在AIX和Linux上都支持创建在内存上的硬盘,这样也可以大大提高速度。但是要注意保证数据的一致性。

OLAP查询工作负载的特征是:事务需要对数据进行顺序访问或部分访问,并常常返回大的数据集。使用多个设备容器且每个容器都在单独的磁盘上的DMS表空间最优可能提供有效的并行预存取。应该将CREATE TABLESPACE语句中的PREFETCHSIZE参数设置为EXTENTSIZE参数的值乘以容器设备数之积。此外,可以将预存取大小指定为-1,此时数据库管理器将自动(automatic)选择合适的预取大小。这允许数据库管理器以并行方式从所有容器中预取。如果容器的数目更改,或需要使预取更多或更少,那么可以使用ALTER TABLESPACE语句相应地更改PREFETCHSIZE值,如果把PREFETCHSIZE设置为AUTOMATIC,添加容器后,数据库会自动调整prefetchsize的大小,所以强烈建议把PREFETCHSIZE设置为AUTOMATIC或-1. 
混合工作负载的目标是:对于OLTP工作负载,使单个I/O请求尽可能有效率;而对于查询工作负载,最大程度地提高并行I/O的效率。

选择表空间页大小的注意事项如下所示: 
·对于执行随机读写操作的OLTP应用程序,通常最好使用较小的页大小(4KB、8KB),这样不需要的行就不会浪费缓冲池空间;
·对于一次访问大量连续行的决策支持系统(DSS)和OLAP应用程序,页大小大一些(16KB、32KB)会比较好,这样就能减少读取特定数目的行所需的I/O请求数。较大的页还允许您减少索引中的层数,因为在一页中可以保留更多的行指针; 
·越大的页,支持的行越长。应根据业务需求来选择合适的数据页; 
·在默认的4KB页上,一个表只能有500列,而更大的页大小(8KB、16KB和32KB)支持1012列; 
·表空间的最大大小与表空间的页大小成正比。

建数据库时三个缺省的表空间syscatspace(目录表空间,保存系统目录表)、tempspace1(系统临时表空间,用于存储 SQL 操作(比如排序、重组表、创建索引和连接表)期间所需的内部临时数据。每个数据库必须至少有一个系统临时表空间。随数据库创建的系统临时表空间的缺省名为 TEMPSPACE1)、userspace1(用户临时表空间存储已声明的全局临时表。创建数据库时不存在用户临时表空间。至少应当创建一个用户临时表空间以允许定义已声明的临时表。)都是sms 属性。

但是在创建数据库时必须创建一个目录表空间和至少一个常规表空间,以及至少一个系统临时表空间。

容器 
每个表空间都有一个或多个容器。重申一次,您可以认为容器是孩子,而表空间是其父母。每个容器只能属于一个表空间,但是一个表空间可以拥有许多容器。可以将容器添加到 DMS 表空间,或者从 DMS 表空间中删除容器,而且可以更改容器的大小。只能将容器添加到某个分区中分区数据库上的 SMS 表空间,在添加之前该分区还未给表空间分配容器。添加新的容器时,将启动一个自动的重新均衡操作以便将数据分布到所有容器上。重新均衡操作不会妨碍对数据库的并发访问。

扩展块大小(Extent size)  
指定在跳到下一个容器之前将写到当前容器中的页数。存储数据时数据库管理器反复循环使用所有容器。该参数只有在表空间中有多个容器时才起作用。  
预取大小(Prefetch size)  
指定当执行数据预取时将从表空间读取的页数。预取操作在查询引用所需的数据之前读入这些数据,这样一来查询就不必等待执行 I/O 了。当数据库管理器确定顺序 I/O 是适当的,并且确定预取操作可能有助于提高性能时,它就选择预取操作。  
开销(Overhead)和传送速率(Transfer rate)  
这些值用于确定查询优化期间的 I/O 成本。这两个值的测量单位都是毫秒,而且它们应当分别是所有容器开销和传送速率的平均值。开销是与 I/O 控制器活动、磁盘寻道时间和旋转延迟时间相关联的时间。传送速率是将一个页读入内存所必需的时间量。它们的缺省值分别是 24.1 和 0.9。可以根据硬件规格计算这些值。

 缓冲池 
一个缓冲池是与单个数据库相关联的,可以被多个表空间使用。当考虑将缓冲池用于一个或多个表空间时,必须保证表空间页大小和缓冲池页大小对于缓冲池所“服务”的所有表空间而言都是一样的。一个表空间只能使用一个缓冲池。 
创建数据库时,会创建一个名为 IBMDEFAULTBP 的缺省缓冲池,所有的表空间都共享该缓冲池。可以使用 CREATE BUFFERPOOL 语句添加更多的缓冲池。缓冲池的缺省大小是 BUFFPAGE 数据库配置参数所指定的大小,但是可以通过在 CREATE BUFFERPOOL 命令中指定 SIZE 关键字来覆盖该缺省值。足够的缓冲池大小是数据库拥有良好性能的关键所在,因为它可以减少磁盘 I/O 这一最耗时的操作。大型缓冲池还会对查询优化产生影响,因为更多的工作可在内存中完成

基于块的缓冲池 
V8 允许您留出缓冲池的一部分(最高可达 98%)用于基于块的预取操作。基于块的 I/O 可以通过将块读入相邻的内存区而不是将它分散装入单独的页,来提高预取操作的效率。每个缓冲池的块大小必须相同,并且由 BLOCKSIZE 参数进行控制。该值等于块的大小(单位为页),从 2 到 256,缺省值为 32。

扩展存储器 
DB2 不将扩展存储器用于缓冲区。但是,可以用扩展存储器来高速缓存内存页,使得从内存移出页变得更快。

以建数据库的用户自己登陆,新建表空间的命令

CREATE  REGULAR  TABLESPACE CASHMAN PAGESIZE 16 K  MANAGED BY AUTOMATIC STORAGE EXTENTSIZE 16 OVERHEAD 10.5 PREFETCHSIZE 16 TRANSFERRATE 0.14 BUFFERPOOL  HUANCHONG  DROPPED TABLE RECOVERY ON

以建数据库的用户登陆,新建临时表空间命令

CONNECT TO CASHMAN;
CREATE BUFFERPOOL TEMP IMMEDIATE  SIZE 250 AUTOMATIC PAGESIZE 16 K ;
CONNECT RESET;

新建表空间命令

CREATE  USER TEMPORARY  TABLESPACE TEMP PAGESIZE 16 K  MANAGED BY AUTOMATIC STORAGE EXTENTSIZE 16 OVERHEAD 10.5 PREFETCHSIZE 16 TRANSFERRATE 0.14 BUFFERPOOL  TEMP