2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > DM数据库管理模式对象空间 表 索引 触发器 视图 序列列 同义词等。

DM数据库管理模式对象空间 表 索引 触发器 视图 序列列 同义词等。

时间:2021-08-02 08:19:14

相关推荐

DM数据库管理模式对象空间 表 索引 触发器 视图 序列列 同义词等。

一、管理模式对象的空间

模式对象的空间管理关系到空间的有效使用和数据的合理分布。

1、设置存储参数

对于普通表和索引,DM8提供了以下的存储参数:

初始簇数目INITIAL:指建立表时分配的簇个数,必须为整数,最小值为1,最大值为256,缺省为1;

下次分配簇数目NEXT:指当表空间不够时,从数据文件中分配的簇个数,必须为整数,最小值为1,最大值为256,缺省为1;

最小保留簇数目MINEXTENTS:当删除表中的记录后,如果表使用的簇数目小于这个值,就不再释放表空间,必须为整数,最小值为1,最大值为256,缺省为1;

填充比例FILLFACTOR:指定插入数据时数据页的充满程度,取值范围从 0 到 100。默认值为0,等价于100,表示全满填充,未充满的空间可供页内的数据更新时使用。插入数据时填充比例的值越低,可由新数据使用的空间就越多;更新数据时填充比例的值越大,更新导致出现的页分裂的几率越大;

表空间名:在指定的表空间上建表或索引,表空间必须已存在,默认为用户缺省的表空间。

如表PERSON建立在表空间TS_PERSON中,初始簇大小为5,最小保留簇数目为5,下次分配簇数目为2,填充比例为85。

也可以在分区表上指定某个分区的存储参数,如下面的建表语句指定了PAR2分区存储在TS_PAR2表空间上。

堆表

对于堆表可以指定并发分支BRANCH和非并发分支NOBRANCH的数目,其范围是(1=\<BRANCH \<= 64,1\<=NOBRANCH\<=64),堆表最多支持128个链表

如下例创建的LIST_TABLE表有并发分支2个,非并发分支4个。

HUGE表

HUGE表是建立在自己特有的HTS表空间上的。建立HUGE表如果不使用默认的表空间,则必须要先创建一个HUGE TABLESPACE,默认HTS表空间为HMAIN。

如建立一个名称HTS_NAME的HTS表空间,表空间路径为为e:\HTSSPACE。示例如下:

对于HUGE表可以指定如下参数:

区大小(一个区的数据行数)。 区大小可以通过设置表的存储属性来指定,区的大小必须是2的多少次方,如果不是则向上对齐。取值范围:1024行~1024*1024行。默认值为65536行。

是否记录区统计信息,即在修改时是否做数据的统计。

所属的表空间。创建HUGE表,需要通过存储属性指定其所在的表空间,不指定则存储于默认表空间HMAIN中。HUGE表指定的表空间只能是HTS表空间。

文件大小。创建HUGE表时还可以指定单个文件的大小,通过表的存储属性来指定,取值范围为16M~1024*1024M。不指定则默认为64M。文件大小必须是2的多少次方,如果不是则向上对齐。

日志属性。1)LOG NONE:不做镜像;2)LOG LAST:做部分镜像;3)LOG ALL:全部做镜像。

如下面的建表语句:STUDENT表的区大小为65536行,文件大小为64M,指定所在的表空间为HTS_NAME,做完整镜像,S_comment列指定的区大小为不做统计信息,其它列(默认)都做统计信息。

2、 收回多余的空间

DM8中表和索引对象的所占用的簇要么是全满的状态要么是半满的状态,空闲的簇会被系统自动回收。

1、用户和表上的空间限制

1 .1用户的空间限制

用户占用的空间是其下所有用户表对象占用空间的总和。可以限制用户使用空间的大小,当用户创建表,创建索引,或者插入更新数据超过了指定的空间限制时,会报空间不足的错误。如创建用户TEST_USER时可指定该用户使用的最大磁盘空间为50M。

对用户的空间限制也可进行更改,如修改用户TEST_USER的磁盘空间限制为无限制。

1.2 表对象的空间限制

表对象占用的空间是其上所有索引占用空间的总和。可以限制表对象使用空间的大小,当在表对象上创建索引或者插入更新数据超过了指定的空间限制时,会报空间不足的错误。如创建表TEST时可指定该表对象可使用的最大磁盘空间为500M。

对表对象空间的限制也可进行更改,如修改表TEST的磁盘空间限制为50M。

3 、查看模式对象的空间使用

查看用户占用的空间

可以使用系统函数USER_USED_SPACE得到用户占用空间的大小,函数参数为用户名,返回值为占用的页的数目。

查看表占用的空间

可以使用系统函数TABLE_USED_SPACE得到表对象占用空间的大小,函数参数为模式名和表名,返回值为占用的页的数目。

查看表使用的页数

可以使用系统函数TABLE_USED_PAGES得到表对象实际使用页的数目,函数参数为模式名和表名,返回值为实际使用页的数目。

查看索引占用的空间

可以使用系统函数INDEX_USED_SPACE得到索引占用空间的大小,函数参数为索引ID,返回值为占用的页的数目。

查看索引使用的页数

可以使用系统函数INDEX_USED_PAGES得到索引实际使用页的数目,函数参数为索引ID,返回值为实际使用页的数目。

二、管理表

以下通过建表、改表、删表、清空表、查看表信息介绍DM管理表的准则。

1、创建表;

如果要在所属模式中创建新表,需要有CREATE TABLE数据库权限;而要在其他用户的模式中创建新表,则需要有CREATE ANY TABLE数据库权限。创建表时,应当为表指定一个表空间,否则,表将在MAIN创建。下面给出一个创建一个简单表的例子。

在上述CREATE TABLE语句中,在users表空间上建立了employee表,并有几个完整性约束,其中包含定义在不同列上的一个主键和外键。

2、更改表;

想更改的表如果在所属的模式中,用户必须具有ALTER TABLE数据库权限;若在其他模式中,用户必须有ALTER ANY TABLE的数据库权限。

通过更改表,用户可以对数据库中的表作如下修改:

添加或删除列,或修改现有的列的定义(列名、数据类型、长度、默认值)。其中,对于添加列,当设置INI参数ALTER_TABLE_OPT为1时,添加列采用查询插入实现,可能会导致ROWID的改变;ALTER_TABLE_OPT为2时,系统开启快速加列功能,对于没有默认值或者默认值为NULL的新列,系统内部会标记为附加列,能够达到瞬间加列的效果,此时记录ROWID不会改变,若有默认值且默认值不为NULL,则默认值的存储长度不能超过4000字节,此时仍旧采取查询插入实现;ALTER_TABLE_OPT为3时,系统会开启快速加列功能,允许指定新增列的默认值,系统会为该列设置附加列标记,查询表中已存在的数据时,会自动为记录设置追加列默认值,此时记录ROWID不会改变;

添加、修改或删除与表相关的完整性约束;

重命名一个表;

启动或停用与表相关的完整性约束;

启动或停用与表相关的触发器;

修改表的SPACE LIMIT;

增删自增列。

3、删除表;

当一个表不再使用时,可以将其删除。删除表时,将产生以下结果:

表的结构信息从数据字典中删除,表中的数据不可访问;

表上的所有索引和触发器被一起清除;

所有建立在该表上的同义词、视图和存储过程变为无效;

所有分配给表的簇标记为空闲,可被分配给其他的数据库对象。

一般情况下,普通用户只能删除自己模式下的表。若要删除其他模式下的表,则必须具有DROP ANY TABLE数据库权限。

以下语句可删除employee表:

删除不存在的表会报错。若指定IF EXISTS关键字,删除不存在的表,不会报错,如:

如果要删除的表被其他表引用,即其他表的外键引用了表的任何主键或唯一键,则需要在DROP TABLE 语句中包含CASCADE 选项,如:

4、清空表;

有些情况下,当表的数据不再使用时,需要删除表的所有行,即清空该表。DM8支持以下方式来删除表中的所有的行:

1、使用DELETE语句;

使用DELETE清空表,当表有很多行时,会消耗很多系统资源。因为,DELETE操作需要CPU时间,并且会产生大量的REDO日志和UNDO记录。另外,如果表上关联了元组级触发器,每删除一行,就会启动一次触发器。这都需要大量的系统资源。

2、使用DROP和CREATE 语句;

当删除和重新创建表时,所有与之相关联的索引、完整性约束和触发器也被删除。同样,所有针对被删除表的授权也会被删除。

3、使用TRUNCATE语句。

TRUNCATE语句为我们提供了一种快速、有效地删除表所有行的方法。并且TRUNCATE是一个DDL语句,不会产生任何回滚信息。执行TRUNCATE会立即提交,而且不能回滚。如果要清空的表被其他表引用,即其他表的外键引用了表的任何主键或唯一键,并且子表不为空或子表的外键约束未被禁用,则不能TRUNCATE该表。

5、查看表信息。

创建表后,可以通过SP_TABLEDEF系统过程查看表的定义。

DM支持INT和BIGINT两种数据类型的自增列,并提供以下函数查看表上自增列的当前值、种子和增量等信息:

IDENT_CURRENT:获得表上自增列的当前值;

IDENT_SEED:获得表上自增列的种子信息;

IDENT_INCR:获得表上自增列的增量信息。

查看表的空间使用情况

DM使用段、簇和页实现数据的物理组织。DM支持查看表的空间使用情况,包括:

TABLE_USED_SPACE:已分配给表的页面数;

TABLE_USED_PAGES:表已使用的页面数。

三、索引管理

DM8提供了几种最常见类型的索引,对不同场景有不同的功能,它们是:

聚集索引:每一个普通表有且只有一个聚集索引;

唯一索引:索引数据根据索引键唯一;

函数索引:包含函数/表达式的预先计算的值;

位图索引:对低基数的列创建位图索引;

位图连接索引:针对两个或者多个表连接的位图索引,主要用于数据仓库中;

全文索引:在表的文本列上而建的索引。具体内容请参考第19章。

索引在逻辑上和物理上都与相关的表的数据无关,作为无关的结构,索引需要存储空间。 创建或删除一个索引,不会影响基本的表、数据库应用或其他索引。当插入、更改和删除相关的表的行时,DM8会自动管理索引。如果删除索引,所有的应用仍继续工作,但访问以前被索引了的数据时速度可能会变慢。索引其他的增删改和什么样的列适合什么样的索引这边就不具体赘述了。

四、触发器

触发器(TRIGGER)定义当某些与数据库有关的事件发生时,数据库应该采取的操作。通过触发器机制,用户可以定义、删除和修改触发器。DM自动管理和运行这些触发器,从而体现系统的主动性,方便用户使用。触发器是一种特殊的存储过程,它在创建后就存储在数据库中。触发器的特殊性在于它是建立在某个具体的表或视图之上的,或者是建立在各种事件前后的,而且是自动激发执行的,如果用户在这个表上执行了某个DML操作(INSERT、DELETE、UPDATE),触发器就被激发执行。

触发器常用于自动完成一些数据库的维护工作。例如,触发器可以具有以下功能:

可以对表自动进行复杂的安全性、完整性检查;

可以在对表进行DML操作之前或者之后进行其它处理;

进行审计,可以对表上的操作进行跟踪;

实现不同节点间数据库的同步更新。

五、视图、序列和同义词

视图是从一个或几个基表(或视图)导出的表,但它是一个虚表,即数据字典中只存放视图的定义(由视图名和查询语句组成),而不存放对应的数据,这些数据仍存放在原来的基表中。当对一个视图进行查询时,视图将查询其对应的基表,并且将所查询的结果以视图所规定的格式和次序进行返回。因此当基表中的数据发生变化时,从视图中查询出的数据也随之改变了。

CREATE VIEW normal_view AS SELECT name FROM person;CREATE VIEW special_view AS SELECT name, sex, email, phone FROM person;

序列(sequence)是DM数据库中的数据库实体之一。通过使用序列,多个用户可以产生和使用一组不重复的有序整数值。比如可以用序列来自动地生成主关键字值。序列通过提供唯一数值的顺序表来简化程序设计工作。

序列可以是循环的,当序列的值达到最大值/最小值时,序列将从最小值/最大值计数。使用一个序列时,不保证将生成一串连续不断递增的值。例如,如果查询一个序列的下一个值供insert使用,则该查询是能使用这个序列值的唯一会话。如果未能提交事务处理,则序列值就不被插入表中,以后的insert将继续使用该序列随后的值。

同义词相当于模式对象的别名,起着连接数据库模式对象和应用程序的作用。假如模式对象需要更换或者修改,则不用修改应用程序而直接修改同义词就可以了。

同义词是用来实现下列用途的数据库对象:

为可以存在于本地或远程服务器上的其他数据库对象(称为基础对象)提供备用名称;

提供抽象层以免客户端应用程序对基础对象的名称或位置进行更改。

同义词的好处在于用户可能需要某些对象在不同的场合采用不用的名字,使其适合不同人群的应用环境。例如,创建表product,如果客户不认识这个英文词,这时可以增加同义词,命名“产品”,这样客户就有较直观的观念,一目了然。

六、存储管理

1、管理表空间

创建表空间

创建表空间时需要指定表空间名和其拥有的数据文件列表。比如创建名为bookshop的表空间,并指定该空间上拥有2个数据文件,每个数据文件的大小为128M。

删除表空间

只可以删除用户创建的表空间并且只能删除未使用过的表空间。删除表空间时会删除其拥有的所有数据文件。例如删除bookshop表空间。

修改表空间名

可修改已存在的由用户创建的表空间的名称。比如可修改bookshop表空间名为books。

修改表空间状态

用户表空间有联机和脱机两种状态。系统表空间、回滚表空间、重做日志表空间和临时文件表空间不允许脱机。设置表空间状态为脱机状态时,如果该表空间有未提交的事务,则脱机失败报错。脱机后可对表空间的数据进行备份。例如修改bookshop表空间状态为脱机。

修改bookshop表空间状态为联机。

MPP环境下,可能发现节点间的表空间不一致情况,如:EP01为ONLINE状态,EP02为OFFLINE状态,这个时候,无论执行ONLINE还是OFFLINE都是报错。需要用户介入,才可以解决问题。用户LOCAL方式登陆实例,并执行SP_SET_SESSION_LOCAL_TYPE(1),使得该会话可以执行DDL操作,再执行ONLINE或者OFFLINE即可。

修改表空间数据缓冲区

ALTER TABLESPACE bookshop CACHE= "KEEP";

查询表空间与数据文件对应关系

SELECT ts.NAME, df.PATH FROM V$TABLESPACE ts, V$DATAFILE AS df WHERE ts.ID = df.GROUP_ID;

表空间文件失效检查

在dm.ini中参数FIL_CHECK_INTERVAL的值指定DM系统检查数据文件是否仍存在的时间间隔。将其设为0表示不进行检查。也可以通过系统过程SP_FILE_SYS_CHECK()来手动的进行检查。

表空间失效文件恢复

LINUX系统中被删除的文件,只要其句柄没有被关闭,可以在/proc/<pid>/fd中找到其对应的文件副本。其中<pid>指打开该文件的进程id。

利用该方法,结合OS命令,DM提供失效文件的恢复方案如下:

调用系统过程SP_TABLESPACE_PREPARE_RECOVER(tablespace_name)准备进行恢复;

如果使用过程中DM报错表空间数据文件被删除,通过操作系统的ps命令找到当前dmserver的PID:ps –ef|grep dmserver;

使用操作系统ls命令查看被删除文件对应的副本:ls /proc/<PID>/fd–l,会发现被删除的文件后有(deleted)字样;

使用操作系统的cp命令将文件复制到原位置:

复制成功后,调用系统过程SP_TABLESPACE_RECOVER(ts_name)完成表空间失效文件的恢复。

注意,要保证数据文件正确修复,需要保证在SP_TABLESPACE_PREPARE_RECOVER后进行数据文件的复制。

2、管理数据文件

添加数据文件

可以在用户表空间中添加数据文件。添加的数据文件大小最小为4096*页大小,如页大小为8K,则可添加的文件最小值为4096*8k=32M。比如在bookshop表空间中添加大小为64M的数据文件。

扩展数据文件的大小

可以扩展用户表空间中已存在的数据文件的大小。比如扩展bookshop表空间中数据文件book.dbf大小至128M。

指定数据文件的扩展属性

可以指定数据文件是否可以扩展,每次扩展的空间大小以及数据文件可扩展到的最大空间大小,子句的语法为:

OFF表示文件不可扩展,ON表示文件可扩展。文件扩展大小表示当需要扩展文件时,文件一次增大的空间大小,取值范围是0—2048,单位是M。文件限制大小表示文件可扩展的最大空间大小,为0或者UNLIMITED表示无限制,单位是M。缺省情况下,文件扩展大小是1M,文件的最大大小是无限制的。

创建表空间时可指定文件的扩展属性。如创建表空间时指定数据文件的扩展属性为可自动扩展,每次扩展大小为10M,最大可扩展到100M:

在表空间中添加文件时可指定文件的扩展属性。如添加数据文件时指定扩展属性为不可自动扩展:

可修改表空间中已存在的数据文件的扩展属性。如修改数据文件的扩展属性为可自动扩展:

修改数据文件的路径

可以修改用户表空间中已存在数据文件的路径,待修改的数据文件所在表空间必须处于脱机状态并且只可修改用户创建的表空间中文件的路径。如修改bookshop表空间中文件book.dbf的路径为e:\ book.dbf。

3、管理重做日志文件

添加重做日志文件

在服务器打开状态下,可以添加新的重做日志文件。添加的数据文件大小最小为4096*页大小,如页大小为8K,则可添加的文件最小值为4096*8k=32M。如添加重做大小为128M的重做日志文件DAMENG03.log。

扩展重做日志文件

在服务器打开状态下,可以扩展已有的重做日志文件的大小。如扩展重做日志文件DAMENG03.log到256M。

管理回滚空间

回滚空间的管理和用户表空间的管理基本是一样的,区别是回滚空间的空间名固定为ROLL,不可修改。可增加和扩展回滚空间中的回滚文件,设置回滚空间的扩展属性,相关操作可参考16.2管理数据文件中的说明。

回滚文件的路径记录在控制文件里面,可以使用dmctlcvt工具在DM服务器关闭的状态下对控制文件进行修改。使用dmctlcvt工具将控制文件转换为文本文件,编辑文本文件中要修改的文件的路径后再使用dmctlcvt工具将文本文件转换为控制文件即可。

首先转换控制文件到文本文件:

编辑ctl.txt文本文件中fil_path=d:\roll.dbf为fil_path=e:\ roll.dbf,保存文本文件。复制d:\roll.dbf文件为e:\ roll.dbf。

最后转换文本文件到控制文件:

这种修改文件路径的方法也可用于重做日志文件,系统表空间文件等路径的修改。

管理控制文件

可以在dm.ini中通过设置CTL_PATH配置参数的值来指定控制文件的路径,缺省控制文件dm.ctl在数据目录下。例如可以把dm.ctl文件复制到D盘下,同时修改dm.ini中CTL_PATH = D:\dm.ctl。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。