Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103570767
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570768
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570769
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570770
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570771
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570772
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570773
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570774
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570775
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570776
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570777
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570778
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570769
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570780
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570781
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570782
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570783
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570784
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570785
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570786
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570787
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570788
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570789
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570790
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570791
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570792
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570793
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570784
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570795
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570796
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570797
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570798
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570799
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570800
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570801
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570802
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570803
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570804
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570805
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570806
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570807
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570808
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570799
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570810
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570811
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570812
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570813
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570814
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570815
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570816
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570817
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks

DB2 9 基础(730 考试)认证指南,第 3 部分: 访问 DB2 数据(3)-sdccf-ChinaUnix博客
  • 博客访问: 103570818
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-31 18:53:31

developerWorks



创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109253) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109252) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109251) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109250) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109249) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109248) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109247) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109246) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109245) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109244) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109243) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109242) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109241) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109240) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109239) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109238) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109237) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109236) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109235) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109234) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109233) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109232) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109231) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109230) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109229) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109228) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109227) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109226) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109225) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109224) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109223) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109222) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109221) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109220) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109219) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109218) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109217) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109216) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109215) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109214) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109213) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109212) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109211) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109210) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109209) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109208) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109207) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109206) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109205) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109204) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109203) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~


创建第一个数据库

在 DB2 的安装过程中,会显示 First Steps 面板,它允许用户生成要操作的示例数据库:

DB2 First Steps 面板

选择 Database Creation 选项将显示一个附加菜单,可以创建 SAMPLE 数据库。

Create database 面板

大多数用户希望创建 SAMPLE 数据库并使用这个数据库研究 DB2 的特性。调用这个面板的方法是在 DB2 程序组中的 Setup Tools 文件夹中选择 First Steps(在 Windows 环境中)。另外,在命令行提示下发出命令 db2sampl 也会生成 SAMPLE 数据库。

选择了 SAMPLE 按钮之后,显示另一个面板,在这里决定将在哪里创建 SAMPLE 数据库。

Create SAMPLE database 面板

在创建 SAMPLE 数据库时,建议选择 XML and SQL objects and data 选项。这个选项将以 UTF-8(Unicode)格式生成数据库,这样就允许操作 XML 对象。如果没有选择 XML 选项,就不能在 SAMPLE 数据库中添加 XML 对象。

关于 First Steps 工具的更多信息,请参考本系列中的第一个教程。

下面在不使用 GUI 的情况下创建 DB2 数据库。







从命令行创建 DB2 数据库是相当简单的。要创建数据库,必须调用 DB2 命令行处理程序(Command Line Processor,CLP)。调用方法是在 DB2 程序组的 Command Line Tools 文件夹中选择 Command Line Processor(见下图),或者从操作系统命令行执行命令 db2cmd db2。(关于命令行处理程序的更多信息,请参考本系列中的第一个教程。)

CLP

创建 DB2 数据库的语法如下:

CREATE DATABASE MY1STDB

您会问,“就这么简单?” 是的,就这么简单!CREATE DATABASE 语句中惟一必需的成分就是数据库的名称。数据库的命名规则是:

  • 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。

  • 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。

  • 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。

当然,有很多选项可供使用;不必只输入名称。我们来研究一下这个命令实际上会导致什么情况。







在发出 CREATE DATABASE 命令时,DB2 会创建许多文件。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:

  • SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
  • TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
  • USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。

所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。

对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。







DB2 CREATE DATABASE 命令的完整语法可以在 DB2 Command Reference 中找到,但是下图说明了 DBA 感兴趣的大多数选项。

CREATE DATABASE 命令

>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->
           '-DB-------'               '-| Database options |-'

数据库选项

 
CREATE DATABASE 选项:
 
|--+----------------------------+------------------------------->
   '-AUTOMATIC STORAGE--NO|YES--'
>--+---------------------------------------------+-------------->
   |     .-,---------.                           |
   |     V           |                           |
   '-ON----+-path--+-+--+----------------------+-'
           '-drive-'    '-DBPATH ON--+-path--+-'
                                     '-drive-'
>--+-----------------------+------------------------------------>
   '-ALIAS--database-alias-'
>--+----------------------------------------------+------------->
   '-USING CODESET--codeset--TERRITORY--territory-'
>--+-----------------------------------+------------------------>
   |                .-SYSTEM---------. |
   '-COLLATE USING--+-COMPATIBILITY--+-'
                    +-IDENTITY-------+
                    +-IDENTITY_16BIT-+
                    +-UCA400_NO------+
                    +-UCA400_LSK-----+
                    +-UCA400_LTH-----+
                    '-NLSCHAR--------'
 
>--+---------------------------------------+-------------------->
   '-CATALOG TABLESPACE--| tblspace-defn |-'
>--+------------------------------------+----------------------->
   '-USER TABLESPACE--| tblspace-defn |-'
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

表空间定义

 
tblspace-defn:
 
|--MANAGED BY--------------------------------------------------->
 
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   +-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+
   |                      '-DEVICE-'                                           |
   '-AUTOMATIC STORAGE---------------------------------------------------------'
 
>--+-----------------------------+------------------------------>
   '-EXTENTSIZE--number-of-pages-'
>--+-------------------------------+---------------------------->
   '-PREFETCHSIZE--number-of-pages-'
>--+---------------------+--+---------------------------------+->
   '-AUTORESIZE--+-NO--+-'  '-INITIALSIZE--integer--+-K|M|G-+-'
                 '-YES-'                            
>--+------------------------------------+----------------------->
   '-INCREASESIZE--integer--+-PERCENT-+-'
                            '-+-K|M|G-'
>--+-------------------------------+----------------------------|
   '-MAXSIZE--+-NONE-------------+-'
              '-integer--+-K|M|G-'

在下面几节中,将学习这些选项以及如何使用它们。







CREATE DATABASE 命令的参数之一是 ON path/drive 选项。这个选项告诉 DB2 您希望在哪里创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库。

DBM 配置

例如,以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统的 D: 驱动器上的 TEST 目录中:

CREATE DATABASE MYDB ON D:\TEST

选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。

CREATE DATABASE TEST 
	AUTOMATIC STORAGE ON 
	/db2/storagepath001,
	/db2/storagepath002,
	/db2/storagepath003
	AUTORESIZE YES 
	INITIALSIZE 300 M
	INCREASESIZE 75 M
	MAXSIZE NONE

在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:

  • AUTORESIZE YES

    当表空间用光空间时,系统将自动地扩展容器的大小。

  • INITIALSIZE 300 M

    没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。

  • INCREASESIZE 75 M (或百分数)

    当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。

  • MAXSIZE NONE

    表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。

当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数:

CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。

在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。

如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。







所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESETTERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。

英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。

在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。

DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。

对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。







三个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认目录中自动创建的(ON 关键字),除非指定它们的位置。对于每个表空间,DBA 可以指定表空间应该使用的文件系统的特征。

三个表空间使用以下语法进行定义:

>--+---------------------------------------+--------------------> 
   '-CATALOG TABLESPACE--| tblspace-defn |-'
  
>--+------------------------------------+-----------------------> 
   '-USER TABLESPACE--| tblspace-defn |-'
  
>--+-----------------------------------------+------------------>
   '-TEMPORARY TABLESPACE--| tblspace-defn |-'

如果省略任何关键字,DB2 将使用默认值来生成表空间。表空间定义采用这些选项,其语法如下:

|--MANAGED BY--------------------------------------------------->
  
                      .-,------------------.
                      V                    |
>--+-SYSTEM USING--(----'container-string'-+--)--------------------------------+-->
   |                    .-,-----------------------------------------------.    |
   |                    V                                                 |    |
   '-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-'
                          '-DEVICE-'
  
>--+-----------------------------+------------------------------> 
   '-EXTENTSIZE--number-of-pages-'
  
>--+-------------------------------+----------------------------> 
   '-PREFETCHSIZE--number-of-pages-'

注意,上面的语法不包括与自动存储数据库相关联的选项。

我们来详细看看这个语法。MANAGED BY 选项让 DB2 生成这些表空间并决定如何管理空间。SMS 表空间使用 SYSTEM USING 关键字,如下所示:

SYSTEM USING ('container string')

对于 SMS 表空间,容器字符串(container string) 标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。每个容器字符串可以是绝对的或相对的目录名。如果目录名不是绝对的,它就相对于数据库目录。如果目录的任何部分不存在,数据库管理程序就会创建这个目录。容器字符串的格式取决于操作系统。

使用 DATABASE USING 关键字定义 DMS 表空间:

DATABASE USING ( FILE/DEVICE 'container string' number of pages )

对于 DMS 表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。指定容器的类型(FILEDEVICE)和大小(按照 PAGESIZE 大小的页面)。大小还可以指定为一个整数,后面跟着 K(表示千字节)、M(表示兆字节)或 G(表示千兆字节)。可以混合指定 FILE 和 DEVICE 容器。

对于 FILE 容器,容器字符串必须是绝对或相对的文件名。如果文件名不是绝对的,它就相对于数据库目录。如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。对于 DEVICE 容器,容器字符串必须是设备名而且这个设备必须已经存在。

重要提示:所有容器必须是在所有数据库上惟一的;一个容器只能属于一个表空间。

EXTENTSIZE  number of pages
                

EXTENSIZE 指定数据库可以写到一个容器中的 PAGESIZE 页面数量,达到这个数量之后将跳到下一个容器。EXTENSIZE 值还可以指定为一个整数,后面跟着 KMG。数据库管理程序在存储数据时重复地循环使用各个容器。

PREFETCHSIZE  number of pages
                

PREFETCHSIZE 指定在执行数据预获取时将从表空间中读取的 PAGESIZE 页面数量。预获取大小还可以指定为一个整数,后面跟着 KMG

预获取会在查询引用数据之前读取查询所需的数据,这样查询就不需要等待底层操作系统执行 I/O 操作。







下面是一个 CREATE DATABASE 命令的示例,它使用了前面讨论的许多选项。

( 1) CREATE DATABASE MY1STDB
( 2)  DFT_EXTENT_SZ 4
( 3)  CATALOG TABLESPACE MANAGED BY DATABASE USING
( 4)   (FILE 'C:\CAT\CATALOG.DAT' 2000, FILE 'D:\CAT\CATALOG.DAT' 2000)
( 5)    EXTENTSIZE 8
( 6)   PREFETCHSIZE 16
( 7) TEMPORARY TABLESPACE MANAGED BY SYSTEM USING
( 8)  ('C:\TEMPTS','D:\TEMPTS')
( 9) USER TABLESPACE MANAGED BY DATABASE USING
(10)   (FILE 'C:\TS\USERTS.DAT' 121)
(11)   EXTENTSIZE 24
(12)   PREFETCHSIZE 48

我们来详细地看看每一行:

  1. CREATE DATABASE:这个语句定义要创建的数据库的名称。

  2. DFT_EXTENT_SZ 4:这个参数告诉 DB2 默认的区段大小是 4 个页面,除非在其他地方显式地声明。

  3. CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2 编目空间将由数据库管理。

  4. FILE 'C:\....':表空间的位置将跨两个文件,每个文件有 2,000 个页面的空间。

  5. EXTENTSIZE 8EXTENTSIZE 是 8 个页面。

  6. PREFETCHSIZE 16:在查询处理期间,同时读取 16 个页面。

  7. TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2 使用的临时空间将由操作系统处理。

  8. 'C:\TEMPTS' ...:临时空间将跨两个文件,文件的大小在 DB2 执行期间自动地调整。

  9. USER TABLESPACE MANAGED BY DATABASE USING:用户空间(放置真正的表的地方)将由 DB2 直接管理。

  10. FILE 'C:\TS\...':这个空间只有一个容器,它由 121 个页面组成。

  11. EXTENTSIZE 24USER 表空间的 EXTENTSIZE 是 24 个页面。

  12. PREFETCHSIZE 48:查询将同时预获取 48 个页面。







本节介绍了关于如何创建 DB2 数据库的背景知识。在大多数情况下,CREATE DATABASE 命令的默认值提供了一个可以满足开发和测试需要的数据库。

一旦决定将数据库转入生产环境,就需要对 DB2 使用的数据布局和表空间定义付出更大的努力。尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。

阅读(109202) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~