暂无图片
表空间有个数据文件1,里面有个对象a,现在shrink这个表空间,a会不会跑到数据文件2上,还是仍然停留在1上?
我来答
分享
Bigbig
2021-09-18
表空间有个数据文件1,里面有个对象a,现在shrink这个表空间,a会不会跑到数据文件2上,还是仍然停留在1上?

表空间有个数据文件1,里面有个对象a,现在shrink这个表空间,a会不会跑到数据文件2上,还是仍然停留在1上?

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
Lucifer三思而后行
暂无图片

默认只移动行数据!

oracle以block为单位,进行了block间的数据copy.那么shrink后,部分行数据的rowid发生了变化,同时,部分行数据的物理存储的顺序也发生了变化,而table所位于的block的区域却没有变化,这就说明,shrink只移动了table其中一部分的行数据,来完成释放空间,而且,这个过程是在table当前所使用的block中完成的。

使用shrink的前提条件

  • 1、表所在的表空间必须使用ASSM(自动段空间管理)
  • 2、在收缩表上必须启用row movement选项
select row_movement from dba_tables where table_name='' and owner=''; alter table emp enable row movement;
复制

操作步骤:

  • 1.打开行移动功能:
alter table emp enable row movement;
复制
  • 2.压缩阶段,将数据行紧密的插入到数据块里面。在这个阶段,其他用户可以对收缩的表进行DML操作
    进行行移动:
alter table emp shrink space compact;
复制

释放阶段,降低HWM,这个阶段会对表进行排他锁。用户不能对表进行DML操作。

  • 3.移动高水位,将无用的区进行释放,更新数据字典:
alter table emp shrnk space;
复制

(进行 shrnk 操作后,索引不会失效,这是有别与 move 操作的)

  • 4.操作完成后,一定要将行移动功能关闭掉:
alter table emp disable row movement;
复制

使用shrink的注意事项

  • 1) 对簇、簇表、以及任何含有long列的对象无法使用shrink
  • 2) LOB段不支持shrink,即使对表shrink时指定了cascade语句
  • 3) 对有函数索引的表不支持
  • 4) 即使指定cascade语句,也不会shrink mapping表(映射表),索引组织表的over flow segment.
  • 5) 如果一个是on commit物化视图的主表,那么我们是无法shrink这张表的。如果shrink rowid的物化视图,在shrink之后必须rebuild。
  • 6) 不支持compressed 表
暂无图片 评论
暂无图片 有用 0
打赏 0
暂无图片
回答交流
Markdown


请输入正文
提交
相关推荐
有Oracle 11g新增实例的脚本吗?
回答 2
dbcasilentcreateDatabasetemplateNameGeneralPurpose.dbcgdbnameorclsidorclsysPasswordoraclesystemPassw
Oracle的log4j-core.jar怎么处理?
回答 1
已采纳
OGG和OEM受影响,数据库不受影响:oracleDatabase(allsupportedversionsincluding11.2,12.1,12.2,19c,and21c)arenotaffec
ORACLE RAC 12.2 IDLE_TIME可以从unlimited 调整到15?
回答 2
首先你要明确你的这个参数是什么意思?你这个参数调整后15分钟session非活跃就会被killhttps://docs.oracle.com/en/database/oracle/oracledata
ogg同步报ORA-01400错误
回答 4
出错的表FCHILDNO只有该字段是主键非空约束,其他的都是可为空而且我从dsc文件中检查发现FCHILDNO具体的记录在主从库是存在的,HANDLECOLLISIONS参数的场景我知道是更新的记录从
oracle 批量插入数据,怎么做?比如有10条数据。 是用for循环在程序里面一条一条地调用insert,还是其他方法? 还有,for循环能保证事务么?
回答 2
已采纳
例如,执行以下存储过程,即一次性提交:DECLAREBEGINFORiIN1..10LOOPinsertintolucifervalues(i,'test');ENDLOOP;END;/查询插入结果:
Windows2008R2操作系统使用PL/SQL Dev11和instantclient_12_2连接AL32UTF8编码11.2.0.4数据库,where条件使用中文进行过滤,没有结果返回
回答 1
1、把sql拷贝到服务器上sqlplus执行,如果也有问题,那就是sql中的字符非UTF82、检查数据库字符集,确保数据库字符集和查询sql的编码一致。3、更换其它工具测试,排除PL/SQL软件的问题
请问不下载整个数据库的前提下,如何找到$ORACLE_HOME/rdbms/demo/lobs/下的sql文件?
回答 2
其他相同版本的数据库服务器上拷贝
Oracle 19c在windows上安装,还支持roseha的故障转移方式吗?
回答 2
有没有相关的资料呢?原来11g可以,现在换成19c不行呢?
|| 这个符号在Oracle中的作用是?
回答 3
已采纳
连接作用,也就是可以把两个字段的数据或者某些字符组成我们想要的表达形式
Oracle bbed修改SCN报错BBED-00207: invalid offset specifier
回答 3
是的