研究解决CLOB字段IO问题的方法

目前已经采取的做法,缓存该表
网上查到的做法

 一、对于普通表的cache方法:

  SQL> conn test/test 已连接。

  SQL> alter table t1 storage (buffer_pool keep) cache;

  表已更改。

  查询普通表是否已经被cache:

  SQL> select table_name,cache,buffer_pool from user_TABLES;

  TABLE_NAME CACHE BUFFER_

  ------------------------------ --------

  T1 Y KEEP

  二、对于普通LOB类型的segment的cache方法

  SQL> desc t2

  名称 是否为空? 类型

  ----------------------------------------

  ID NUMBER

  C2 CLOB

  SQL> alter table t2 modify lob(c2) (storage (buffer_pool keep) cache);

  表已更改。

  三、对基于CLOB类型的对象的cache方法

  SQL> desc lob1

  名称 是否为空? 类型

  ----------------------------------------- ID NUMBER

  C1 XMLTYPE

  SQL> alter table lob1 modify lob(c1.xmldata) (storage (buffer_pool keep) cache);表已更改。

  那么,怎么测试lob segment是否被cache了呢?

 
 
------------------------------------------------------------------------------------------
1.检索lob字段的时候,按需去取lob字段,如果你不用,则给它设成null,比如我要id='10'的lob字段,那么sql: 

 

Sql代码   收藏代码
  1. select decode(id,'10',lob_col,nullfrom tb  


2.给lob字段建立单独的表空间,并设定把CACHE 设定成reads提高读取速度。 
代码: 

Sql代码   收藏代码
  1. --创建表空间  
  2. CREATE TABLESPACE MONTANA DATAFILE 'montana.tbs' SIZE 500M;  
  3.   
  4.   
  5. --修改lob对象的表空间(STRINGDATA和OBJECTDATA是lob字段)  
  6. ALTER TABLE tb MOVE LOB (STRINGDATA,OBJECTDATA) STORE AS  
  7. (  
  8. TABLESPACE MONTANA  
  9. CACHE READS    
  10. )  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用 `exp` 命令导出 Oracle 数据库时,如果存在 CLOB 类型的字段,可能会出现报错的情况。这是因为 `exp` 命令默认使用 `varchar2` 类型来处理 CLOB 字段,而 `varchar2` 类型的长度有限制,无法处理过长的 CLOB 字段解决这个问题有两种方法: 1. 使用 `expdp` 命令导出数据:`expdp` 命令是 Oracle 数据库的数据泵工具,它可以更好地处理 CLOB 类型的数据。使用 `expdp` 命令导出数据时,需要指定 `CLOB` 类型的列使用二进制格式导出,例如: ``` expdp user/password@database tables=table_name directory=dir dumpfile=file_name.dmp lob_as_segment=y ``` 其中,`lob_as_segment=y` 表示将 `CLOB` 类型的列以二进制格式导出。 2. 修改 `exp` 命令的参数:可以通过修改 `exp` 命令的参数来解决 CLOB 字段报错的问题。具体操作如下: 1. 在 `exp` 命令中添加 `-c` 参数,表示以字符格式导出数据。 2. 在 `exp` 命令中添加 `-lob` 参数,表示导出 CLOB 字段。 3. 修改 `NLS_LANG` 环境变量,将其设为 `AMERICAN_AMERICA.AL32UTF8`,表示使用 UTF-8 编码。 示例命令如下: ``` exp user/password@database tables=table_name file=file_name.dmp log=log_name.log rows=yes compress=no direct=no indexes=no triggers=no constraints=no grants=no feedback=1000000 buffer=1000000 consistent=y commit=y statistics=none object_consistent=y recordlength=65535 consistent=y full=y rows=y constraints=n indexes=n grants=n triggers=n feedback=1000000 buffer=1000000 file=file_name.dmp log=log_name.log compress=n consistent=y direct=n rows=y statistics=none file_size=unlimited consistent=y file_name_convert=old_dir:new_dir -c -lob -NLS_LANG=AMERICAN_AMERICA.AL32UTF8 ``` 注意,修改 `NLS_LANG` 环境变量可能会影响其他程序的运行,需要谨慎操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值