您好,欢迎来到爱站旅游。
搜索
您的当前位置:首页oracle创建数据库方法范文

oracle创建数据库方法范文

来源:爱站旅游
oracle创建数据库⽅法范⽂

3.1.3 创建数据库(1)

创建数据库有很多⽅法,我们可以选择在安装后打开\"DB2第⼀步\"启动⾯板来创建数据库,这个我们已经在第1章讲过了。除此之外我们还可以通过CREATE DATABASE命令和创建数据库向导来创建数据库,下⾯我们分别讲解如何使⽤这两种⽅法创建数据库。

1. 使⽤命令创建数据库

从命令⾏创建DB2数据库是相当简单的。要创建数据库,必须调⽤DB2命令⾏处理程序(Command Line Processor,CLP)。调⽤⽅法是在DB2 程序组的Command Line Tools⽂件夹中选择Command Line Processor,或者从操作系统命令⾏执⾏命令db2 cmd db2。

创建DB2数据库的语法如下:1.CREATEDATABASE MYDB

您会问\"就这么简单?\",是的,就这么简单!CREATE DATABASE语句中唯⼀必需的选项就是数据库的名称。数据库的命名规则是:

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

名称中的第⼀个字符必须是字母表字符、@、#或$;不能是数字或字母序列 SYS、DBM或IBM。注意,数据库名称不能超过8个字母。

数据库名称或数据库别名是⼀个唯⼀的字符串,包含前⾯描述的1个到8个字母、数字或键盘字符。当然,有很多选项可供使⽤;不必只输⼊名称。我们来研究⼀下这个命令实际上会导致什么情况。1) DB2创建了什么

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

SYSCATSPACE:这是保存DB2系统编⽬的地⽅,系统编⽬跟踪与DB2对象相关联的所有元数据,即通常所说的\"数据字典\"。

TEMPSPACE1:DB2 ⽤来放置分组、排序、连接和重组中间结果的临时⼯作区域。USERSPACE1:默认情况下存放所有⽤户对象(表、索引)的地⽅。

所有这些⽂件都放在默认安装路径的DB2⽬录中。默认安装路径通常是安装DB2产品的路径。

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

对于从DB2V8进⾏迁移的⽤户,有⼀个特殊的注意事项:在DB2 V9之前,CREATE DATABASE命令会为上⾯列出的所有对象创建SMS表空间。在DB2 V9中,除了系统临时表空间外,所有表空间默认都将定义为⾃动存储(DMS)表空间。2) CREATE DATABASE命令

DB2 CREATE DATABASE命令的完整语法很复杂,下⾯说明了DBA感兴趣的⼤多数选项。1.>>-CREATE--+-DATABASE-+-database-name-+----------------------+-->2.'-DB-------''-|Databaseoptions|-'数据库选项

1.CREATEDATABASE选项:

2.|--+----------------------------+------------------------------->3.'-AUTOMATICSTORAGE--NO|YES--'

4.>--+---------------------------------------------+-------------->

5.'-ON----+-path--+-+--+----------------------+-'6.'-drive-''-DBPATHON--+-path--+-'7.'-drive-'

8.>--+-----------------------+------------------------------------>9.'-ALIAS--database-alias-'

10.>--+----------------------------------------------+------------->11.'-USINGCODESET--codeset--TERRITORY--territory-'12.>--+-----------------------------------+------------------------>13.|.-SYSTEM---------.|

14.'-COLLATEUSING--+-COMPATIBILITY--+-'15.+-IDENTITY-------+16.+-IDENTITY_16BIT-+

17.>--+---------------------------------------+-------------------->18.'-CATALOGTABLESPACE--|tblspace-defn|-'19.>--+------------------------------------+----------------------->20.'-USERTABLESPACE--|tblspace-defn|-'21.>--+-----------------------------------------+------------------>22.'-TEMPORARYTABLESPACE--|tblspace-defn|-'表空间选项1.tblspace-defn:

2.|--MANAGEDBY--------------------------------------------------->

3.>--+-SYSTEMUSING--(----'container-string'-+--)--------------------------------+-->4.+-DATABASE USING--(----+-FILE---+--'container-string'--number-of-pages-+--)-+5.|'-DEVICE-'|

6.'-AUTOMATICSTORAGE---------------------------------------------------------'7.>--+-----------------------------+------------------------------>8.'-EXTENTSIZE--number-of-pages-'

9.>--+-------------------------------+---------------------------->10.'-PREFETCHSIZE--number-of-pages-'

11.>--+---------------------+--+---------------------------------+->

12.'-AUTORESIZE--+-NO--+-''-INITIALSIZE--integer--+-K|M|G-+-'13.'-YES-'

14.>--+------------------------------------+----------------------->15.'-INCREASESIZE--integer--+-PERCENT-+-'16.'-+-K|M|G-'

17.>--+-------------------------------+----------------------------|18.'-MAXSIZE--+-NONE-------------+-'19.'-integer--+-K|M|G-'3.1.3 创建数据库(2)

下⾯我们将学习这些选项以及如何使⽤它们。数据库位置

CREATE DATABASE命令的参数之⼀是ON path/drive选项。这个选项告诉DB2希望在哪⾥创建数据库。如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH参数)中指定的默认数据库路径上创建数据库。1.C:\\IBM\\SQLLIB\\BIN>db2getdbmcfg|find/i\"DFTDBPATH\"2.默认数据库路径(DFTDBPATH)=C:

例如,以下的CREATE DATABASE命令将数据库放在Windows操作系统的D驱动器上的DATA⽬录中:1.CREATEDATABASE MYDB ON D:\\DATA

选择Automatic storage(默认设置)允许DBA为数据库设置在创建所有表空间容器时可以使⽤的存储路径。DBA不必显式地定义表空间的位置和⼤⼩,系统将⾃动地分配表空间。例如,下⾯的数据库创建语句将为数据库中的所有表空间设置⾃动存储。1.CREATEDATABASE MYDBAUTOMATICSTORAGE ON2./db2/mydbpath001,/db2/mydbpath002,/db2/mydbpath003

3.AUTORESIZEYESINITIALSIZE300MINCREASESIZE75MMAXSIZENONE

在AUTOMATED STORAGE ON选项后⾯,给出了3个⽂件⽬录(路径)。这3个路径是表空间的容器的位置。其他的选项是:AUTORESIZE YES:当表空间⽤光空间时,系统将⾃动地扩展容器的⼤⼩。

INITIALSIZE 300M:没有定义初始⼤⼩的任何表空间的⼤⼩默认为300MB。每个容器是100 MB(因为有3个存储路径)。INCREASESIZE 75M(或百分数):当表空间⽤光空间时,表空间的总空间增加75MB。还可以指定⼀个百分数,在这种情况下,表空间会增长它的当前⼤⼩的百分数。假如为20%,表⽰会⽐原来的空间增加20%。

MAXSIZE NONE:表空间的最⼤⼤⼩没有。如果DBA希望⼀个表空间可以占⽤的存储空间,那么可以指定⼀个最⼤值。

当使⽤AUTOMATIC STORAGE定义表空间时,不需要提供其他参数:1.CREATE TABLESPACETESTMANAGED BY AUTOMATICSTORAGE;

在这个命令中,可以提供与表空间相关联的任何参数;虽然使⽤⾃动存储可以⼤⼤简化⽇常的表空间维护,但是与重要的⼤型⽣产表相关联的表空间可能需要DBA更多地⼲预。

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

如果数据库启⽤了⾃动存储,那么在定义表空间时还有另⼀个选择。可以指定 MANAGED BY AUTOMATIC STORAGE⼦句,或者完全去掉MANAGED BY⼦句(这意味着⾃动存储)。在这种情况下,不提供容器定义,因为DB2会⾃动地分配容器。代码页和整理次序

所有DB2字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有⼀个相关联的字符代码页。可以认为代码页是⼀个对照表,⽤来将字母数字数据转换为数据库中存储的⼆进制数据。⼀个DB2数据库只能使⽤⼀个代码页。代码页是在CREATEDATABASE命令中使⽤CODESET和TERRITORY选项设置的。代码页可以使⽤单⼀字节表⽰⼀个字母数字字符(单⼀字节可以表⽰256个独特元素),也可以使⽤多个字节。英语等语⾔包含的独特字符相当少,因此单字节代码页(SBCS)对于存储数据⾜够了。东亚国家语⾔(中⽂、⽇⽂、韩⽂等)需要超过 256个元素才能表⽰所有的独特字符,因此需要多字节代码页(通常是双字节代码页DBCS)。

在默认情况下,数据库的整理次序根据CREATE DATABASE命令中使⽤的代码集进⾏定义。如果指定选项COLLATE USINGSYSTEM,就根据为数据库指定的TERRITORY 对数据值进⾏⽐较。如果使⽤选项COLLATE USING IDENTITY,那么以逐

字节的⽅式使⽤⼆进制表⽰来⽐较所有值。

例如中⽂代码页为1386,codeset为GBK,TERRITORY为CN。创建数据库时要注意选择合适的代码页,这些参数在数据库创建好后都不能再进⾏修改,务必要慎重选择。如果客户端访问数据库服务器代码页不⼀样,将⽆法访问。对于需要使⽤XML数据的应⽤程序,有⼀个特殊的注意事项。当前,DB2只在定义为Unicode数据库才能同

时存储 XML⽂档和SQL数据的更多传统格式,⽐如整数、⽇期/时间、变长字符串等等。随后,您将在这个数据库中创建对象来管理XML和其他类型的数据。如果数据库在创建时没有启⽤Unicode⽀持,就不能在其中创建XML 列。假如要创建⼀个同时⽀持XML和SQL的数据库,请执⾏如下命令:1.createdatabase xmldbusingcodesetUTF-8territoryus

⼀旦创建了Unicode数据库,您就不需要发出任何专门的命令或采取任何进⼀步措施来使DB2能够以它⾃⾝分层的格式存储XML数据和关系数据。表空间定义

3个表空间(SYSCATSPACE、TEMPSPACE1、USERSPACE1)都是在默认⽬录中⾃动创建的(ON关键字),除⾮指定它们的位置。对于每个表空间,DBA可以指定表空间应该使⽤的⽂件系统的特征。3个表空间使⽤以下语法进⾏定义:

1.>--+---------------------------------------+-------------------->2.'-CATALOGTABLESPACE--|tblspace-defn|-'3.>--+------------------------------------+----------------------->4.'-USERTABLESPACE--|tblspace-defn|-'5.>--+-----------------------------------------+------------------>6.'-TEMPORARYTABLESPACE--|tblspace-defn|-'3.1.3 创建数据库(3)

如果省略任何关键字,DB2将使⽤默认值来⽣成表空间。表空间定义采⽤这些选项,其语法如下:1.|--MANAGEDBY--------------------------------------------------->

2.|>--+-SYSTEMUSING--(----'container-string'-+--)--------------------------------+-->3.'-DATABASEUSING--(----+-FILE---+--'container-string'--number-of-pages-+--)-''-DEVICE-'

4.>--+-----------------------------+------------------------------>5.'-EXTENTSIZE--number-of-pages-'

6.>--+-------------------------------+---------------------------->7.'-PREFETCHSIZE--number-of-pages-'

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

我们来详细看看这个语法。MANAGED BY选项让DB2⽣成这些表空间并决定如何管理空间。SMS表空间使⽤SYSTEMUSING关键字,如下所⽰:1.SYSTEMUSING('containerstring')

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

1.DATABASE USING(FILE/DEVICE'containerstring'number of pages|K|M|G)

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

对于FILE容器,容器字符串必须是绝对或相对的⽂件名。如果⽂件名不是绝对的,它就相对于数据库⽬录。

如果⽬录名的任何部分不存在,数据库管理程序就会创建这个⽬录。如果⽂件不存在,数据库管理程序就会创建这个⽂件并初始化为指定的⼤⼩。对于DEVICE容器,容器字符串必须是设备名⽽且这个设备必须已经存在,对于DEVICE容器通常需要使⽤操作系统root权限创建逻辑卷并且赋予DB2实例使⽤的权限,⼀般通过UNIX/Linux 的chown命令实现这⼀点。重要提⽰:所有容器必须在所有数据库上是唯⼀的;⼀个容器只能属于⼀个表空间。1.EXTENTSIZEnumber of pages

EXTENTSIZE指定数据库可以写到⼀个容器中的PAGESIZE页⾯数量,达到这个数量之后将跳到下⼀个容器。EXTENTSIZE值还可以指定为⼀个整数,后⾯跟着K、M或G。数据库管理程序在存储数据时重复地循环使⽤各个容器。EXTENTSIZE⼤⼩是在表空间级定义的。⼀旦为表空间指定了扩展数据块⼤⼩,就不能改变了。数据库配置参数 DFT_EXTENT_SZ指定数据库中所有表空间的默认扩展数据块⼤⼩。这个值的范围是2到256个页⾯;因此,绝对⼤⼩是从8KB到1024KB(对于4KB页⾯),或者从16 KB到2048KB(对于8KB页⾯)。可以在CREATE TABLESPACE 语句中使⽤EXTENTSIZE参数覆盖这个数字。1.PREFETCHSIZEnumber of pages

PREFETCHSIZE指定在执⾏数据预获取时将从表空间中读取的PAGESIZE页⾯数量。连续的预读取是指数据库管理程序能够提前预测查询,在实际引⽤页⾯之前读取这些页⾯。这样查询就不需要等待底层操作系统执⾏I/O 操作。这种异步的检索可以显著减少执⾏时间。可以通过修改CREATE TABLESPACE语句中的PREFETCHSIZE参数来控制执⾏预获取的积极程度。在默认情况下,这个值设置为DFT_PREFETCH_SZ数据库配置参数。这个值代表在DB2触发预读取请求时每次读取多少个页⾯。通过将这个值设置为扩展数据块⼤⼩的倍数,可以并⾏地读取多个扩展数据块。当表空间的容器在不同的硬盘上时,这个功能甚⾄效率更⾼。预读取⼤⼩还可以指定为⼀个整数,后⾯跟着K、M或G。关于PREFETCHSIZE的设置,我们在后⾯表空间性能⼩节还会详细讲解。CREATE DATABASE命令⽰例

下⾯是⼀个CREATE DATABASE命令的⽰例,它使⽤了前⾯讨论的许多选项。1.CREATEDATABASE MYDB2.DFT_EXTENT_SZ4

3.CATALOGTABLESPACEMANAGED BYDATABASE USING

4.(FILE'C:\\DB2DATA\\CATALOG.DAT'2000,FILE'D:\\DB2DATA\\CATALOG.DAT'2000)5.EXTENTSIZE86.PREFETCHSIZE16

7.TEMPORARY TABLESPACEMANAGED BY SYSTEMUSING8.('C:\\TEMPTS','D:\\TEMPTS')

http://www.doczj.com/doc/04b7efb94ae45c3b3567ec102de2bd9705de70.html ER TABLESPACEMANAGEDBYDATABASE USING

10.(FILE'C:\\TS\\USERTS.DAT'1200)11.EXTENTSIZE2412.PREFETCHSIZE48我们来详细地看看每⼀⾏:

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

DFT_EXTENT_SZ 4:这个参数告诉DB2默认的扩展数据块⼤⼩是4个页⾯,除⾮在创建表空间时显式地声明,否则默认使⽤这个值。

CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2编⽬空间将由数据库管理。FILE 'C:\\....':表空间的位置将跨两个⽂件,每个⽂件有2000个页⾯的空间。EXTENTSIZE 8:EXTENTSIZE是8个页⾯。这个设置会覆盖DFT_EXTENT_SZ。PREFETCHSIZE 16:在查询处理期间,同时预读取16个页⾯。

TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2使⽤的临时空间将由操作系统处理。'C:\\TEMPTS' ...:临时空间将跨两个⽂件,⽂件的⼤⼩在DB2执⾏期间⾃动地调整。

USER TABLESPACE MANAGED BY DATABASE USING:⽤户表空间(放置真正的表的地⽅)将由DB2直接管理。FILE 'C:\\TS\\...':这个空间只有⼀个容器,它由1200个页⾯组成。EXTENTSIZE 24:USER表空间的EXTENTSIZE是24个页⾯。PREFETCHSIZE 48:查询处理期间,同时预读取48个页⾯。

上⾯我们介绍了关于如何创建DB2数据库的背景知识。在⼤多数情况下,CREATE DATABASE命令的默认值提供了⼀个可以满⾜开发和测试需要的数据库。⼀旦决定将数据库转⼊⽣产环境,就需要对DB2使⽤的数据布局和表空间定义付出更⼤的努⼒。尽管这需要做更多的规划⼯作,但是产⽣的数据库更容易管理,性能也可能更好。关于这部分内容我们会在3.2节中详细讲解。

3.1.3 创建数据库(4)

2. 使⽤创建数据库向导创建数据库

如果感觉到通过上⾯命令创建数据库⽐较⿇烦,您可以通过创建数据库向导来创建数据库,创建数据库向导将带领我们执⾏许多步骤来⽣成数据库。向导⾸先询问数据库的名称、创建它的默认驱动器(如果没有指定其他驱动器,就会使⽤这个驱动器)和别名,如图3-7所⽰。另外,可以添加关于数据库内容的注释。

关于图3-7有⼏点需要特别注意。如果希望在数据库中使⽤XML列,那么它必须定义为UTF-8(Enable database for XML)。另外,在DB2 V9中⾃动存储是数据库的默认设置。如果希望覆盖这个默认设置,就必须选择\"我想⼿⼯管理存储器\"选项。创建数据库向导:⽤户/编⽬/临时表

向导的后3个对话框要求填写关于如何创建⽤户、编⽬和临时表空间的信息。如果选择\"低维护\"选项,向导就会创建SMS表空间。如果选择\"⾼性能\",就需要指定⽤于这个表空间的设备和⽂件系统,如图3-8所⽰。

⽆论选择哪个选项,都可以指定希望分配给这个表空间的容器(⽂件、设备)。如果单击\"添加\"按钮,将会显⽰另⼀个对话框,如图3-9所⽰,可以在这⾥定义要使⽤的容器。

如果没有为表空间指定容器或⽂件,DB2将在前⾯指定的默认驱动器上⾃动地⽣成⼀个。创建数据库向导:性能选项可以设置两个性能参数:EXTENTSIZE和PREFETCHSIZE,如图3-10所⽰。

我们来看这两个参数的作⽤:

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

如果打算在表的设计中使⽤聚簇(MDC),扩展数据块就是⼀个重要的设计决定。MDC表将为创建的每个新的维集分配⼀个扩展数据块。如果扩展数据块太⼤,那么扩展数据块的很⼤⼀部分有可能是空的(对于包含很少记录的维集)。关于MDC及其对EXTENTSIZE的影响的更多信息,请参考《深⼊解析DB2》⼀书。

PREFETCHSIZE:连续的预读取是指数据库管理程序能够提前预测查询,在实际引⽤页⾯之前读取这些页⾯。这种异步的检索可以显著减少执⾏时间。可以通过修改 CREATE TABLESPACE语句中的PREFETCHSIZE参数来控制执⾏预读取的积极程度。在默认情况下,这个值设置为DFT_PREFETCH_SZ数据库配置参数。这个值代表在DB2触发预获取请求时每次读取多

少个页⾯。通过将这个值设置为扩展数据块⼤⼩的倍数,可以并⾏地读取多个扩展数据块。当表空间的容器在不同的硬盘上时,这个功能甚⾄效率更⾼。

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

创建数据库向导:代码页和整理次序

在数据库创建过程中,遇到的下⼀个选项涉及代码页和整理次序,如图3-11所⽰。

当⼀个DB2应⽤程序绑定到DB2数据库时,会对应⽤程序和数据库的代码页进⾏⽐较。如果它们的代码页不相同,就会尝试对每个SQL语句执⾏代码页转换。如果使⽤与访问的数据库不同的代码页,那么⼀定要确保代码页是兼容的并可以执⾏转换。3.1.3 创建数据库(5)

在默认情况下,数据库的整理次序根据CREATE DATABASE命令中使⽤的编码集进⾏定义。如果指定选项COLLATE USINGSYSTEM,就根据为数据库指定的TERRITORY 对数据值进⾏⽐较。如果使⽤选项COLLATE USING IDENTITY,那么以逐字节的⽅式使⽤⼆进制表⽰来⽐较所有值。在需要以本机(⼆进制)格式存储数据时,要避免使⽤有代码页的数据类型。⼀般情况下,使⽤相同的应⽤程序代码页和数据库代码页是有好处的,可以避免进⾏代码页转换。

创建数据库向导:创建总结

在设置好所有参数之后,创建数据库向导会显⽰⼀个总结页⾯,其中总结了您做出的所有选择,如图3-12所⽰。

可以保存这个命令以便在以后执⾏,或者将它复制并粘贴到正在开发的脚本中。如果对输⼊到系统中的参数满意了,就单击\"完成\"按钮来创建数据库。

3.1.3 创建数据库(5)

所⽰。

可以保存这个命令以便在以后执⾏,或者将它复制并粘贴到正在开发的脚本中。如果对输⼊到系统中的参数满意了,就单击\"完成\"按钮来创建数据库。3.2.1 创建表空间(2)

如果数据库管理器创建了⼀个⼦⽬录,那么在删除该表空间时数据库管理器也可能将该⼦⽬录删除。

下列SQL语句在AIX系统上创建了⼀个使⽤具有10 000页的3个裸设备作为表空间容器的DMS表空间,并指定它们的I/O特征。1.CREATE TABLESPACETS1MANAGED BYDATABASE

http://www.doczj.com/doc/04b7efb94ae45c3b3567ec102de2bd9705de70.htmlING(DEVICE'/dev/rdblv6'10000,DEVICE'/dev/rdblv7'10000,DEVICE'/dev/rdblv8'10000)OVERHEAD7.5TRANSFERRATE0.06

在此SQL语句中提到的裸设备必须已经存在,且实例所有者和SYSADM组必须能够写⼊这些设备。

您还可以创建⼀个表空间,它使⽤的页⼤⼩⽐默认的4KB更⼤。下列SQL语句在Linux和UNIX系统上创建⼀个具有8KB页⼤⼩的SMS表空间。

1.CREATETABLESPACESMS8KPAGESIZE8192MANAGEDBYSYSTEMhttp://www.doczj.com/doc/04b7efb94ae45c3b3567ec102de2bd9705de70.htmlING('FSMS_8K_1')BUFFERPOOLBUFFPOOL8K

注意相关联的缓冲池也必须具有相同的8KB页⼤⼩。⽽且只有在激活了创建的表空间所引⽤的缓冲池之后才能使⽤该表空间。2. 创建系统临时表空间

系统临时表空间⽤来存储分组、排序、连接、重组、创建索引操作等中间结果。数据库必须始终⾄少有⼀个这样的表空间。创建数据库时,定义的3个默认表空间之⼀便是名为\"TEMPSPACE1\"的系统临时表空间。要创建另⼀个系统临时表空间,可使⽤CREATE TABLESPACE语句。例如:1.CREATE SYSTEM TEMPORARY TABLESPACEtmp_tbsp2.MANAGED BY SYSTEMUSING('d:\mp_tbsp','e:\mp_tbsp')对于每个页⼤⼩⾄少应具有⼀个和该页⼤⼩匹配的系统临时表空间。3. 创建⽤户临时表空间

⽤户临时表空间不是在创建数据库时默认创建的。如果您的应⽤程序需要使⽤临时表,您需要创建将驻留临时表的⽤户临时表

空间。⽤户临时表空间通常⽤来批量插⼊、批量更新和批量删除以加快速度。

使⽤DECLARE GLOBAL TEMPORARY TABLE语句声明临时表时必须要求⽤户临时表空间存在。要创建⽤户临时表空间,可使⽤CREATE TABLESPACE语句:

1.CREATE USER TEMPORARY TABLESPACEusr_tbspMANAGED BYDATABASEhttp://www.doczj.com/doc/04b7efb94ae45c3b3567ec102de2bd9705de70.htmlING(FILE'd:\\db2databsp'5000,FILE'e:\\db2databsp'5000)4.查看数据的⽅法:

db2 list tablespaces show detaildb2pd -tablespaces3.1.3 创建数据库(3)

如果省略任何关键字,DB2将使⽤默认值来⽣成表空间。表空间定义采⽤这些选项,其语法如下:1.|--MANAGEDBY--------------------------------------------------->

2.|>--+-SYSTEMUSING--(----'container-string'-+--)--------------------------------+-->3.'-DATABASEUSING--(----+-FILE---+--'container-string'--number-of-pages-+--)-''-DEVICE-'

4.>--+-----------------------------+------------------------------>5.'-EXTENTSIZE--number-of-pages-'

6.>--+-------------------------------+---------------------------->7.'-PREFETCHSIZE--number-of-pages-'

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

我们来详细看看这个语法。MANAGED BY选项让DB2⽣成这些表空间并决定如何管理空间。SMS表空间使⽤SYSTEMUSING关键字,如下所⽰:1.SYSTEMUSING('containerstring')

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

1.DATABASE USING(FILE/DEVICE'containerstring'number of pages|K|M|G)

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

对于FILE容器,容器字符串必须是绝对或相对的⽂件名。如果⽂件名不是绝对的,它就相对于数据库⽬录。如果⽬录名的任何部分不存在,数据库管理程序就会创建这个⽬录。如果⽂件不存在,数据库管理程序就会创建这个⽂件并初始化为指定的⼤⼩。对于DEVICE容器,容器字符串必须是设备名⽽且这个设备必须已经存在,对于DEVICE容器通常需要使⽤操作系统root权限创建逻辑卷并且赋予DB2实例使⽤的权限,⼀般通过UNIX/Linux 的chown命令实现这⼀点。重要提⽰:所有容器必须在所有数据库上是唯⼀的;⼀个容器只能属于⼀个表空间。1.EXTENTSIZEnumber of pages

EXTENTSIZE指定数据库可以写到⼀个容器中的PAGESIZE页⾯数量,达到这个数量之后将跳到下⼀个容器。EXTENTSIZE值还可以指定为⼀个整数,后⾯跟着K、M或G。数据库管理程序在存储数据时重复地循环使⽤各个容器。EXTENTSIZE⼤⼩是在表空间级定义的。⼀旦为表空间指定了扩展数据块⼤⼩,就不能改变了。数据库配置参数 DFT_EXTENT_SZ指定数据库

中所有表空间的默认扩展数据块⼤⼩。这个值的范围是2到256个页⾯;因此,绝对⼤⼩是从8KB到1024KB(对于4KB页⾯),或者从16 KB到2048KB(对于8KB页⾯)。可以在CREATE TABLESPACE 语句中使⽤EXTENTSIZE参数覆盖这个数字。1.PREFETCHSIZEnumber of pages

PREFETCHSIZE指定在执⾏数据预获取时将从表空间中读取的PAGESIZE页⾯数量。连续的预读取是指数据库管理程序能够提前预测查询,在实际引⽤页⾯之前读取这些页⾯。这样查询就不需要等待底层操作系统执⾏I/O 操作。这种异步的检索可以显著减少执⾏时间。可以通过修改CREATE TABLESPACE语句中的PREFETCHSIZE参数来控制执⾏预获取的积极程度。在默认情况下,这个值设置为DFT_PREFETCH_SZ数据库配置参数。这个值代表在DB2触发预读取请求时每次读取多少个页⾯。通过将这个值设置为扩展数据块⼤⼩的倍数,可以并⾏地读取多个扩展数据块。当表空间的容器在不同的硬盘上时,这个功能甚⾄效率更⾼。预读取⼤⼩还可以指定为⼀个整数,后⾯跟着K、M或G。关于PREFETCHSIZE的设置,我们在后⾯表空间性能⼩节还会详细讲解。CREATE DATABASE命令⽰例

下⾯是⼀个CREATE DATABASE命令的⽰例,它使⽤了前⾯讨论的许多选项。1.CREATEDATABASE MYDB2.DFT_EXTENT_SZ4

3.CATALOGTABLESPACEMANAGED BYDATABASE USING

4.(FILE'C:\\DB2DATA\\CATALOG.DAT'2000,FILE'D:\\DB2DATA\\CATALOG.DAT'2000)5.EXTENTSIZE86.PREFETCHSIZE16

7.TEMPORARY TABLESPACEMANAGED BY SYSTEMUSING8.('C:\\TEMPTS','D:\\TEMPTS')

http://www.doczj.com/doc/04b7efb94ae45c3b3567ec102de2bd9705de70.html ER TABLESPACEMANAGEDBYDATABASE USING

10.(FILE'C:\\TS\\USERTS.DAT'1200)11.EXTENTSIZE2412.PREFETCHSIZE48我们来详细地看看每⼀⾏:

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

DFT_EXTENT_SZ 4:这个参数告诉DB2默认的扩展数据块⼤⼩是4个页⾯,除⾮在创建表空间时显式地声明,否则默认使⽤这个值。

CATALOG TABLEPSACE MANAGED BY DATABASE USING:DB2编⽬空间将由数据库管理。FILE 'C:\\....':表空间的位置将跨两个⽂件,每个⽂件有2000个页⾯的空间。EXTENTSIZE 8:EXTENTSIZE是8个页⾯。这个设置会覆盖DFT_EXTENT_SZ。PREFETCHSIZE 16:在查询处理期间,同时预读取16个页⾯。

TEMPORARY TABLESPACE MANAGED BY SYSTEM USING:DB2使⽤的临时空间将由操作系统处理。'C:\\TEMPTS' ...:临时空间将跨两个⽂件,⽂件的⼤⼩在DB2执⾏期间⾃动地调整。

USER TABLESPACE MANAGED BY DATABASE USING:⽤户表空间(放置真正的表的地⽅)将由DB2直接管理。FILE 'C:\\TS\\...':这个空间只有⼀个容器,它由1200个页⾯组成。EXTENTSIZE 24:USER表空间的EXTENTSIZE是24个页⾯。PREFETCHSIZE 48:查询处理期间,同时预读取48个页⾯。

上⾯我们介绍了关于如何创建DB2数据库的背景知识。在⼤多数情况下,CREATE DATABASE命令的默认值提供了⼀个可以满⾜开发和测试需要的数据库。⼀旦决定将数据库转⼊⽣产环境,就需要对DB2使⽤的数据布局和表空间定义付出更⼤的努⼒。尽管这需要做更多的规划⼯作,但是产⽣的数据库更容易管理,性能也可能更好。关于这部分内容我们会在3.2节中详细讲解。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- azee.cn 版权所有 赣ICP备2024042794号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务