ORACLE修改用户表所属表空间的步骤.docx
- 文档编号:5107126
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:6
- 大小:17.23KB
ORACLE修改用户表所属表空间的步骤.docx
《ORACLE修改用户表所属表空间的步骤.docx》由会员分享,可在线阅读,更多相关《ORACLE修改用户表所属表空间的步骤.docx(6页珍藏版)》请在冰豆网上搜索。
ORACLE修改用户表所属表空间的步骤
使用脚本进行修改。
据目前所了解,正长情况下需要修改表的空间和表的索引的空间,如果涉及到BOLB字段的表,修改的方式又不一样了!
正常情况下的修改脚本:
1.修改表的空间
altertableTABLE_NAMEmovetablespaceTABLESPACENAME
查询当前用户下的所有表
select'altertable'||table_name||'movetablespacetablespacename;'fromuser_tables;
2.修改表的索引的空间
alterindexINDEX_NAMErebuildtablespaceTABLESPACENAME
查询当前用户下的所有索引
select'alterindex'||index_name||'rebuildtablespacetablespacename;'fromuser_indexes;
可以使用脚本执行查询的结果,这样就可以批量处理!
在移植看注意研究了下ORACLEALTERTABLEMOVE的语法:
ALTERTABLEtable_nameMOVE[ONLINE]tablespace_name;
通过上面的语句可以移植表到新表空间,
如果要移植LOB字典需要参考以下语法:
ALTERTABLEtable_nameLOB(lob_item)STOREAS[lob_segment]
(
TABLESPACEtablespace_name
(STORAGE.....)
ENABLE|DISABLESTORAGEINROW
CHUNKinteger
PCTVERSIONinteger
RETENTION
FREEPOOLSinteger
CACHE|NOCACHE|CACHEREADS
INDEXlobindexname
(TABLESPACEtablesapce_name
((STORAGE.....))
)
....
注解:
LOB(lob_item):
表中的lob字段
STOREAS[lob_segment]:
每个lob字段在表创建后系统都会自动单独创建一个段,可以通过这个参数手动指定一个段名
tablespace_name:
LOB字段新的存储表空间
(STORAGE.....):
指定tablespace_name的存储属性
ENABLESTORAGEINROW:
如果设置了enablestorageinrow那么oracle会自动将小于4000bytes的数据存储在行内,这是ORACLE的默认值,对于大于4000字节的lob字段保存在lob段(同disablestorageinrow),在表段将保留36-84字节的控制信息。
对于disablestorageinrow,Oracle将lob字段分开保存在lob段中,而仅仅在行位置保留20字节的指针。
对于相当于disablestorageinrow的这部分(也就是单独保存在LOB段的这部分数据),UNDO仅仅是记录指针与相关lob索引改变,如果发生更新操作等DML操作,原始数据将保留在LOB段。
DISABLESTORAGEINROW:
如果DISABLE这个属性,那么lob数据会在行外存储,行内只存储该lob值得指针,而且这个属性在表
创建后只能在MOVE表时才可以被改变
CHUNK:
是一个很特别的属性,对一次LOB数据的操作(插入或更新),因该分配多少存储空间,指定的值最好是数据库块的倍数,而且指定的值不能大于表空间区间中NEXT的值,要不然ORACLE会return一个错误,如果以前已经设置这个值了,那么在后期指定的值是不能被改变的。
storageas(CHUNKbytes)表示对于disablestorageinrow的这部分,最小的LOB块的大小,必须是数据库块(DB_BLOCK_SIZE)的整数倍。
一个chunk最多只保留一行LOB数据,也就是说,如果你设置了32K的CHUNK,但是如果LOB字段大小只有4K,也将占用32K的空间
storageas(cache|nocahce)表示是否允许lob段经过buffercache并缓存。
默认是nocache,表示直接读与直接写,不经过数据库的databuffer。
所以,默认情况下,对于单独保存在LOB段的这部分数据,在发生物理读的时候,是直接读,如directpathread(lob)
storageas(nocachelogging|nocachenologging),logging/nologging属性只对nocache方式生效,默认是logging,如果是nologging方式,对于保存在行外的log部分,在update等DML操作时将不记录redo日志。
PCTVERSIONinteger、RETENTION:
都是ORACLE用来管理LOB字段镜像数据的。
在LOB数据的更新过程中,
ORACLE没有用UNDOTABLESPACE空间,而是从LOB字段所在的表空间里划分一段空间来做镜像空间的,
这个空间的大小由PCTVERSION参数控制,默认值为10,代表划分表空间的10%作为镜像空间,
每个镜像空间的单元大小由CHUNK参数指定,pctversion可以使用在manualundomode和automaticundomode环境中.
retention应用了automaticundomode中的undo_retention通过时间来管理lob镜像空间.
pctversion和retention不能同时被指定.建议数据库在automaticundomode下使用retention参数。
FREEPOOLSinteger:
给LOGsegment指定freelist.RAC环境下integer为实例的个数.单实例环境下为1.在automaticundomode下oracle默认采用
FREEPOOLS来管理空闲块列表。
除非我们在表的storage配置中指定了freelistgroups参数.
CACHE|NOCACHE|CACHEREADS:
指定lob块是否在databasebuffer中缓存.
INDEXlobindexname(TABLESPACEtablesapce_name((STORAGE.....):
给lob列指定索引存储参数
举例:
SQL>showparameterdb_create_file_dest
SQL>createtablespacetestdatafilesize100Mautoextendoff;
SQL>createtabletest(avarchar2(100),bclob,dblob)pctfree10tablespacetest;
SQL>desctest
SQL>SELECTsegment_name,tablespace_name,segment_typeFROMdba_segmentsWHEREtablespace_name='TEST';
我们发现每个LOB字段单独有一个LOGSEGMENT和LOBINDEX;
SQL>setlinesize200
coltable_nameformata5
colcolumn_nameformata5
SELECTb.table_name,
a.segment_name,
b.index_name,
a.segment_type,
b.column_name,
a.tablespace_name,
b.chunk,
b.cache,
b.freepools,
b.pctversion,
b.retention
FROMdba_segmentsa,dba_lobsb
WHEREa.segment_name=b.segment_name
ANDa.tablespace_name='TEST'
/
SQL>
从上面的结果我们可以观察到LOB字段的各个属性.
下面我们对LOB字段move到另一个表空间
SQL>createtablespacelob_testdatafilesize100Mautoextendoff;
SQL>ALTERTABLETESTMOVELOB(B)STOREASTEST_B(
TABLESPACElob_test
DISABLESTORAGEINROW
CHUNK16384
RETENTION
FREEPOOLS1
NOCACHE);
SQL>ALTERTABLETESTMOVELOB(D)STOREASTEST_D(
TABLESPACElob_test
DISABLESTORAGEINROW
CHUNK16384
RETENTION
FREEPOOLS1
NOCACHE);
SQL>SELECTsegment_name,tablespace_name,segment_typeFROMdba_segmentsWHEREtablespace_name='TEST';
SQL>setlinesize200
coltable_nameformata5
colcolumn_nameformata5
SELECTb.table_name,
a.segment_name,
b.index_name,
a.segment_type,
b.column_name,
a.tablespace_name,
b.chunk,
b.cache,
b.freepools,
b.pctversion,
b.retention
FROMdba_segmentsa,dba_lobsb
WHEREa.segment_name=b.segment_name
ANDa.tablespace_name='LOB_TEST'
/SQL>
在一些复杂情况下可能需要连表一起移植
altertabletable_namemove[tablespace_name]lob(lob_item)storeas[lobsegmentname](tablespacetablespace_name.....);
移植分区中lob
altertabletable_namemovepartition[partition_name]lob(lob_item)storeas[logsegmentname](tablespace_name.....);
移植分区表
altertabletable_namemovepartition[partition_name]tablespace_namelob(lob_item)storeas[logsegmentname](tablespace_name.....);
如果不需要修改lobsegmentname,可以同时移植多个列
altertabletable_namemovelob(lob_item1,lob_item2,lob_item3...)storeas[lobsegmentname](tablespacetablespace_name.....);
LOB段也可以利用move来重整数据,以下的语句会将表与lob字段move到指定的表空间:
altertabletable_namemove[tablespacetbs_name]
lob(lob_field1,lob_field2)storeas(tablespacenew_tbs_name);
如果LOB字段在分区表中,则增加partition关键字,如
altertabletable_namemove[partitionpartname][tablespacetbs_name]
lob(field)storeas(tablespacenew_tbs_name);
在数据库中合理的存储LOB列,不仅可以提升性能,而且还可以有效的管理存储空间.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ORACLE 修改 用户 所属 空间 步骤