Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103729433
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-05-19 15:21:11

作者: 黄永兵 出处: 
 

LOB缓存和日志

BasicFile和SecureFile LOB共享了部分基础的缓存和日志选项,常见的缓存选项有:

◆CACHE - LOB数据被放在缓冲区中。

◆CACHE READES - 仅读取LOB数据过程中它放在缓冲区中,写操作时不放进去。

◆NOCACHE - LOB数据不放在缓冲区中,这是BasicFile和SecureFile LOB的默认值。

基本的日志选项有:

◆LOGGING - 创建和修改LOB时产生完全重做日志,这是默认设置。

◆NOLOGGING - 操作不记录在重做日志中,因此不能恢复,在首次创建和巨大的载入过程中有用。

而且,SecureFile LOB还有一个日志选项FILESYSTEM_LIKE_LOGGING,只记录元数据,在出现故障后仍然允许段的恢复。

CACHE选项意味着LOGGING,因此你不能将CACHE与NOLOGGING或FILESYSTEM_LIKE_LOGGING合在一起使用。

下面的代码显示了一个在表创建过程中和创建后明确设置了缓存和日志选项的例子。

CREATE TABLE caching_and_logging_tab (   id         NUMBER,   clob_data  CLOB ) LOB(clob_data) STORE AS SECUREFILE(   NOCACHE   FILESYSTEM_LIKE_LOGGING ); ALTER TABLE caching_and_logging_tab MODIFY LOB(clob_data) (   CACHE );

PL/SQL API

DBMS_LOB包用于访问BasicFile和SecureFile LOB,SETOPTIONS存储过程和GETOPTIONS函数允许在每个LOB列上设置压缩、加密和重复消除选项。

CREATE TABLE securefile_tab (   id         NUMBER,   clob_data  CLOB ) LOB(clob_data) STORE AS SECUREFILE securefile_lob(  encrypt  compress );   INSERT INTO securefile_tab VALUES (1, 'ONE'); INSERT INTO securefile_tab VALUES (2, 'TWO'); COMMIT;   SET SERVEROUTPUT ON DECLARE   l_clob  CLOB; BEGIN   SELECT clob_data   INTO   l_clob   FROM   securefile_tab   WHERE  id = 1   FOR UPDATE;     DBMS_OUTPUT.put_line('Compression  : ' || DBMS_LOB.getoptions(l_clob, DBMS_LOB.opt_compress));   DBMS_OUTPUT.put_line('Encryption   : ' || DBMS_LOB.getoptions(l_clob, DBMS_LOB.opt_encrypt));   DBMS_OUTPUT.put_line('Deduplication: ' || DBMS_LOB.getoptions(l_clob, DBMS_LOB.opt_deduplicate));     ROLLBACK; END; /

DBMS_SPACE包括SPACE_USAGE存储过程,它返回有关所有LOB段中的LOB磁盘空间的消耗情况,这个存储过程也可以用于ASSM表空间。

SET SERVEROUTPUT ON DECLARE   l_segment_size_blocks  NUMBER;   l_segment_size_bytes   NUMBER;   l_used_blocks          NUMBER;   l_used_bytes           NUMBER;   l_expired_blocks       NUMBER;   l_expired_bytes        NUMBER;   l_unexpired_blocks     NUMBER;   l_unexpired_bytes      NUMBER; BEGIN   DBMS_SPACE.SPACE_USAGE(     segment_owner         => 'TEST',     segment_name          => 'SECUREFILE_LOB',     segment_type          => 'LOB',     segment_size_blocks   => l_segment_size_blocks,     segment_size_bytes    => l_segment_size_bytes,     used_blocks           => l_used_blocks,     used_bytes            => l_used_bytes,     expired_blocks        => l_expired_blocks,     expired_bytes         => l_expired_bytes,     unexpired_blocks      => l_unexpired_blocks,     unexpired_bytes       => l_unexpired_bytes);     DBMS_OUTPUT.put_line('segment_size_blocks:' || l_segment_size_blocks);   DBMS_OUTPUT.put_line('segment_size_bytes :' || l_segment_size_bytes);   DBMS_OUTPUT.put_line('used_blocks        :' || l_used_blocks);   DBMS_OUTPUT.put_line('used_bytes         :' || l_used_bytes);   DBMS_OUTPUT.put_line('expired_blocks     :' || l_expired_blocks);   DBMS_OUTPUT.put_line('expired_bytes      :' || l_expired_bytes);   DBMS_OUTPUT.put_line('unexpired_blocks   :' || l_unexpired_blocks);   DBMS_OUTPUT.put_line('unexpired_bytes    :' || l_unexpired_bytes); END; /

阅读(246) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~