[DB2 学习记录]7. 创建DB

有点乱,因为有些没明白,等明白了,再整理。

启动Command Line Processor,CLP
db2cmd db2 
CREATE DATABASE MY1STDB
    * 数据库名称可以由以下字符组成:a-z、A-Z、0-9、@、# 和 $。
    * 名称中的第一个字符必需是字母表字符、@、# 或 $;不能是数字或字母序列 SYS、DBM 或 IBM。
    * 数据库名称或数据库别名是一个惟一的字符串,包含前面描述的一个到八个字母、数字或键盘字符。
    (是说一个INSTANCE下,要唯一吧,而且好象不能超出八位)

db2 => CREATE DATABASE MY1STDB1;
SQL1001N  "MY1STDB1;" is not a valid database name.  SQLSTATE=2E000    ---来以为是ORACLE。
db2 => CREATE DATABASE MY1STDB1
DB20000I  The CREATE DATABASE command completed successfully.          ---成功。
db2 => CREATE DATABASE MY1STDB11
SQL1001N  "MY1STDB11" is not a valid database name.  SQLSTATE=2E000   ---9位,失败。
db2 => CREATE DATABASE MY1STDB21
SQL1001N  "MY1STDB21" is not a valid database name.  SQLSTATE=2E000  ---9位,失败。
db2 => CREATE DATABASE MY1STDB2
DB20000I  The CREATE DATABASE command completed successfully.            ---成功。
db2 => CREATE DATABASE MY1STDB2
SQL1005N  The database alias "MY1STDB2" already exists in either the local     ---同名,失败。
database directory or system database directory.

DB2 创建,包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:
    * SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。
    * TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。
    * USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。
所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。

在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。
在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。
如果不要的话,可以
CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE NO
看看创建的DB目录:
E:/db2/NODE0000/MY1STDB1>dir /s
 Volume in drive E is Application
 Volume Serial Number is 08BD-EF8E

 Directory of E:/db2/NODE0000/MY1STDB1

03/20/2008  09:33 AM                 0                         SQLCRT.FLG
03/20/2008  09:33 AM    <DIR>                              T0000000                 --估计对应SYSCATSPACE tablespace
        03/20/2008  09:34 AM        67,108,864         C0000000.CAT   
        03/20/2008  09:33 AM                 0                   SQLCRT.FLG
03/20/2008  09:34 AM    <DIR>                              T0000001                 --估计对应TEMPSPACE1 tablespace
        03/20/2008  09:34 AM    <DIR>                      C0000000.TMP
                03/20/2008  09:34 AM               512         SQLTAG.NAM
        03/20/2008  09:34 AM                 0                   SQLCRT.FLG
03/20/2008  09:33 AM    <DIR>                               T0000002                --估计对应USERSPACE1 tablespace
        03/20/2008  09:33 AM        33,554,432          C0000000.LRG
        03/20/2008  09:33 AM                 0                   SQLCRT.FLG
还有一个目录,应该是放日志文件、配置信息等的:
E:/db2/NODE0000/SQL00008
 
如果没有指定路径,会在数据库管理程序设置(DFTDBPATH 参数)中指定的默认数据库路径上创建数据库:
Default database path                       (DFTDBPATH) = E:
 
这两个命令都没有成功,估计和路径有关
CREATE DATABASE MYDB ON D:/TEST
 
CREATE DATABASE MYDB
    AUTOMATIC STORAGE ON
    /db2/storagepath001,
    /db2/storagepath002,
    /db2/storagepath003
    AUTORESIZE YES            ---当表空间用光空间时,系统将自动地扩展容器的大小。
    INITIALSIZE 300 M           ---没有定义初始大小的默认为300 MB,每个容器是100 MB(有三个存储路径)。
    INCREASESIZE 75 M        ---当表空间用光时,总空间增加 75 MB;可以指定百分数,增长当前大小的百分数。
    MAXSIZE NONE                   ---表空间的最大大小没有限制,可以限制表空间最大值。
还发现真的要在CPL下,跑的话,要加/,续行,才能跑,繁人。

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

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

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

字符代码
db2都有一个相关联的字符代码页,可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。
代码页是在 CREATE DATABASE 命令中使用 CODESET 和 TERRITORY 选项设置的。

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

另外:
db2 => CREATE DATABASE DB2TEST4  AUTOMATIC STORAGE YES
SQL1047N  The application is already connected to another database. --遇到这个,要connect reset
db2 => connect reset
DB20000I  The SQL command completed successfully.
db2 => CREATE DATABASE DB2TEST4  AUTOMATIC STORAGE YES

db2 => CREATE DATABASE MYDB
SQL1032N  No start database manager command was issued.   --db service没起来。

--也可能DB没有起来.
SQL30081N  检测到通信错误。正在使用的通信协议:"TCP/IP"。正在使用的通信
API:"SOCKETS"。检测到错误的位置:"10.89.59.203"。检测到错误的通信功能:
"connect"。特定于协议的错误代码:"10061"、"*" 和 "*"。  SQLSTATE=08001
      

最后的例子
( 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
自己琢磨琢磨吧!

后加的,
  • EXTENTSIZE:区段(extent) 是表空间的容器中的一个空间单元。数据库对象(除了 LOB 和 long varchar 之外)都存储在 DB2 中的页面 中。这些页面组合成区段。区段大小是在表空间级定义的。一旦为表空间指定了区段大小,就不能改变了。数据库配置参数 DFT_EXTENT_SZ 指定数据库中所有表空间的默认区段大小。这个值的范围是 2 到 256 个页面;因此,绝对大小是从 8 KB 到 1024 KB(对于 4 KB 页面),或者从 16 KB 到 2048 KB(对于 8 KB 页面)。可以在 CREATE TABLESPACE 语句中使用 EXTENTSIZE 参数覆盖这个数字。

    如果打算在表的设计中使用多维聚簇(MDC),区段就是一个重要的设计决定。MDC 表将为创建的每个新的维集分配一个区段。如果区段太大,那么区段的很大一部分有可能是空的(对于包含很少记录的维集)。关于 MDC 及其对 EXTENTSIZE 的影响的更多信息,请参考 DB2 Administration Guide。

  • PREFETCHSIZE:连续的预获取是指数据库管理程序能够提前预测查询,在实际引用页面之前读取这些页面。这种异步的检索可以显著减少执行时间。可 以通过修改 CREATE TABLESPACE 语句中的 PREFETCHSIZE 参数来控制执行预获取的积极程度。在默认情况下,这个值设置为 DFT_PREFETCH_SZ 数据库配置参数。这个值代表在 DB2 触发预获取请求时每次读取多少个页面。通过将这个值设置为区段大小的倍数,可以并行地读取多个区段。当表空间的容器在不同的硬盘上时,这个功能甚至效率更 高。

这些参数的默认值对于许多应用程序是合适的,但是对于执行许多查询或分析大量数据的应用程序,可以考虑设置更高的 PREFETCHSIZE。

用Control Center的向导来创建DB,好处是最后可以得到对应的SQL。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章