oracle 创建数据库方法范文.docx
《oracle 创建数据库方法范文.docx》由会员分享,可在线阅读,更多相关《oracle 创建数据库方法范文.docx(23页珍藏版)》请在冰豆网上搜索。
oracle创建数据库方法范文
3.1.3创建数据库
(1)
创建数据库有很多方法,我们可以选择在安装后打开"DB2第一步"启动面板来创建数据库,这个我们已经在第1章讲过了。
除此之外我们还可以通过CREATEDATABASE命令和创建数据库向导来创建数据库,下面我们分别讲解如何使用这两种方法创建数据库。
1.使用命令创建数据库
从命令行创建DB2数据库是相当简单的。
要创建数据库,必须调用DB2命令行处理程序(CommandLineProcessor,CLP)。
调用方法是在DB2程序组的CommandLineTools文件夹中选择CommandLineProcessor,或者从操作系统命令行执行命令db2cmddb2。
创建DB2数据库的语法如下:
1.CREATEDATABASEMYDB
您会问"就这么简单?
",是的,就这么简单!
CREATEDATABASE语句中唯一必需的选项就是数据库的名称。
数据库的命名规则是:
数据库名称可以由以下字符组成:
a-z、A-Z、0-9、@、#和$。
名称中的第一个字符必须是字母表字符、@、#或$;不能是数字或字母序列SYS、DBM或IBM。
注意,数据库名称不能超过8个字母。
数据库名称或数据库别名是一个唯一的字符串,包含前面描述的1个到8个字母、数字或键盘字符。
当然,有很多选项可供使用;不必只输入名称。
我们来研究一下这个命令实际上会导致什么情况。
1)DB2创建了什么
在发出CREATEDATABASE命令时,DB2会创建许多文件。
这些文件包括日志文件、配置信息、历史文件和3个默认的表空间。
这些表空间是:
SYSCATSPACE:
这是保存DB2系统编目的地方,系统编目跟踪与DB2对象相关联的所有元数据,即通常所说的"数据字典"。
TEMPSPACE1:
DB2用来放置分组、排序、连接和重组中间结果的临时工作区域。
USERSPACE1:
默认情况下存放所有用户对象(表、索引)的地方。
所有这些文件都放在默认安装路径的DB2目录中。
默认安装路径通常是安装DB2产品的路径。
对于简单的应用程序,这个默认配置应该可以满足需要。
但是,我们可能希望改变数据库文件的位置,或者改变DB2管理这些对象的方式。
接下来,我们将更详细地研究CREATEDATABASE命令。
对于从DB2V8进行迁移的用户,有一个特殊的注意事项:
在DB2V9之前,CREATEDATABASE命令会为上面列出的所有对象创建SMS表空间。
在DB2V9中,除了系统临时表空间外,所有表空间默认都将定义为自动存储(DMS)表空间。
2)CREATEDATABASE命令
DB2CREATEDATABASE命令的完整语法很复杂,下面说明了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.+-DATABASEUSING--(----+-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)
下面我们将学习这些选项以及如何使用它们。
数据库位置
CREATEDATABASE命令的参数之一是ONpath/drive选项。
这个选项告诉DB2希望在哪里创建数据库。
如果没有指定路径,就会在数据库管理程序设置(DFTDBPATH参数)中指定的默认数据库路径上创建数据库。
1.C:
\IBM\SQLLIB\BIN>db2getdbmcfg|find/i"DFTDBPATH"
2.默认数据库路径(DFTDBPATH)=C:
例如,以下的CREATEDATABASE命令将数据库放在Windows操作系统的D驱动器上的DATA目录中:
1.CREATEDATABASEMYDBOND:
\DATA
选择Automaticstorage(默认设置)允许DBA为数据库设置在创建所有表空间容器时可以使用的存储路径。
DBA不必显式地定义表空间的位置和大小,系统将自动地分配表空间。
例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。
1.CREATEDATABASEMYDBAUTOMATICSTORAGEON
2./db2/mydbpath001,/db2/mydbpath002,/db2/mydbpath003
3.AUTORESIZEYESINITIALSIZE300MINCREASESIZE75MMAXSIZENONE
在AUTOMATEDSTORAGEON选项后面,给出了3个文件目录(路径)。
这3个路径是表空间的容器的位置。
其他的选项是:
AUTORESIZEYES:
当表空间用光空间时,系统将自动地扩展容器的大小。
INITIALSIZE300M:
没有定义初始大小的任何表空间的大小默认为300MB。
每个容器是100MB(因为有3个存储路径)。
INCREASESIZE75M(或百分数):
当表空间用光空间时,表空间的总空间增加75MB。
还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。
假如为20%,表示会比原来的空间增加20%。
MAXSIZENONE:
表空间的最大大小没有限制。
如果DBA希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。
当使用AUTOMATICSTORAGE定义表空间时,不需要提供其他参数:
1.CREATETABLESPACETESTMANAGEDBYAUTOMATICSTORAGE;
在这个命令中,可以提供与表空间相关联的任何参数;虽然使用自动存储可以大大简化日常的表空间维护,但是与重要的大型生产表相关联的表空间可能需要DBA更多地干预。
在没有启用自动存储的数据库中创建表空间时,必须指定MANAGEDBYSYSTEM或MANAGEDBYDATABASE子句。
使用这些子句会分别创建SMS表空间和DMS表空间。
在这两种情况下,都必须提供容器的显式列表。
如果数据库启用了自动存储,那么在定义表空间时还有另一个选择。
可以指定MANAGEDBYAUTOMATICSTORAGE子句,或者完全去掉MANAGEDBY子句(这意味着自动存储)。
在这种情况下,不提供容器定义,因为DB2会自动地分配容器。
代码页和整理次序
所有DB2字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。
可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。
一个DB2数据库只能使用一个代码页。
代码页是在CREATEDATABASE命令中使用CODESET和TERRITORY选项设置的。
代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示256个独特元素),也可以使用多个字节。
英语等语言包含的独特字符相当少,因此单字节代码页(SBCS)对于存储数据足够了。
东亚国家语言(中文、日文、韩文等)需要超过256个元素才能表示所有的独特字符,因此需要多字节代码页(通常是双字节代码页DBCS)。
在默认情况下,数据库的整理次序根据CREATEDATABASE命令中使用的代码集进行定义。
如果指定选项COLLATEUSINGSYSTEM,就根据为数据库指定的TERRITORY对数据值进行比较。
如果使用选项COLLATEUSINGIDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。
例如中文代码页为1386,codeset为GBK,TERRITORY为CN。
创建数据库时要注意选择合适的代码页,这些参数在数据库创建好后都不能再进行修改,务必要慎重选择。
如果客户端访问数据库服务器代码页不一样,将无法访问。
对于需要使用XML数据的应用程序,有一个特殊的注意事项。
当前,DB2只在定义为Unicode数据库才能同时存储XML文档和SQL数据的更多传统格式,比如整数、日期/时间、变长字符串等等。
随后,您将在这个数据库中创建对象来管理XML和其他类型的数据。
如果数据库在创建时没有启用Unicode支持,就不能在其中创建XML列。
假如要创建一个同时支持XML和SQL的数据库,请执行如下命令:
1.createdatabasexmldbusingcodesetUTF-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-'
注意,上面的语法不包括与自动存储数据库相关联的选项。
我们来详细看看这个语法。
MANAGEDBY选项让DB2生成这些表空间并决定如何管理空间。
SMS表空间使用SYSTEMUSING关键字,如下所示:
1.SYSTEMUSING('containerstring')
对于SMS表空间,容器字符串(containerstring)标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。
每个容器字符串可以是绝对的或相对的目录名。
如果目录名不是绝对的,它就相对于数据库目录。
如果目录的任何部分不存在,数据库管理程序就会创建这个目录。
容器字符串的格式取决于操作系统。
使用DATABASEUSING关键字定义DMS表空间:
1.DATABASEUSING(FILE/DEVICE'containerstring'numberofpages|K|M|G)
对于DMS表空间,容器字符串标识一个或多个将属于这个表空间的容器,表空间数据将存储在这些容器中。
指定容器的类型(FILE或DEVICE)和大小(按照PAGESIZE大小的页面)。
大小还可以指定为一个整数,后面跟着K(表示千字节)、M(表示兆字节)或G(表示千兆字节)。
可以混合指定FILE和DEVICE容器。
对于FILE容器,容器字符串必须是绝对或相对的文件名。
如果文件名不是绝对的,它就相对于数据库目录。
如果目录名的任何部分不存在,数据库管理程序就会创建这个目录。
如果文件不存在,数据库管理程序就会创建这个文件并初始化为指定的大小。
对于DEVICE容器,容器字符串必须是设备名而且这个设备必须已经存在,对于DEVICE容器通常需要使用操作系统root权限创建逻辑卷并且赋予DB2实例使用的权限,一般通过UNIX/Linux的chown命令实现这一点。
重要提示:
所有容器必须在所有数据库上是唯一的;一个容器只能属于一个表空间。
1.EXTENTSIZEnumberofpages
EXTENTSIZE指定数据库可以写到一个容器中的PAGESIZE页面数量,达到这个数量之后将跳到下一个容器。
EXTENTSIZE值还可以指定为一个整数,后面跟着K、M或G。
数据库管理程序在存储数据时重复地循环使用各个容器。
EXTENTSIZE大小是在表空间级定义的。
一旦为表空间指定了扩展数据块大小,就不能改变了。
数据库配置参数DFT_EXTENT_SZ指定数据库中所有表空间的默认扩展数据块大小。
这个值的范围是2到256个页面;因此,绝对大小是从8KB到1024KB(对于4KB页面),或者从16KB到2048KB(对于8KB页面)。
可以在CREATETABLESPACE语句中使用EXTENTSIZE参数覆盖这个数字。
1.PREFETCHSIZEnumberofpages
PREFETCHSIZE指定在执行数据预获取时将从表空间中读取的PAGESIZE页面数量。
连续的预读取是指数据库管理程序能够提前预测查询,在实际引用页面之前读取这些页面。
这样查询就不需要等待底层操作系统执行I/O操作。
这种异步的检索可以显著减少执行时间。
可以通过修改CREATETABLESPACE语句中的PREFETCHSIZE参数来控制执行预获取的积极程度。
在默认情况下,这个值设置为DFT_PREFETCH_SZ数据库配置参数。
这个值代表在DB2触发预读取请求时每次读取多少个页面。
通过将这个值设置为扩展数据块大小的倍数,可以并行地读取多个扩展数据块。
当表空间的容器在不同的硬盘上时,这个功能甚至效率更高。
预读取大小还可以指定为一个整数,后面跟着K、M或G。
关于PREFETCHSIZE的设置,我们在后面表空间性能小节还会详细讲解。
CREATEDATABASE命令示例
下面是一个CREATEDATABASE命令的示例,它使用了前面讨论的许多选项。
1.CREATEDATABASEMYDB
2.DFT_EXTENT_SZ4
3.CATALOGTABLESPACEMANAGEDBYDATABASEUSING
4.(FILE'C:
\DB2DATA\CATALOG.DAT'2000,FILE'D:
\DB2DATA\CATALOG.DAT'2000)
5.EXTENTSIZE8
6.PREFETCHSIZE16
7.TEMPORARYTABLESPACEMANAGEDBYSYSTEMUSING
8.('C:
\TEMPTS','D:
\TEMPTS')
9.USERTABLESPACEMANAGEDBYDATABASEUSING
10.(FILE'C:
\TS\USERTS.DAT'1200)
11.EXTENTSIZE24
12.PREFETCHSIZE48
我们来详细地看看每一行:
CREATEDATABASE:
这个语句定义要创建的数据库的名称。
DFT_EXTENT_SZ4:
这个参数告诉DB2默认的扩展数据块大小是4个页面,除非在创建表空间时显式地声明,否则默认使用这个值。
CATALOGTABLEPSACEMANAGEDBYDATABASEUSING:
DB2编目空间将由数据库管理。
FILE'C:
\....':
表空间的位置将跨两个文件,每个文件有2000个页面的空间。
EXTENTSIZE8:
EXTENTSIZE是8个页面。
这个设置会覆盖DFT_EXTENT_SZ。
PREFETCHSIZE16:
在查询处理期间,同时预读取16个页面。
TEMPORARYTABLESPACEMANAGEDBYSYSTEMUSING:
DB2使用的临时空间将由操作系统处理。
'C:
\TEMPTS'...:
临时空间将跨两个文件,文件的大小在DB2执行期间自动地调整。
USERTABLESPACEMANAGEDBYDATABASEUSING:
用户表空间(放置真正的表的地方)将由DB2直接管理。
FILE'C:
\TS\...':
这个空间只有一个容器,它由1200个页面组成。
EXTENTSIZE24:
USER表空间的EXTENTSIZE是24个页面。
PREFETCHSIZE48:
查询处理期间,同时预读取48个页面。
上面我们介绍了关于如何创建DB2数据库的背景知识。
在大多数情况下,CREATEDATABASE命令的默认值提供了一个可以满足开发和测试需要的数据库。
一旦决定将数据库转入生产环境,就需要对DB2使用的数据布局和表空间定义付出更大的努力。
尽管这需要做更多的规划工作,但是产生的数据库更容易管理,性能也可能更好。
关于这部分内容我们会在3.2节中详细讲解。
3.1.3创建数据库(4)
2.使用创建数据库向导创建数据库
如果感觉到通过上面命令创建数据库比较麻烦,您可以通过创建数据库向导来创建数据库,创建数据库向导将带领我们执行许多步骤来生成数据库。
向导首先询问数据库的名称、创建它的默认驱动器(如果没有指定其他驱动器,就会使用这个驱动器)和别名,如图3-7所示。
另外,可以添加关于数据库内容的注释。
(点击查看大图)图3-7指定数据库的名称、默认路径、别名等
关于图3-7有几点需要特别注意。
如果希望在数据库中使用XML列,那么它必须定义为UTF-8(EnabledatabaseforXML)。
另外,在DB2V9中自动存储是数据库的默认设置。
如果希望覆盖这个默认设置,就必须选择"我想手工管理存储器"选项。
创建数据库向导:
用户/编目/临时表
向导的后3个对话框要求填写关于如何创建用户、编目和临时表空间的信息。
如果选择"低维护"选项,向导就会创建SMS表空间。
如果选择"高性能",就需要指定用于这个表空间的设备和文件系统,如图3-8所示。
无论选择哪个选项,都可以指定希望分配给这个表空间的容器(文件、设备)。
如果单击"添加"按钮,将会显示另一个对话框,如图3-9所示,可以在这里定义要使用的容器。