DB2数据库-库级别配置-编码、schema以及表空间配置

编码格式的配置。

使用db2 get db cfg for databasename命令查询,可以看到代码集为UTF-8
例如

db2 get db cfg for test,

得到如下结果。
在这里插入图片描述
如需要注意的时,数据库建库时一旦指定了代码集,则不能修改,只能删除重建。
建库sql语句:
Create database test using codeset UTF-8 territory zh_cn;
如果使用数据库管理工具建库,注意修改代码集。
相关资料查阅:
https://happyqing.iteye.com/blog/2085292 db2查看数据库代码集(字符集、编码)

https://happyqing.iteye.com/blog/2085290 DB2数据库三种级别字符集的设置

DB2 SCHEMA配置

先了解一下DB2的基本概念

DB2数据库几个概念
1、instance, 同一台机器上可以安装多个DB2 instance。
2、database, 同一个instance下面可以创建有多个database。
3、schema, 同一个database下面可以配置多个schema。
4、table,同一个schema下可以创建多个table

DB2的schema对象和user对象

每一个DB2授权用户都有一个对应的schema,其名字和用户名相同;当然也可以再创建新的schema;这样DB2中user和schema是一种一对多的关系,而Oracle中是一对一的关系。
每一个schema都有一个属主(即所属用户),这个属主在创建scheme的时候指定,如果没有指定值,默认即当前用户,也就是说谁创建了这个schema,那么这个schema就属于谁。
对于每一个数据库connection,缺省操作都是在其相同用户名的schema下面,除非用户显示的更改了当前schema。
DB2 schema相关SQL语句

CREATE SCHEMA <schema-name> [AUTHORIZATION <schema-owner-name>]

DROP SCHEMA <schema-name> RESTRICT
SELECT CURRENT SCHEMA FROM SYSIBM.SYSDUMMY1
SELECT CURRENT USER FROM SYSIBM.SYSDUMMY1
SET CURRENT SCHEMA = <schema-name>

原文:https://www.jianshu.com/p/e1f38505f789
所以我们在设置数据库连接URL的时候,不仅要指定database,也需要指定当前模型。

jdbc:db2://127.0.0.1:50000/test:currentSchema=DB2_TEST;

在指定数据库后加上 “:currentSchema=SCHEMA_NAME”,这里需要注意的是,模型的指定是区分大小写的。

DB2表空间及缓冲池的配置

在辛苦建库并完成配置,当你以为大功告成只需要导入sql文件完成建表的时候,你会发现建表的时候报了如下的异常
DB2 SQL Error: SQLCODE=-286, SQLSTATE=42727,
这是因为表空间不足的原因造成的,当然前提你的表得大到超出系统默认设定的表空间。
我们先了解一下表空间相关的理论。

表空间理论

表空间是数据库系统中数据库逻辑结构与操作系统物理结构之间建立映射的重要存储结构,它作为数据库与实际存放数据的容器之间的中间层,用于指明数据库中数据的物理位置。任何数据库的创建都必须显式或隐式的为其指定表空间,且数据库中的所有数据都位于表空间中。
DB2数据库系统的表空间有三种管理类型:

系统管理表空间(SMS,System-Managed Space)

SMS表空间由操作系统的文件系统管理器分配并管理。

数据库管理表空间(DMS,Database-Managed Space)

DMS表空间由数据库管理系统(DBMS)自己管理控制,本质上讲,这种类型的表空间是为了最大程度满足数据库管理器的需要而设计并实现的一种特定目的的文件系统。

DMS自动存储表空间(Automatic Storage DMS)

自动存储表空间不是真正意义上的独立类型的表空间。它是DMS存储的另外一种处理方法。

上述是按照管理方式的不同对数据库表空间类型进行了划分,事实上,根据用途的不同,表空间也可以划分为五种类型:

系统表空间(SYSCATSPACE)

系统工具表空间(SYSTOOLSPACE)

用户表空间(USERSPACE)

用户表空间也是数据库创建时自动创建的,表空间名称为USERSPACE1,数据库中的用户表默认存放于这个表空间中,用户表空间是可选的,一个数据库可以有多个用户表空间。必须至少有一个用户表空间(没有用户表空间的话数据库无法存放用户数据)。用户表空间也可以是SMS表空间或DMS表空间,通常使用DMS表空间。

临时表空间(TEMPSPACE)

常规表空间

转自:https://blog.csdn.net/mydriverc2/article/details/81287476 深入理解DB2表空间(Tablespace)

缓冲池理论

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

其他查阅资料:

https://www.ibm.com/developerworks/cn/data/library/techarticles/0212wieser/0212wieser.html 表空间和缓冲池
https://blog.csdn.net/tazimi16/article/details/78119777 DB2缓冲池查看,修改,DB2事务日志已满解决方法等知识

我个人的理解,缓冲池其实就是一个存储转发的作用,在你首次进行一次select查询的时候,数据需要从系统中取到缓冲池,再形成查询结果,如果你访问的信息在缓冲池就直接在缓冲里面拿,这对于降低数据库压力,提高数据库性能和速度有明显的效果。
譬如一个简单的数据库查询语言,如果你的第二次查询没有改变整个查询语句的语义结构,那么时间就会大大缩短。

解决-error SQL:-286错误

转自 https://blog.csdn.net/m0_37373806/article/details/56843471

一、首先创建一个页大小为32K的缓冲池

Sql语句:

CREATE BUFFERPOOL buf1 IMMEDIATE SIZE 250 NUMBLOCKPAGES 108 BLOCKSIZE 32 PAGESIZE 32 K 

或者在命令行输入

db2 "CREATE BUFFERPOOL buf1 IMMEDIATE SIZE 250 NUMBLOCKPAGES 108 BLOCKSIZE 32 PAGESIZE 32 K"

其中 buf1 为缓冲池名

二、然后创建一个页大小为32K的表空间

Sql语句:

CREATE LARGE TABLESPACE ts2 PAGESIZE 32 K MANAGED BY AUTOMATIC STORAGE EXTENTSIZE 32 OVERHEAD 10.5 PREFETCHSIZE 32 TRANSFERRATE 0.14 BUFFERPOOL buf1 ;

或者在命令行输入

db2 "CREATE LARGE TABLESPACE ts2 PAGESIZE 32 K MANAGED BY AUTOMATIC STORAGE EXTENTSIZE 32 OVERHEAD 10.5 PREFETCHSIZE 32 TRANSFERRATE 0.14 BUFFERPOOL buf1"

其中 ts2 为表空间名

三、最后修改事务日志大小

命令行命令:

db2 update db cfg using LOGFILSIZ 10240 --日志文件大小
db2 update db cfg using LOGPRIMARY 100 --主日志文件个数
db2 update db cfg using LOGSECOND 100 --辅助日志文件的个数

修改完成后重启DB2服务,

db2stop force
db2start

关于事务日志满的解决办法,可以查阅
https://blog.csdn.net/oqzuser1234567445/article/details/52503964 db2事务日志满,或者日志磁盘空间已满解决办法
关于其原理,可以查阅
https://www.cnblogs.com/BradMiller/p/3198126.html DB2事务日志
http://tech.it168.com/a2008/1124/211/000000211841.shtml DB2事务日志使用经验

简单来说,事务日志记录数据库中所有对象和数据的改变,如果当前活动事务使用空间超过事务日志空间,则会报事务日志已满异常,需要关闭导致此异常的应用程序或者事务,增大事务日志空间将有效避免此类问题。

猜你喜欢

转载自blog.csdn.net/weixin_43740223/article/details/85251507