在DB2中,一个数据库只能属于一个实例,一个实例可以对应多个数据库,所以实例和数据库的关系是一对多。
每个数据库是由一组对象组成的,如:表、视图、索引等。表是二维结构,由行和列组成,表数据存放在表空间里,表空间是数据库的逻辑存储层,每个数据库可以包含多个表空间,每个表空间只能归属于一个数据库,所以数据库和表空间的关系是一对多。
所以DB2数据库的逻辑结构分别为:实例-->数据库-->表空间-->表。
物理结构:
每个表空间由一个或多个容器组成,容器是映射到物理存储,容器可以是目录、文件、裸设备。每个容器只能属于一个表空间。根据数据管理方式,表空间可以分为系统管理(SMS)、数据库管理(DMS)
DB2将表和索引存储在PAGE页里,page是db2中最小的物理分配单元,表中的每行数据只能包含在一页中,不能跨页。DB2支持的页大小分为:4K、8K、16K、32K四种,当DB2在读取数据的时候,不是按页读取,而是按照extent(块)读取,一个extent是由一组连续的页组成。如果一个表空间有多个容器,为了数据均衡的分布,所以在写数据的时候,按照循环的方式在各个容器里写数据,当一个容器中写满一个extent的时候,将开始在第二个容器继续写extent,周而复始,可以提高读写的效率。
每个表空间由一个或多个容器组成,表空间为逻辑层次中,而真正的数据是存放在容器中的,容器是由多个extent组成。
DB2的存储模型为:表空间---->容器---->extent------>page.。
在V8中,当每个PAGE的大小为32K的时候,表空间最大只能容纳256G。
在V9开始,当每个PAGE的大小为32K的时候,表空间最大可以容纳16T。这就是大表空间(large)。从V9开始,默认创建的数据表空间均为大表空间。
② db2的数据类型都有哪些 用法
http://publib.boulder.ibm.com/infocenter/db2luw/v9/topic/com.ibm.db2.udb.admin.doc/doc/r0008483.htm
③ db2数据库把char类型直接改成varchar类型吗
在数据库设计的时候,VARCHAR和CHAR类型之间的使用,我和小唐发生了分歧。
我坚持要对表中的某些列,比如个性签名,使用CHAR型的来存储字符串信息。因为我认为使用CHAR一方面在数据库检索起来速度更快,同时在使用COBOL程序在逻辑上处理CHAR字符串生成的变量的时候,也相对简单,只要直接给变量赋值就可以了,这样子也便于程序的处理。而如果使用使用那个VARCHAR的话,数据检索效率相对低,而在COBOL中需要首先给字符串的长度赋值,然后在给它的内容赋值。这样子加大了程序的逻辑处理过程。还带来了一定的风险,比如赋值的时候,如果赋值的长度超过了最大的值,就会使得程序执行的时候出现意想不到的后果。
而他认为,他使用CHAR类型,很容易浪费存储空间,因为如果使用CHAR,无论存储的字符串内容的长度是多长,都会使用它固定长度去存储它。而使用VARCHAR则可以根据它实际的字符串长度去存储数据。这个是VARCHAR类型最大的特点,也是它到现在在数据库技术中还能存在的根本原因。
我开始对自己的想法变得有点怀疑。后来,我去网上找了找相关的资料,得知:
1,如果希望列中的数据值大小接近一致,请使用char;如果希望列中的数据值大小显着不同,请使用varchar。
2,事实上,因为char类型通常要比varchar类型占用更多的空间,所以从减少空间占用量和减少磁盘i/o的角度,使用varchar类型反而更有利
3,当数据的长度相差较大时,使用char会浪费很多的空间,而使用varchar可以节约大量的空间,对于数据量比较大的情况,更能体现出两者的差异。当数据长度比较固定(相差较小或固定不变)时,两者的差别就不太大。
4,在查询时,由于存储方式上的不同,导致char字段的查询速度要好于varchar字段,特别是对于在极大量的数据中查询。
综合上述因素,我采取了他的做法。后来才知道,其实,那些东西都已经是约定俗成了的。对于较长的字符串就是应该使用VARCHAR类型。看来自己还是有很多的东西值得去学习,而不是片面地从程序处理逻辑上来理解,判断。
④ DB2数据库中的time数据类型的形式是什么样的
可以在db2中创建时间字段列时指定字段类型为time型create table zzz(coltime time )这样插入的值即为时间类型三段12:22:55.time类型本身会检查字段的输入是否在24小时之内合法的格式,不然是插入不进去的,所以你不需要再通过语句alter table zzz add constraint timevalid check (coltime between '00:00:00' and '23:59:59')来重复指定约束时间段,这句完全多余. db2的时间格式你可以通过语句<1> select current time from sysibm.al <2> select current timestamp from sysibm.al <3> select current date from sysibm.al来查看数据库默认的日期格式.
⑤ db2数据库blob类型怎么查询
1.第一步:进入DB2命令行模式,连接到需要导入信息的表所有在的数据库。 db2 connect to db_name user username using password
2.第二步:输入导出命令。 db2 export to D:\blob_data\blob_table.txt of del lobs to D:\blob_data lobfile lob_doc ...
⑥ Oracle 的NUMBER类型的数据在DB2 中最好用那种类型接收
不太明白 你为什么 确认是 number,而不是 number(p,s)
如果是 数据库表 的字段 的数据类型, 一般都要指定 p,s 的吧 (当然s=0)算特例。
说回你的问题: Number 声明一个浮点数 其精度为38
也就是说,你在db2中找到一个浮点数的数据类型,精度 38 的即可。参考下面2个类型:
*单精度浮点数(Single-precision floating-point),REAL:单精度浮点数是实数的 32 位近似值。数字可以为零,或者在从
-3.402E+38 到 -1.175E-37 或从 1.175E-37 到 3.402E+38
的范围内。
*双精度浮点数(Double-precision floating-point),DOUBLE,DOUBLE PRECISION 或
FLOAT:双精度浮点数是实数的 64 位近似值。数字可以为零,或者在从 -1.79769E+308 到 -2.225E-307 或从 2.225E-307 到
1.79769E+308 的范围内。
⑦ DB2数据库中数据类型问题
当然都不好了,储存时间要不用数字型decimal,longint要不就是时间型datetime之类的,你那里难道没有参考手册。
LONG VARGRAPHIC 这种是特殊类型,我也没有见过,可能是可以储存图像类型吧?这个做不了准。
我觉得n8指的是decimal(8,0)
⑧ 如何使用db2ckbkp命令查看DB2数据库备份的类型
db2ckbkp命令不仅可以用来检查DB2数据库备份文件的完整性,而且还可以用来查询DB2数据库备份文件的元数据,如果我们有一些备份文件,但是不知道备份的类型,我们可以使用db2ckbkp -H <备份文件>来检查DB2数据库备份的类型: #db2ckbkp -H WWQ.0.gmcw.NODE0000.CATN0000.20130107000019.001 我们可以通过上述输出中的Backup Mode, Backup Type 和Backup Gran.来确定备份的类型,三个关键字的说明如下: Backup Mode 0 - offline(脱机备份), 1 - online(联机备份) Backup Type 0 - full(全备份), 3 - tablespace(表空间级备份) Backup Gran. 0 - normal(正常备份), 16 - incremental(增量备份), 48 - delta(增量delta备份) 其中incremental(增量备份)和delta(增量delta备份)的说明如下: Incremental(增量备份): 增量备份映像是自从上次最新的、成功的完全备份操作以来,更改过的所有数据库数据的副本。也称为累积备份映像,因为进行的一系列增量备份中的每一个都会有上次增量备份映像的内容。增量备份映像的前身通常是同一对象最新的、成功的完全备份。 Delta(增量delta备份): delta 备份映像或增量 delta 备份映像是自从上次相关表空间的成功备份(包括完整、增量或 delta 备份)以来,已更改过的所有数据库数据的副本。也称为差异备份映像或非累积备份映像。delta 备份映像的前身是最新的成功备份,包括 delta 备份映像中每个表空间的备份。 明确了上述数字的含义后,我们就可以很容易地辨别上述备份文件是属于“联机全备份”: Backup Mode -- 1 (联机备份) Backup Type -- 0 (全备份) Backup Gran. -- 0 (正常备份)
⑨ java数据类型与db2数据类型的对照
时间可以直接使用字符串类型也行,因为所有的插入都是进行的字符串的操作
例如:insert into XX values("88-1-1")
只要你在插入之前把时间的格式转化成功了就行了,其他的无所谓,根据下面类可以进行任意转换了
public static Date getYear(String year) { //字符串转换成时间
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date myDate = null;
try {
myDate = df.parse(year);
} catch (ParseException e) {
System.out.println("getYear error: " + e.getMessage());
}
return myDate;
}
//时间转换成字符串
public static String getNowDateShort(Date currentTime) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(currentTime);
return dateString;
}
⑩ db2数据库 怎么修改一个字段的数据类型
运行db2cc,在控制中心中右击要修改的表,生成DDL,将该DDL中CREATE
TABLE命令包括表名进行相应修改后,运行该命令创建符合需要的新表。
然后insert
into
newtable
select
*
from
oldtable,如果可以兼容的话,否则你需要考虑怎么修改一下。
最后删除旧表,新表改名为旧表。
希望能帮到您。