实际上,创建表的语句还可以定义约束、存储参数等属性。
在Oracle数据库系统的逻辑结构上,当创建一个表时,将同时创建一个表段,用于存放表中的数据,该表段位于某个表空间。在物理结构上,表中的数据都存放在数据块中,因而在数据块中存放的是一行行的数据。
在创建表时,通过添加表的特性子句可以决定怎样创建表、怎样在磁盘上存储表,以及当表生成和应用中最终执行的方式。主要的特性子句包括下述几个。
(1)PCTFREE和PCTUSED子句
这两个参数的作用是用来控制数据块的空间使用情况。为了减少数据块间的迁移,在创建表时可以通过PCTFREE和PCTUSED子句指定数据块空间的使用情况。例如:
在表T1中,每个数据块都有20%的保留空间。当可用空间使用完后,新的数据将被写入另一个数据块。当从表中删除数据时,数据块中已用空间不断减少,当减少到40%时,可再次向该数据块中插入数据。
在使用PCTFREE和PCTUSED子句时,可以参考以下原则:
①PCTFREE和PCTFUSED的值必须小于或等于100%。
②如果在一个表上很少执行UPDATE操作,可以将PCTFREE设置得尽量小。
③PCTFREE与PCTUSED之和越接近100%,数据块的空间利用率越高。
(2)INITRANS和MAXTRANS子句
数据库中的数据存储在数据块中,用户的事务是最终要修改数据块中的数据。Oracle允许多个并发的事务同时修改一个数据块中的数据。每当用户的事务开始作用于一个数据块时,数据库服务器将在该数据块的头部为该事务分配一个事务项,以记录事务的相关信息。事务结束时,对应的事务项将被删除。
INITRANS和MAXTRANS参数用于控制一个数据块上的并发事务数量,其中INITRANS用于指定初始的事务数量,MAXTRANS用于指定最大的并发事务数量。
当创建一个表时,数据库服务器按照INITRANS的值为每个数据块分配一定的事务项,这些事务项将一直保留到该表被删除。当一个事务访问数据块时,将占用其中的一个事务项,事务结束时,将释放事务项。当这些预先创建的事务项全部被占用后,如果又有新的并发事务发生,数据库服务器将在数据块的可用空间中为事务创建一个新的事务项。在任一时刻,数据块中的事务项不会超过MAXTRANS参数值。
例如,在利用以下语句创建表时,指定初始的事务项为10,最大的并发事务数量为200。
INITRANS和MAXTRANS参数的值可以根据用户对表的访问情况进行设置。如果参数值过大,事务项将占用更多的数据块空间,那么数据可以利用的空间将减少。如果参数设置过小,有些事务将因为无法分配到事务项而等待,从而降低了数据库的性能。一般情况下,如果多个用户同时访问表的情况很少发生,可以为这两个参数设置较小的参数值,反之要为这两个参数指定较大的参数值。
(3)STORAGE子句
STORAGE子句多数是在创建表空间时用来设置表空间的存储属性的。在默认情况下,创建在该表空间中的数据库对象,都会继承表空间的存储属性。用户可以在创建表时使用STORAGE子句来另外设置表的存储属性,在Oracle Database 11g数据库中,用户可以使用以下这些参数。(www.daowen.com)
①INITIAL:指出为对象分配的第一个区的大小。
②NEXT:指出为对象分配的下一个区的字节长度。
③PCTINCREASE:在本地管理表空间内,Oracle数据库在创建段时使用该参数的值确定初始段的大小,而在后续空间分配中将忽略该参数的值。在字典管理表空间内,该参数的值指出第三个及其后续区比前一个区增长的百分比。
④MINEXTENTS:在本地管理表空间内,它与前面3个参数一起决定初始段的大小。在字典管理表空间内,其值指出对象创建时分配的区的总数。
⑤MAXEXTENTS:该参数只用于字典管理表空间,它指出Oracle可分配给对象的总区数。例如,
(4)TABLESPACE子句
TABLESPACE子句用来指定将表创建在哪个表空间上。如果不指定TABLESPACE子句,用户创建的表位于默认表空间上(USERS表空间)。
为了能够在指定的表空间上创建表,当前用户必须在该表空间上有足够的空间配额或在数据库中具有UNLIMITED TABLESPACE权限。
例如,
(5)LOGGING和NOLOGGING
在创建表时,使用LOGGING或NOLOGGING子句指定表是否是日志记录表。在默认情况下,用户在表上执行DDL(数据定义语言,如CREATE、ALTER、DROP)和DML(数据操纵语言,如INSERT、DELETE、UPDATE)命令时,服务器进程都会产生重做日志。如果不希望产生重做日志,在创建表时需要指定NOLOGGING子句。使用NOLOGGING子句有下述好处。
①由于不写重做日志,因而节约了重做日志文件的存储空间。
②减少了处理时间。
③在以并行方式向表中写入大量数据时提高了效率。
但是,使用NOLOGGING子句也存在缺点,当表被破坏时,将无法进行恢复,所以在表创建后应及时对其进行备份。
例如,
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。