关于oracle带lob对象的分区表,移动表空间的问题

客户有个带lob对象的表空间,希望做表空间的move,可是等move之后,发现在dba_lobs里面查到的lob对象的表空间还是在原来的地方。

CREATE TABLE SCES1INPUTS
(
  CODREQUEST            VARCHAR2(9 BYTE)        NOT NULL,
  LOBS1INPUT            CLOB                    NOT NULL,
  CODLAYOUT             VARCHAR2(20 BYTE)       NOT NULL,
  DATINSERTION          DATE                    DEFAULT SYSDATE               NOT NULL,
  CODINSERTIONUSER      VARCHAR2(10 BYTE)       NOT NULL,
  CODINSERTIONFUNCTION  VARCHAR2(5 BYTE)        NOT NULL,
  DATHISTORY            DATE                    DEFAULT SYSDATE               NOT NULL,
  LOBS1INPUT_GZ         BLOB
)
LOB (LOBS1INPUT) STORE AS LOB1_SCES1INPUTS
LOB (LOBS1INPUT_GZ) STORE AS LOB2_SCES1INPUTS
PARTITION BY RANGE ( DATINSERTION )
(
 PARTITION "SCES1INPUTS_200508" VALUES LESS THAN (to_date('01092005','ddmmyyyy')) ,
 PARTITION "SCES1INPUTS_200509" VALUES LESS THAN (to_date('01102005','ddmmyyyy')) ,
 PARTITION "SCES1INPUTS_200510" VALUES LESS THAN (to_date('01112005','ddmmyyyy')) ,
 PARTITION "SCES1INPUTS_200511" VALUES LESS THAN (to_date('01122005','ddmmyyyy')) ,
 PARTITION "SCES1INPUTS_200512" VALUES LESS THAN (to_date('01012006','ddmmyyyy'))
)
/
 
 
 
SQL> SELECT table_name,column_name,segment_name,tablespace_name,index_name
  2  from Dba_Lobs  WHERE table_name='SCES1INPUTS';
 
TABLE_NAME           COLUMN_NAME          SEGMENT_NAME                   TABLESPACE_NAME      INDEX_NAME
-------------------- -------------------- ------------------------------ -------------------- ----------------------------------------
SCES1INPUTS          LOBS1INPUT           LOB1_SCES1INPUTS               USERS                SYS_IL0000018502C00002$$
SCES1INPUTS          LOBS1INPUT_GZ        LOB2_SCES1INPUTS               USERS                SYS_IL0000018502C00008$$
 
SQL>
 
--move tablespace:
SQL> alter table SCES1INPUTS
  2  move partition SCES1INPUTS_200508 tablespace USERS
  3  lob (LOBS1INPUT) STORE as  (tablespace tbs_ogg ENABLE STORAGE IN ROW CHUNK 8K PCTVERSION 0 NOCACHE )
  4  lob (LOBS1INPUT_GZ) store as  (tablespace tbs_ogg ENABLE STORAGE IN ROW CHUNK 8K PCTVERSION 0 NOCACHE );
 
Table altered.
 
SQL>
 
SQL> SELECT table_name,column_name,segment_name,tablespace_name,index_name
  2  from Dba_Lobs  WHERE table_name='SCES1INPUTS';
 
TABLE_NAME           COLUMN_NAME          SEGMENT_NAME                   TABLESPACE_NAME      INDEX_NAME
-------------------- -------------------- ------------------------------ -------------------- ----------------------------------------
SCES1INPUTS          LOBS1INPUT           LOB1_SCES1INPUTS               USERS                SYS_IL0000018502C00002$$
SCES1INPUTS          LOBS1INPUT_GZ        LOB2_SCES1INPUTS               USERS                SYS_IL0000018502C00008$$
 
SQL>

这里其实存在一个误区,对于分区表的lob对象,我们不应该去查user_lobs,而是应该去查
user_lob_partitions:

SQL> SELECT column_name,lob_name,partition_name,lob_partition_name,tablespace_name
  2  FROM user_lob_partitions WHERE table_name='SCES1INPUTS';
 
COLUMN_NAME          LOB_NAME                       PARTITION_NAME                 LOB_PARTITION_NAME             TABLESPACE_NAME
-------------------- ------------------------------ ------------------------------ ------------------------------ --------------------
LOBS1INPUT           LOB1_SCES1INPUTS               SCES1INPUTS_200509             SYS_LOB_P133                   USERS
LOBS1INPUT           LOB1_SCES1INPUTS               SCES1INPUTS_200510             SYS_LOB_P134                   USERS
LOBS1INPUT           LOB1_SCES1INPUTS               SCES1INPUTS_200508             SYS_LOB_P152                   TBS_OGG
LOBS1INPUT           LOB1_SCES1INPUTS               SCES1INPUTS_200511             SYS_LOB_P135                   USERS
LOBS1INPUT_GZ        LOB2_SCES1INPUTS               SCES1INPUTS_200508             SYS_LOB_P154                   TBS_OGG
LOBS1INPUT           LOB1_SCES1INPUTS               SCES1INPUTS_200512             SYS_LOB_P136                   USERS
LOBS1INPUT_GZ        LOB2_SCES1INPUTS               SCES1INPUTS_200509             SYS_LOB_P143                   USERS
LOBS1INPUT_GZ        LOB2_SCES1INPUTS               SCES1INPUTS_200510             SYS_LOB_P144                   USERS
LOBS1INPUT_GZ        LOB2_SCES1INPUTS               SCES1INPUTS_200511             SYS_LOB_P145                   USERS
LOBS1INPUT_GZ        LOB2_SCES1INPUTS               SCES1INPUTS_200512             SYS_LOB_P146                   USERS
 
10 rows selected.
 
SQL>

我们如果move了其表空间之后,还需要修改一下其默认表空间的属性:

--修改每个分区的表空间:
SQL> alter table SCES1INPUTS
  2  move partition SCES1INPUTS_200508 tablespace tbs_ogg
  3  lob (LOBS1INPUT) STORE as  (tablespace tbs_ogg ENABLE STORAGE IN ROW CHUNK 8K PCTVERSION 0 NOCACHE )
  4  lob (LOBS1INPUT_GZ) store as  (tablespace tbs_ogg ENABLE STORAGE IN ROW CHUNK 8K PCTVERSION 0 NOCACHE );
 
Table altered.
 
SQL> alter table SCES1INPUTS
  2  move partition SCES1INPUTS_200509 tablespace tbs_ogg
  3  lob (LOBS1INPUT) STORE as  (tablespace tbs_ogg ENABLE STORAGE IN ROW CHUNK 8K PCTVERSION 0 NOCACHE )
  4  lob (LOBS1INPUT_GZ) store as  (tablespace tbs_ogg ENABLE STORAGE IN ROW CHUNK 8K PCTVERSION 0 NOCACHE );
 
Table altered.
 
SQL> alter table SCES1INPUTS
  2  move partition SCES1INPUTS_200510 tablespace tbs_ogg
  3  lob (LOBS1INPUT) STORE as  (tablespace tbs_ogg ENABLE STORAGE IN ROW CHUNK 8K PCTVERSION 0 NOCACHE )
  4  lob (LOBS1INPUT_GZ) store as  (tablespace tbs_ogg ENABLE STORAGE IN ROW CHUNK 8K PCTVERSION 0 NOCACHE );
 
Table altered.
 
SQL> alter table SCES1INPUTS
  2  move partition SCES1INPUTS_200511 tablespace tbs_ogg
  3  lob (LOBS1INPUT) STORE as  (tablespace tbs_ogg ENABLE STORAGE IN ROW CHUNK 8K PCTVERSION 0 NOCACHE )
  4  lob (LOBS1INPUT_GZ) store as  (tablespace tbs_ogg ENABLE STORAGE IN ROW CHUNK 8K PCTVERSION 0 NOCACHE );
 
Table altered.
 
SQL> alter table SCES1INPUTS
  2  move partition SCES1INPUTS_200512 tablespace tbs_ogg
  3  lob (LOBS1INPUT) STORE as  (tablespace tbs_ogg ENABLE STORAGE IN ROW CHUNK 8K PCTVERSION 0 NOCACHE )
  4  lob (LOBS1INPUT_GZ) store as  (tablespace tbs_ogg ENABLE STORAGE IN ROW CHUNK 8K PCTVERSION 0 NOCACHE );
 
Table altered.
 
 
--但此时新的分区(如interval的自动生成的新分区)还是会使用原来的表空间。
--需要修改tablespace的attribute:

SQL> alter table SCES1INPUTS modify default attributes tablespace tbs_ogg;
 
Table altered.
 
SQL>
SQL> SELECT def_tablespace_name FROM user_part_tables WHERE table_name='SCES1INPUTS';
 
DEF_TABLESPACE_NAME
------------------------------
TBS_OGG
 
SQL>
此时,今后生成的新分区才会去新的表空间,而不是老的表空间。

时间: 2024-10-03 02:42:53

关于oracle带lob对象的分区表,移动表空间的问题的相关文章

LOB字段存放在指定表空间 清理CLOB字段及压缩CLOB空间

 LOB字段存放在指定表空间 清理CLOB字段及压缩CLOB空间    把LOB字段的SEGMENT 存放在指定表空间.清理CLOB字段及压缩CLOB空间 1.创建LOB字段存放表空间:create tablespace lob_test datafile '/oracle/data/lob_test.dbf' size 500m autoextend on next 10m maxsize unlimited   2.移动LOB字段到单独存放表空间:ALTER TABLE CENTER_ADM

Oracle技术:基于时间点的表空间恢复

TSPITR(表空间时间点恢复)用于将一个或多个表空间恢复到过去某个时间点的状态,而其他表空间仍然保持现有状态. TSPITR 相关的概念和术语: (1) TSPITR (Tablespace Point-In-Time Recover).TSPITR 是表空间时间点恢复的英文缩写格式,它表示将一个或多个表空间恢复到过去时间点的状态,而其他 表空间仍然保持现有状态. (2) TSPITR 实现方法.当实现表空间时间点恢复时,既可以使用用户管理的表空间时间点恢复方法,也可以使用RMAN 管理的表空

安装Oracle后,经常使用的修改表空间的SQL代码

oracle 配置:Windows NT 4.0 中文版5块10.2GB SCSI硬盘分:C:盘.D:盘.E:盘.F:盘.G:盘Oracle 8.0.4 for Windows NTNT安装在C:\WINNT,Oracle安装在C:\ORANT 目标:因系统的回滚段太小,现打算生成新的回滚段,建立大的.新的表空间(数据表空间.索引表空间.回滚表空间.临时表空间.)建两个数据表空间.两个索引表空间,这样建的目的是根据实际应用,如:现有10个应用用户,每个用户是一个独立子系统(如:商业进销存MIS系

oracle手工完全恢复(三) 恢复表空间

案例2: recover tablespace(恢复表空间(删除了tablespace的所有的datafile)) 在关库状态下删除数据文件时,这样恢复:转储datafile,使丢失的datafile脱机, recover tablespace (1)模拟环境 SQL> conn scott/tiger Connected. SQL> col tname for a30 SQL> select * from tab; TNAME                          TABT

Oracle备份数据导入到其他的表空间(只设置默认表空间无效)

  我们在导入一个Oracle备份的数据文件(*.dmp)到另外一个数据库的用户下时,如果需要更换表空间,可以采用下几个办法. 假设导出用户名:EXP_USER 表空间为:EXP_TSPACE 导入用户名:IMP_USER 表空间为:IMP_TSPACE 1.设置导入用户的默认表空间以及权限. a)建表语句如下: create user IMP_USER Sql代码 identified by "密码" default tablespace IMP_TSPACE temporary t

ORACLE RAC 裸设备数据库一节点表空间扩容错误添加数据文件到本地的处理

    9月2日上午,总部CRM求助,问题是ORACLE 10.2.0.4 RAC 裸设备数据库在表空间扩容时操作失误,将数据文件错误添加成文件系统文件并且还在节点1的本地目录,导致节点2无法完成写操作,报错信息如下: Wed Sep  2 08:23:23 2015 Errors in file /oracle/app/admin/oracrm/bdump/oracrm2_dbw0_2101996.trc: ORA-01157: cannot identify/lock data file 1

使用oracle带参数游标问题

问题描述 使用oracle带参数游标问题 GOODS 商品表 已有数据: CATEGORY表 已有数据 PL/SQL 代码: DECLARE V_GOODS GOODS%ROWTYPE; --存放商品表记录 V_CATEGORYID CHAR(32); --商品类别ID /*根据指定商品类别ID查询出该类别下商品价格最低的商品记录*/ CURSOR CUR_GOODS(CATEGORYID VARCHAR) IS SELECT * FROM (SELECT * FROM GOODS G WHER

Oracle技术:使用rman进行表空间基于时间点的恢复

实例说明: (1)先创建2个表空间. create tablespace user01 datafile '+DG1' size 1M; create tablespace user02 datafile '+DG1' size 1M; (2)在每个表空间上各创建一张表. create table scott.customers (cust_id int,cust_name varchar2(10)) tablespace user01; create table scott.sales (id

如何迁移Oracle表空间

可迁移的表空间是为了将数据从一个DB移到另一个DB而定义的.迁移的基本概念是从数据字典中卸出表和表空间的定义,将该表空间下的数据文件复制到目标服务器的目录下,再装入表和表空间的定义.这种方法可将大量的数据从一个DB移到另一个DB,是一种较快并且有效的方法.表和索引都可以使用此方法进行迁移. 迁移时的限制: 1.源和目标DB必须是oracle8i以上的版本: 2.源和目标DB必须在相同的硬件和OS平台上: 3.源和目标DB的块尺寸应该一样: 4.目标DB中不能存在与源DB中要迁移的表空间相同名字的