DB2分区表
db2 数据库回滚

ROLLFORWARD DATABASE 命令允许每次指定多个操作,各个操作由关键字AND隔开。
例如,要前滚至日志末尾,然后完成,可将下列独立的命令:db2 rollforward db sample to end of logsdb2 rollforward db sample complete组合为:db2 rollforward db sample to end of logs and complete虽然这两种方法是等效的,但建议您分两个步骤来完成此类操作。
在停止前滚操作前应验证它是否已取得预期的进度,以免丢失任何日志,这一点很重要。
如果前滚命令遇到错误,前滚操作就无法完成。
在这种情况下,将返回该错误,这样,您就能够修正该错误并重新发出以上命令。
但是,如果无法修正该错误,那么可以通过发出以下命令强制前滚完成:db2 rollforward db sample complete此命令使数据库联机并复原到发生故障前日志点。
示例 2将数据库前滚至日志末尾(已复原了两个表空间):db2 rollforward db sample to end of logsdb2 rollforward db sample to end of logs and stop这两个语句是等效的。
不需要AND STOP 或AND COMPLETE 表空间就可以前滚恢复到日志末尾。
不需要表空间名称。
如果未指定,将包括所有需要前滚恢复的表空间。
如果将只前滚这些表空间的一个子集,那么必须指定它们的名称。
示例 3复原了 3 个表空间后,将其中一个前滚到日志末尾,另两个前滚到某时间点,所有操作都要联机执行:db2 rollforward db sample to end of logs tablespace(TBS1) online db2 rollforward db sample to 1998-04-03-14.21.56 and stoptablespace(TBS2, TBS3) online应注意,两个前滚操作不能并发运行。
DB2分区表

DB2 V9.7 for Linux, UNIX, and Windows表分区表分区功能是一种数据组织方案,即,表数据根据一个或多个表列中的值分布到多个存储对象(称为数据分区或范围)中。
每个数据分区都是单独存储的。
这些存储对象可以在不同的表空间中,也可以在相同表空间中。
存储对象的行为与单个表的行为非常类似,它通过使用ALTER TABLE ... ATTACH 语句将现有表合并到分区表中,可以很容易实现快速转入。
同样,使用ALTER TABLE ... DETACH 语句很容易实现转出。
查询处理同样可以利用分离的数据来避免扫描不相关数据,从而使许多数据仓库样式查询具有更好地查询性能。
按照CREATE TABLE 语句的PARTITION BY 子句中指定那样将表数据分区。
此定义中使用的列被称为表分区键列。
这种组织方案可以单独地使用,也可与其他组织方案结合使用。
通过组合使用CREATE TABLE 语句的DISTRIBUTE BY 和PARTITION BY 子句,可以将数据分布到跨多个表空间的数据库分区。
该组织方案包括:•DISTRIBUTE BY HASH•PARTITION BY RANGE•ORGANIZE BY DIMENSIONS表分区功能可用于DB2® 企业服务器版Linux 版、UNIX 版和Windows 版版本9.1 和更高版本。
表分区的优点如果下列任何情况适用于您和您的组织,请考虑表分区的许多优点:•更容易转入和转出表数据使数据仓库受益•数据仓库包括大型表•您正在考虑从先前发行版或某个竞争数据库产品迁移至版本9.1 数据库•想要更有效地使用分层存储管理(HSM) 解决方案表分区简化了表数据转入和转出以及管理工作,并且提高了索引位置的灵活性和查询处理效率。
有效转入和转出表分区功能提高了表数据的转入和转出效率。
这可通过使用ALTER TABLE 语句的ATTACH PARTITION 和DETACH PARTITION 子句来实现。
数据仓库开发培训(1)-DB2基础

-2-
数据仓库开发系列培训
DB2 基础
阅读说明 本文主要面向数据库设计和开发人员、部署人员和性能调优人员。 杭州滨江 2013 年 7 月 3 日
-3-
数据仓库开发系列培训
DB2 基础
目录
培训介绍...................................................................................................................................... - 2 本文内容...................................................................................................................................... - 2 阅读说明...................................................................................................................................... - 3 第一篇 基础理论........................................................................................................................ - 6 1 DB2 数据库基本概念 ........................................................................................................
db2 数据库回滚

ROLLFORWARD DATABASE 命令允许每次指定多个操作,各个操作由关键字AND隔开。
例如,要前滚至日志末尾,然后完成,可将下列独立的命令:db2 rollforward db sample to end of logsdb2 rollforward db sample complete组合为:db2 rollforward db sample to end of logs and complete虽然这两种方法是等效的,但建议您分两个步骤来完成此类操作。
在停止前滚操作前应验证它是否已取得预期的进度,以免丢失任何日志,这一点很重要。
如果前滚命令遇到错误,前滚操作就无法完成。
在这种情况下,将返回该错误,这样,您就能够修正该错误并重新发出以上命令。
但是,如果无法修正该错误,那么可以通过发出以下命令强制前滚完成:db2 rollforward db sample complete此命令使数据库联机并复原到发生故障前日志点。
示例 2将数据库前滚至日志末尾(已复原了两个表空间):db2 rollforward db sample to end of logsdb2 rollforward db sample to end of logs and stop这两个语句是等效的。
不需要AND STOP 或AND COMPLETE 表空间就可以前滚恢复到日志末尾。
不需要表空间名称。
如果未指定,将包括所有需要前滚恢复的表空间。
如果将只前滚这些表空间的一个子集,那么必须指定它们的名称。
示例 3复原了 3 个表空间后,将其中一个前滚到日志末尾,另两个前滚到某时间点,所有操作都要联机执行:db2 rollforward db sample to end of logs tablespace(TBS1) online db2 rollforward db sample to 1998-04-03-14.21.56 and stoptablespace(TBS2, TBS3) online应注意,两个前滚操作不能并发运行。
parted命令分区--(GPT分区)

parted命令分区--(GPT分区)MBR分区表(主引导记录分区表):2.1TB(1TB=1024GB).①最多⽀持4个主分区.②扩展分区只能有⼀个,并且扩展分区与主分区之和不超过4,扩展分区内不能写数据,只能写⼊逻辑分区.③逻辑分区可以有10个.GPT分区表(也叫GUID分区表,全局唯⼀标⽰分区表):9.4ZB(GB-TB-EB-PB-ZB 1024进制),最多⽀持128个分区.其中1个作为系统保留分区,剩余127个为⽤户⾃定义分区.parted命令直接建⽴的分区是ext2格式,并且,如果通过mkfs格式化为ext4,parted进⾏resize动态调整分区⼤⼩会失败.parted命令能够识别MBR 分区表,显⽰为msdos.[root@localhost ~]# parted #进⼊parted命令GNU Parted 2.1使⽤ /dev/sda #⼀定要看清楚,这是主磁盘,不能在这⾥做分区和格式化,不然系统将会⽆法开机Welcome to GNU Parted! Type 'help' to view a list of commands.(parted) quit #这是输⼊命令的位置,⽴马使⽤quit退出[root@localhost ~]# parted /dev/sdb #使⽤parted命令必须加⼊参数GNU Parted 2.1使⽤ /dev/sdbWelcome to GNU Parted! Type 'help' to view a list of commands.(parted)接下来进⾏如下⼏个实验:①建⽴GPT分区②已经建⽴分区进⾏扩容③mount挂载④⾃动加载GPT分区1.建⽴GPT分区:[root@localhost ~]# partedGNU Parted 2.1使⽤ /dev/sdaWelcome to GNU Parted! Type 'help' to view a list of commands.(parted) help接下来会显⽰⼀堆的命令列表和命令内容概括,主要有⼀下⼏个需要知道:①help #显⽰命令帮助⽂档,特别是命令的输⼊格式②mklabel mktable #2个都是建⽴新的分区表(硬盘标签),感觉还是mktable更加习惯,好记③mkfs #为分区写⼊⽂件系统④mkpart #创建新的分区⑤print #打印分区信息(已经创建的分区使⽤这个命令查看)⑥quit #退出parted命令⑦rm #删除分区⑧select #选择分区设备,可以切换磁盘(parted) mktable #新建分区表新的磁盘标签类型? gpt #GPT分区表警告: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue? #提⽰"新建分区表会摧毁所有存在磁盘中的数据",是否继续?是/Yes/否/No? y #当然是啦(parted) print #显⽰结果Model: VMware, VMware Virtual S (scsi)Disk /dev/sdb: 5369MBSector size (logical/physical): 512B/512BPartition Table: gpt #是不是发现这⾥由msdos(表⽰MBR)变成了GPT(parted) mkpart #新建分区分区名称? []? nigulasi1 #⾃⼰命名,⽐如说尼古拉斯哈哈⽂件系统类型? [ext2]? #只能默认ext2起始点? 1 #起始点 1M结束点? 1G #结束点1G,注意下⼀个分区起始点不能⼩于1000M,也就是说要从1001M开始,不然会报错,告诉你已经分区了(parted) print #显⽰结果Model: VMware, VMware Virtual S (scsi)Disk /dev/sdb: 5369MBSector size (logical/physical): 512B/512BPartition Table: gptNumber Start End Size File system Name 标志1 1049kB 1000MB 999MB ext2 nigulasi12.已经建⽴的分区进⾏动态调整⼤⼩新建⼀个2G的分区(parted) resize 2 #重新设置分区⼤⼩WARNING: you are attempting to use parted to operate on (resize) a file system.parted's file system manipulation code is not as robust as what you'll find indedicated, file-system-specific packages like e2fsprogs. We recommendyou use parted only to manipulate partition tables, whenever possible.Support for performing most operations on most types of file systemswill be removed in an upcoming release.起始点? [1001MB]? #起始点默认回车结束点? [3000MB]? 2000M #结束点从3G改为2G(当前默认1G=1000M,⽅便计算)警告: A resize operation on this file system will use EXPERIMENTAL codethat MAY CORRUPT it (although no one has reported any such damage yet).You should at least backup your data first, and run 'e2fsck -f' afterwards.确认/OK/放弃/Cancel? ok #输⼊ok(parted) print #显⽰结果已经缩减⼤⼩Model: VMware, VMware Virtual S (scsi)Disk /dev/sdb: 5369MBSector size (logical/physical): 512B/512BPartition Table: gptNumber Start End Size File system Name 标志1 1049kB 900MB 899MB ext2 nigulasi12 1001MB 2000MB 999MB ext2 nigulasi2(parted) quit #退出其实resize按理来说可以变⼩,也可以变⼤,但是实际上扩容会报错,操作了⼗⼏遍只有⼀遍成功,确实很奇葩,这个parted⼯具还是不够完善,⽐如:操作resize后显⽰Warning:parted's file system manipulation code is not as robust as what you'll find in dedicated, file-system-specific packages like e2fsprogs.表⽰parted⼯具没有我们想的那么完善......毕竟我们马上要学习LVM逻辑卷组,以后只能⽤更⾼级的LVM,这些就当是回忆科技的过往吧.3.⼿动挂载[root@localhost ~]# mkdir /mnt/sdb1 #设置挂载点(挂载点就是已经建⽴的空⽬录)[root@localhost ~]# mkdir /mnt/sdb2 #设置挂载点,新建了2个分区,需要2个挂载点[root@localhost ~]# mount /dev/sdb1 /mnt/sdb1/ #把第⼆块SCSI硬盘上的第⼀个分区挂载到/mnt/sdb1⽬录上[root@localhost ~]# mount /dev/sdb2 /mnt/sdb2/ #把第⼆块SCSI硬盘上的第⼆个分区挂载到/mnt/sdb2⽬录上[root@localhost ~]# df -h #显⽰(只能看已经挂载的)磁盘信息,相当于双击打开"我的电脑"后的显⽰效果Filesystem Size Used Avail Use% Mounted on/dev/sda5 9.8G 2.4G 7.0G 26% /tmpfs 495M 0 495M 0% /dev/shm/dev/sda1 190M 33M 147M 19% /boot/dev/sda3 1.9G 3.5M 1.8G 1% /home/dev/sdb1 804M 13K 761M 1% /mnt/sdb1/dev/sdb2 893M 13K 845M 1% /mnt/sdb2接下来可以cd /mnt/sdb1/进⼊该分区,挂载点相当于⼀个进⼊磁盘对应分区的对应"门",不同分区不同门,进⼊这个⽬录(也就是挂载点),也就是进⼊了分区,新建⽂件,⽬录,包括增删改查都是在第⼆块SCSI硬盘的第⼀个分区上进⾏操作!命令⾏输⼊的mount命令是临时⽣效的,重启后将会失效,因此我们要实现永久⽣效,那就是把"配置信息"或者命令写⼊对应⽂档,那么来看下⼀⼩节.4.⾃动挂载(/etc/fstab)Linux开机时查看/etc/fstab这个配置⽂件,按照配置信息进⾏⾃动挂载.我们需要把新建分区的信息按照对应的格式填⼊这个⽂件内,即可达到⾃动挂载效果.vi /dec/fstab #进⼊配置⽂档#我们拿出⼀⾏来进⾏学习UUID=b9008873-894b-4586-bbd9-0690a052c5d6 /home ext4 defaults 1 2#第⼀列UUID,相当于硬盘分区的"⾝份证号码",通过这个号码识别硬盘,命令⾏模式下输⼊"ll /dev/disk/by-uuid/"查看对应分区的UUID号码.#第⼆列挂载点#第三列⽂件系统的格式#第四列默认参数配置,defaults就⾏,如果有其他功能添加,添加",功能名"即可#第五列是否备份,1-备份,0-不备份,默认1即可#第六列是开机fsck⼯具⾃检,0-不检,1-开机时检测,2-开机后检测,只有根分区默认开机⾃检, 其他分区默认2,有点像360优化开机选项,不然的话拖慢了开机速度.备注:这⾥存在⼀个很⼤的问题,导致很多⼈挂载失败!⾸先mount命令默认挂载的时候不需要我们⼿动配置信息,但是配置⽂件时需要UUID,这个数据是格式化后⽣成的,如果只是分区,但是没有格式化,⼀种可能是命令/"ll /dev/disk/by-uuid/"结果⾥没有你的设备对应的UUID,⽐如说/dev/sdb2,还有⼀种可能是显⽰的旧UUID,为什么说旧呢?因为你从最近⼀次⽂件修改时间可以看出来.因此你粘贴的UUID绝对是错的,重启后系统开机报错,说找不到UUID对应设备,谨记!如果开机报错,修复办法在上⼀篇⽂档"fdisk创建MBR分区"的末尾.在⽂档末尾添加如下内容:UUID=95988f1e-de1f-47e6-a791-4184a588d7ed /mnt/sdb1 ext2 defaults 1 2UUID=31f7fdbc-780b-42fd-9d3e-6764edbe68e3 /mnt/sdb2 ext2 defaults 1 2保存,退出⽂档.重启.[root@localhost ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/sda5 9.8G 2.4G 7.0G 26% /tmpfs 495M 0 495M 0% /dev/shm/dev/sda1 190M 33M 147M 19% /boot/dev/sda3 1.9G 3.5M 1.8G 1% /home/dev/sdb1 804M 13K 761M 1% /mnt/sdb1/dev/sdb2 893M 13K 845M 1% /mnt/sdb2可以看到分区已经⾃动挂载上来了,哇偶.⼋.建⽴swap分区实验:①建⽴swap分区②挂载⾄系统swap中③⾃动挂载swap分区在虚拟机⾥新添加⼀个空⽩盘给系统,1G⼤⼩⾜够了,只是做实验加⼊到swap分区中.记得添加空⽩盘后⽤命令"fdisk -l"如果不显⽰/dev/sdc,重启.[root@localhost ~]# fdisk -lDisk /dev/sda: 21.5 GB, 21474836480 bytes #当前测试Disk /dev/sdc,因此省略显⽰a/b盘Disk /dev/sdb: 5368 MB, 5368709120 bytesDisk /dev/sdc: 1073 MB, 1073741824 bytes #已经识别第三块SCSI硬盘了255 heads, 63 sectors/track, 130 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x000000001.使⽤fdisk⼯具创建swape分区:[root@localhost ~]# fdisk /dev/sdc #配置第三块硬盘,要写命令参数的Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabelBuilding a new DOS disklabel with disk identifier 0x1becc0ab.Changes will remain in memory only, until you decide to write them.After that, of course, the previous content won't be recoverable.#上⾯⼀⼤堆的警告意思就是:<你添加的空⽩盘是个三不像,啥格式都没有,我给你建了个DOS分区表格式,如果你保存,那就这个样写⼊了,写⼊后你的数据就没了>空⽩盘,不⽤管.Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)WARNING: DOS-compatible mode is deprecated. It's strongly recommended toswitch off the mode (command 'c') and change display units tosectors (command 'u').Command (m for help): p #显⽰分区信息,空⽩盘呗,要啥没啥.Disk /dev/sdc: 1073 MB, 1073741824 bytes255 heads, 63 sectors/track, 130 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x1becc0abDevice Boot Start End Blocks Id SystemCommand (m for help): t #直接改系统格式会报错,因为没有任何分区啊No partition is defined yet!Command (m for help): n #新建分区Command actione extendedp primary partition (1-4)p #输⼊p,选择主分区Partition number (1-4): 1 #分区号码,挨着顺序来First cylinder (1-130, default 1): #第⼀个柱⾯,默认就是1,直接回车就⾏Using default value 1Last cylinder, +cylinders or +size{K,M,G} (1-130, default 130): #最后⼀个柱⾯,默认回车Using default value 130Command (m for help): p #显⽰分区信息Disk /dev/sdc: 1073 MB, 1073741824 bytes255 heads, 63 sectors/track, 130 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x1becc0abDevice Boot Start End Blocks Id System/dev/sdc1 1 130 1044193+ 83 Linux#最后⼀列System(系统)的内容是Linux,不⾏,我们要建swap分区,所以得改!Command (m for help): l #列举⽀持的系统格式(主要记swap是哪个号,恩,82)0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris1 FAT12 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT-2 XENIX root 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT-3 XENIX usr 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT-4 FAT16 <32M 41 PPC PReP Boot 85 Linux extended c7 Syrinx5 Extended 42 SFS 86 NTFS volume set da Non-FS data6 FAT16 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / .7 HPFS/NTFS 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility8 AIX 4f QNX4.x 3rd part 8e Linux LVM df BootIt9 AIX bootable 50 OnTrack DM 93 Amoeba e1 DOS accessa OS/2 Boot Manag 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/Ob W95 FAT32 52 CP/M 9f BSD/OS e4 SpeedStorc W95 FAT32 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fse W95 FAT16 (LBA) 54 OnTrackDM6 a5 FreeBSD ee GPTf W95 Ext'd (LBA) 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/10 OPUS 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b11 Hidden FAT12 5c Priam Edisk a8 Darwin UFS f1 SpeedStor12 Compaq diagnost 61 SpeedStor a9 NetBSD f4 SpeedStor14 Hidden FAT16 <3 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary16 Hidden FAT16 64 Novell Netware af HFS / HFS+ fb VMware VMFS17 Hidden HPFS/NTF 65 Novell Netware b7 BSDI fs fc VMware VMKCORE18 AST SmartSleep 70 DiskSecure Mult b8 BSDI swap fd Linux raid auto1b Hidden W95 FAT3 75 PC/IX bb Boot Wizard hid fe LANstep1c Hidden W95 FAT3 80 Old Minix be Solaris boot ff BBT1e Hidden W95 FAT1Command (m for help): t #这回有分区了,再次修改系统格式Selected partition 1 #只有⼀个分区,所以没得选,只能是1Hex code (type L to list codes): 82 #这⾥输⼊82,意思就是改为swap格式Changed system type of partition 1 to 82 (Linux swap / Solaris)Command (m for help): p #显⽰结果Disk /dev/sdc: 1073 MB, 1073741824 bytes255 heads, 63 sectors/track, 130 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x1becc0abDevice Boot Start End Blocks Id System/dev/sdc1 1 130 1044193+ 82 Linux swap / Solaris#这⾥显⽰的效果就是我们要的swap分区了,仔细核对最后⼀列系统格式,别搞错了.#⼀定⼀定⼀定要保存,重要的事情说三遍,输⼊ wCommand (m for help): w #!!!!重要The partition table has been altered! #意思就是磁盘的分区表已经改了Calling ioctl() to re-read partition table. #调⽤ioctl()函数可以得到磁盘信息,除⾮你做开发,不然⽤不到Syncing disks. #信息已经同步到了磁盘1. 挂载⾄swap分区中:分区后,该做什么? 格式化啊啊啊啊 ![root@localhost ~]# mkswap /dev/sdc1 #⽤mkswap格式化/dev/sdc1分区Setting up swapspace version 1, size = 1044188 KiBno label, UUID=0ccb15e6-af00-475c-93b6-56cd1f543ccb #说好的格式化后⽣成UUID,信![root@localhost ~]# free -h #记录当前swap分区信息,不然你咋知道增⼤了没有?total used free shared buffers cachedMem: 988M 279M 709M 260K 19M 108M-/+ buffers/cache: 150M 837MSwap: 7.8G 0B 7.8G[root@localhost ~]# swapon /dev/sdc1 #⼿⼯把/dev/sdc1加⼊swap分区,没报错[root@localhost ~]# free -h #对照下,恩,确实变⼤了1G,成功!total used free shared buffers cachedMem: 988M 279M 708M 260K 19M 108M-/+ buffers/cache: 151M 836MSwap: 8.8G 0B 8.8G2. ⾃动挂载swapvi /etc/fstab⽂档末尾加⼊下⾯⼀⾏信息:UUID=0ccb15e6-af00-475c-93b6-56cd1f543ccb swap swap defaults 0 0保存退出.重启.开机后检查是否正常:Last login: Fri Apr 13 17:12:05 2018 from 192.168.41.1[root@localhost ~]# free -htotal used free shared buffers cachedMem: 988M 231M 757M 260K 18M 58M-/+ buffers/cache: 153M 834MSwap: 8.8G 0B 8.8G内存⼤⼩直接存7.8G变成了8.8G,不⽤再⼿动添加了,哈哈,省事.。
db2 syscolumns表结构

DB2(Database 2)是IBM公司开发的一种关系数据库管理系统。
在DB2中,syscolumns是一个非常重要的系统表,它存储了数据库中表的结构信息。
本文将详细介绍DB2中syscolumns表的结构,并给出一些常见的用法和注意事项。
一、syscolumns表的结构1. 列名(colname):该列存储了表中所有列的名称。
2. 列序号(colno):该列存储了表中所有列的序号,从1开始递增。
3. 列所属的表名(tabname):该列存储了每个列所属的表的名称。
4. 列所属的模式名(tabschema):该列存储了每个列所属的表的模式名称。
5. 列类型(typename):该列存储了每个列的数据类型,如varchar、int等。
6. 列长度(length):该列存储了每个列的长度。
7. 列精度(scale):该列存储了每个列的精度。
8. 默认值(default):该列存储了每个列的默认值。
9. 是否可为null(nulls):该列存储了每个列是否允许为空值,是一个布尔值。
二、syscolumns表的用法在实际的数据库管理中,syscolumns表有很多用途。
以下是一些常见的用法:1. 查询表的列信息:通过在syscolumns表中查询特定表的列信息,可以方便地了解表的结构,包括列名、数据类型、长度等。
2. 检查列的默认值和是否允许为空:通过syscolumns表,可以查看每个列的默认值和是否允许为空,从而更好地理解表的设计意图。
3. 维护数据库的元数据:DBA可以通过syscolumns表来维护数据库的元数据,如跟踪表结构的变化、识别潜在的性能问题等。
三、syscolumns表的注意事项在使用syscolumns表时,需要注意一些事项:1. 需要有足够的权限:要查询syscolumns表,用户需要有足够的权限,通常是DBA或者有相应权限的用户。
2. 不要直接修改syscolumns表:syscolumns表是系统表,不建议直接对其进行修改,以免造成数据库结构的混乱。
DB2使用手册

DB2使⽤⼿册第⼀部分DB2系统管理命令1. Db2有域,实例,和数据库三层的概念。
2.查看数据库服务器中有⼏个数据库。
包括⽹络中数据库的引⽤。
进⼊数据库安装⽬录下的bin⽬录:C:\Program Files\IBM\SQLLIB\BIN执⾏db2 list database directory命令3.查看命令选项说明list command options4.查看运⾏的数据库服务器中关联了多少个引⽤程序对数据库的访问。
进⼊数据库安装⽬录下的bin⽬录:C:\Program Files\IBM\SQLLIB\BINdb2 list applications命令可以通过db2 force application(进程id) 杀死对应的进程。
5.如何强制断开应⽤程序和数据库的连接。
进⼊数据库安装⽬录下的bin⽬录:C:\Program Files\IBM\SQLLIB\BIN⾏下列的命令 db2 force applications 可以强制断开应⽤程序和数据库的连接。
6.如何备份数据库进⼊db2的操作环境,然后运⾏backup database 数据库别名 user ⽤户名 using 密码命令7.停⽌数据库的服务器。
进⼊数据库安装⽬录下的bin⽬录:C:\Program Files\IBM\SQLLIB\BIN或db2操作环境中,如果在db2操作环境中必须通过的db2 terminate命令终结db2操作环境中启动的所有⼦进程(即停⽌所有命令⾏处理器回话)再执⾏db2stop命令。
注意:在执⾏此命令的时候,必须没有应⽤程序或⽤户和数据库连接。
可以在执⾏停⽌命令之前查看于db2服务器连接的应⽤程序和⽤户。
然后执⾏牵制断开命令断开连接的数据库和⽤户。
8.如何从旧版本中把数据库迁移到新的安装版本中(在新版数据库种运⾏下列代码)1. 验证数据库是否可以被迁移。
⽤db2ckmig命令,db2ckmig /e 数据库别名 /l 验证信息保存路径 /u ⽤户名 /p 密码1. 执⾏数据库的迁移命令MIGRATE database 数据库别名 user ⽤户名 using 密码命令9.启动DB2服务器进⼊数据库安装⽬录下的bin⽬录:C:\Program Files\IBM\SQLLIB\BIN或db2操作环境中执⾏db2start命令10.关于命令⾏编辑器的使⽤使⽤命令⾏编辑器之前要连接到⼀个数据库。
DB2基础知识

BSDS
系统下包含了一整套系统文件、一套
系统数据库和用户定义的多个
系统 数据库
应用 数据库
应用数据库
■ DB2 Object
CATALOG
DB2 SUBSYSTEM
DIRECTORY OTHER SYSTEM OBJECTS
DATABASE 1
TABLE SPACES1
DATABASE2.etc.
■分区表空间
某个分区可以STOP,不影响其它分区
上例中,STOP 0300—0399:天津地区 有交易查询: WHERE ZONENO=200 因没有涉及到0300-0399分区,查询交易仍然可以成功
■ PARTITION表划分原则
数据量过大的表(超过2G) 并行批量程序涉及的表
■顺序预取 SEQUENTIAL PREFETCH
用于读取连续的页 既可用于在TABLE SPACE SCAN中访问连续的数 据页,也可用于在INDEX SCAN中访问连续的数 据页和索引页 页 页 页 页
页 页 页 页 页 页 页 页 页 页 页 页 页
单个I/O
单个I/O
页
页
页
页
页
页
页
页
TABLE SPACES2
STORAGE GROUP1 VOLUME1 VOLUME2
TABLE1
INDEX1 VIEW1
TABLE2. etc.
INDEX2.etc. VIEW2 VIEW3.etc STORAGE GROUP2 VOLUME3
■ DB2 Objects 概述
■ PARTITION TABLESPACE 的缺点
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DB2 V9.7 for Linux, UNIX, and Windows表分区表分区功能是一种数据组织方案,即,表数据根据一个或多个表列中的值分布到多个存储对象(称为数据分区或范围)中。
每个数据分区都是单独存储的。
这些存储对象可以在不同的表空间中,也可以在相同表空间中。
存储对象的行为与单个表的行为非常类似,它通过使用ALTER TABLE ... ATTACH 语句将现有表合并到分区表中,可以很容易实现快速转入。
同样,使用ALTER TABLE ... DETACH 语句很容易实现转出。
查询处理同样可以利用分离的数据来避免扫描不相关数据,从而使许多数据仓库样式查询具有更好地查询性能。
按照CREATE TABLE 语句的PARTITION BY 子句中指定那样将表数据分区。
此定义中使用的列被称为表分区键列。
这种组织方案可以单独地使用,也可与其他组织方案结合使用。
通过组合使用CREATE TABLE 语句的DISTRIBUTE BY 和PARTITION BY 子句,可以将数据分布到跨多个表空间的数据库分区。
该组织方案包括:∙DISTRIBUTE BY HASH∙PARTITION BY RANGE∙ORGANIZE BY DIMENSIONS表分区功能可用于DB2® 企业服务器版Linux 版、UNIX 版和Windows 版版本9.1 和更高版本。
表分区的优点如果下列任何情况适用于您和您的组织,请考虑表分区的许多优点:∙更容易转入和转出表数据使数据仓库受益∙数据仓库包括大型表∙您正在考虑从先前发行版或某个竞争数据库产品迁移至版本9.1 数据库∙想要更有效地使用分层存储管理(HSM) 解决方案表分区简化了表数据转入和转出以及管理工作,并且提高了索引位置的灵活性和查询处理效率。
有效转入和转出表分区功能提高了表数据的转入和转出效率。
这可通过使用ALTER TABLE 语句的ATTACH PARTITION 和DETACH PARTITION 子句来实现。
通过转入分区表数据,可以方便地将新范围作为附加数据分区合并到分区表中。
通过转出分区表数据,可以方便地从分区表中分离出某些范围的数据,以进行后续清除或归档处理。
更容易管理大型表由于您可以在各个数据分区上执行管理任务,因此表级别管理更灵活。
这些任务包括:拆离和重新连接数据分区、备份和复原各个数据分区以及重组各个索引。
通过将花费较长时间的维护操作分解成一系列较小的操作,可以缩短这种维护操作的执行时间。
例如,将数据分区放置在单独的表空间中后,备份操作可以逐个处理数据分区。
因此,可以一次备份分区表的一个数据分区。
灵活的索引位置现在,可以将索引放置在不同的表空间中,从而允许对索引位置进行更精细地控制。
这种新设计具有以下一些好处:∙提高了删除索引和联机索引创建的性能∙能够针对每个表索引之间的任何表空间特征使用不同的值(例如,为了确保更好的空间利用率,对每个索引使用不同的页大小可能更合适)。
∙减少IO 争用并提供对表索引数据更有效的并发访问。
∙删除各个索引时,空间将立即可供系统使用,而无需进行索引重组。
∙如果您选择执行索引重组,可以重组单个索引。
DMS 和SMS 表空间都支持在不同于表的另一个位置使用索引。
提高了商业智能样式查询的性能增强了查询处理功能,能够根据查询谓词自动消除某些数据分区。
此功能称为数据分区消除,可为许多决策支持查询带来好处。
下列示例创建了一个名为CUSTOMER 的表,其中包含l_shipdate >= '01/01/2006'和l_shipdate <= '03/31/2006' 的行存储在表空间TS1 中,包含l_shipdate >='04/01/2006' 和l_shipdate <= '06/30/2006' 的行存储在表空间TS2 中,等等。
CREATE TABLE customer (l_shipdate DATE, l_name CHAR(30))IN ts1, ts2, ts3, ts4, ts5PARTITION BY RANGE(l_shipdate) (STARTING FROM ('01/01/2006')ENDING AT ('12/31/2006') EVERY (3 MONTHS))DB2 和Informix 数据库中的数据组织方案表分区功能是一种数据组织方案,即,表数据根据一个或多个表列中的值分布到多个存储对象(称为数据分区或范围)中。
每个数据分区都是单独存储的。
这些存储对象可以在不同的表空间中,也可以在相同表空间中。
按照CREATE TABLE 语句的PARTITION BY 子句中指定那样将表数据分区。
此定义中使用的列被称为表分区键列。
DB2® 表分区功能与Informix® Dynamic Server 和Informix Extended Parallel Server 提供的数据分段组织方法相对应。
Informix 方法Informix 支持若干种数据组织方案,在Informix 产品中,这些方案称为分段。
其中一种较常使用的分段类型是FRAGMENT BY EXPRESSION。
这种类型的分段的工作方式与CASE 语句非常相似,其中有一个与表的每个分段相关联的表达式。
检查这些表达式以便确定行的放置位置。
Informix 与DB2 数据库系统的比较DB2 数据库提供了丰富的补充功能,这些功能与Informix 数据组织方案直接对应,这使客户能够相对容易地从Informix 语法转换为 DB2 语法。
DB2 数据库管理器将生成列与CREATETABLE 语句的PARTITION BY RANGE 子句配合使用,以处理复杂的Informix 方案。
表1对Informix 和 DB2 数据库产品中使用的数据组织方案作了比较。
示例下列示例详细说明了在 DB2 数据库中如何实现与任何使用表达式的Informix 分段方案等同的结果。
示例1:下面这个基本的Create Table 语句显示了Informix 分段以及等同的 DB2 数据库系统表分区语法:Informix 语法:CREATE TABLE demo(a INT) FRAGMENT BY EXPRESSIONa = 1 IN db1,a = 2 IN db2,a = 3 IN db3;DB2 语法:CREATE TABLE demo(a INT) PARTITION BY RANGE(a)(STARTING(1) IN db1,STARTING(2) IN db2,STARTING(3) ENDING(3) IN db3);Informix XPS 支持称为hybrid 的两层分段方案,在此方案中,使用一个表达式来在协作服务器之间分布数据,并使用第二个表达式来在协作服务器内分布数据。
这使所有协作服务器都能够参与查询(即,在所有协作服务器上都有数据),并使查询能够利用数据分区消除功能的优势。
通过结合使用CREATE TABLE 语句的DISTRIBUTE BY 和PARTITION BY 子句,DB2 数据库系统实现了与Informix hybrid 等同的组织方案。
示例2:以下示例显示了组合子句的语法:Informix 语法CREATE TABLE demo(a INT, b INT) FRAGMENT BY HYBRID HASH(a)EXPRESSION b = 1 IN dbsl1,b = 2 IN dbsl2;DB2 语法CREATE TABLE demo(a INT, b INT) IN dbsl1, dbsl2DISTRIBUTE BY HASH(a),PARTITION BY RANGE(b) (STARTING 1 ENDING 2 EVERY 1);此外,可以使用多维集群来进一步组织数据:CREATE TABLE demo(a INT, b INT, c INT) IN dbsl1, dbsl2DISTRIBUTE BY HASH(a),PARTITION BY RANGE(b) (STARTING 1 ENDING 2 EVERY 1)ORGANIZE BY DIMENSIONS(c);这样,列a值相同的所有行都在同一个数据库分区中。
所有列b值相同的行都在同一个表空间中。
对于具有给定的a和b值的行,会将再具有相同c值的所有行集中到一个磁盘上。
此方法非常适合于OLAP 类型的下寻操作,这是因为,仅需扫描单个数据库分区上单个表空间中的一个或数个扩展数据块就可以满足此类查询。
应用表分区以解决常见的应用程序问题下列各节讨论如何应用各种 DB2 表分区功能以解决常见的应用程序问题。
每一节都特别侧重于采取最佳措施来将各种Informix 分段方案映射到等同的 DB2 表分区方案。
创建简单数据分区范围时的注意事项其中一种最常见的表分区应用是根据日期键对大型事实表进行分区。
如果需要创建大小统一的日期范围,请考虑使用自动生成的CREATE TABLE 语法格式。
示例示例1:以下示例显示自动生成的语法格式:CREATE TABLE orders(l_orderkey DECIMAL(10,0) NOT NULL,l_partkey INTEGER,l_suppkey INTEGER,l_linenumber INTEGER,l_quantity DECIMAL(12,2),l_extendedprice DECIMAL(12,2),l_discount DECIMAL(12,2),l_tax DECIMAL(12,2),l_returnflag CHAR(1),l_linestatus CHAR(1),l_shipdate DATE,l_commitdate DATE,l_receiptdate DATE,l_shipinstruct CHAR(25),l_shipmode CHAR(10),l_comment VARCHAR(44))PARTITION BY RANGE(l_shipdate)(STARTING '1/1/1992' ENDING '12/31/1993' EVERY 1 MONTH);这将创建24 个范围,即对1992-1993 的每个月创建一个范围。
尝试插入l_shipdate 超出该范围的行将导致错误。
示例2:将上一示例与以下Informix 语法作比较:create table orders(l_orderkey decimal(10,0) not null,l_partkey integer,l_suppkey integer,l_linenumber integer,l_quantity decimal(12,2),l_extendedprice decimal(12,2),l_discount decimal(12,2),l_tax decimal(12,2),l_returnflag char(1),l_linestatus char(1),l_shipdate date,l_commitdate date,l_receiptdate date,l_shipinstruct char(25),l_shipmode char(10),l_comment varchar(44)) fragment by expressionl_shipdate < '1992-02-01' in ldbs1,l_shipdate >= '1992-02-01' and l_shipdate < '1992-03-01' in ldbs2,l_shipdate >= '1992-03-01' and l_shipdate < '1992-04-01' in ldbs3,l_shipdate >= '1992-04-01' and l_shipdate < '1992-05-01' in ldbs4,l_shipdate >= '1992-05-01' and l_shipdate < '1992-06-01' in ldbs5,l_shipdate >= '1992-06-01' and l_shipdate < '1992-07-01' in ldbs6,l_shipdate >= '1992-07-01' and l_shipdate < '1992-08-01' in ldbs7,l_shipdate >= '1992-08-01' and l_shipdate < '1992-09-01' in ldbs8,l_shipdate >= '1992-09-01' and l_shipdate < '1992-10-01' in ldbs9, l_shipdate >= '1992-10-01' and l_shipdate < '1992-11-01' in ldbs10, l_shipdate >= '1992-11-01' and l_shipdate < '1992-12-01' in ldbs11, l_shipdate >= '1992-12-01' and l_shipdate < '1993-01-01' in ldbs12, l_shipdate >= '1993-01-01' and l_shipdate < '1993-02-01' in ldbs13, l_shipdate >= '1993-02-01' and l_shipdate < '1993-03-01' in ldbs14, l_shipdate >= '1993-03-01' and l_shipdate < '1993-04-01' in ldbs15, l_shipdate >= '1993-04-01' and l_shipdate < '1993-05-01' in ldbs16, l_shipdate >= '1993-05-01' and l_shipdate < '1993-06-01' in ldbs17, l_shipdate >= '1993-06-01' and l_shipdate < '1993-07-01' in ldbs18, l_shipdate >= '1993-07-01' and l_shipdate < '1993-08-01' in ldbs19, l_shipdate >= '1993-08-01' and l_shipdate < '1993-09-01' in ldbs20, l_shipdate >= '1993-09-01' and l_shipdate < '1993-10-01' in ldbs21, l_shipdate >= '1993-10-01' and l_shipdate < '1993-11-01' in ldbs22, l_shipdate >= '1993-11-01' and l_shipdate < '1993-12-01' in ldbs23, l_shipdate >= '1993-12-01' and l_shipdate < '1994-01-01' in ldbs24, l_shipdate >= '1994-01-01' in ldbs25;注意,Informix 语法提供了上下不封顶的范围以捕获预期范围外的日期。