首页 > 其他分享 >对象迁移表空间引出的三个小问题

对象迁移表空间引出的三个小问题

时间:2023-06-19 13:01:02浏览次数:44  
标签:name 引出 对象 tablespace TBL table 迁移 alter tbl


我们有一个开发库,默认表空间是TEST_TBS,但今天查看开发库的时候,发现有些表和字段并不在用户默认使用的表空间中,而在USERS表空间,之所以可能是之前开发人员执行SQL是从其他库复制过来的,连通tablespace USERS名称一块复制了,为了规范,就需要将这些对象转移下表空间,期间碰见了几个常见的小问题,值得记录一下。

问题1:新建的一张表,为什么dba_segments视图中没有找到对应的表和索引记录
实验:
创建一张表和一个索引:

CREATE TABLE tbl_tbl(ID NUMBER);
CREATE INDEX idx_tbl_tbl ON tbl_tbl(ID);

检索dba_segments发现记录为空:

SELECT * FROM dba_segments WHERE segment_name IN ('TBL_TBL', 'IDX_TBL_TBL');

明明已经创建了,为何显示为空?
其实这还需要补充下,测试环境为11g,有一个新特性叫延迟分配段空间,就是不会像之前的版本中create table之后就会为其分配段空间,而是在真正使用了之后才会为其分配段空间,这样可以做到真正的节省,只有真正用了,才会给你空间,即使你创建了,也不会初始分配任何段空间。例如现在向其中插入一条数据:

INSERT INTO TBL_TBL VALUES(1);

即使此时rollback了,再查询如下语句,也是可以找到记录了:

SELECT * FROM dba_segments WHERE segment_name IN ('TBL_TBL', 'IDX_TBL_TBL');

另外,user_tables和user_indexes视图中都有一个SEGMENT_CREATED字段,在create之后,这个字段值都是NO,只有像上面真正使用了,该字段值才会变为YES。

问题2:如何移动表和索引对象
这其实是一个语法问题了,对于表的移动:

alter table XXX move tablespace TEST_TBS;

对于索引的移动,这么用是错的:

alter index XXX move tablespace TEST_TBS;

应该是:

alter index XXX rebuild (online) tablespace TEST_TBS;

其中online的解释:

[ONLINE]
Enables you to continue to perform updates, insertions, and deletions on a base table. It does not enable you to query the base table.

http://docs.oracle.com/cd/E11882_01/text.112/e24436/csql.htm#CCREF0100

另外,找到所有需要移动的表:

SELECT 'alter table ' || table_name || ' move tablespace test_tbs;' FROM user_tables WHERE tablespace_name <> 'TEST_TBS';

找到所有需要移动的索引:

SELECT 'alter index ' || index_name || ' rebuild online tablespace test_tbs;' FROM user_indexes WHERE tablespace_name <> 'TEST_TBS';

问题3:LOB对象如何移动
从user_indexes视图中可以查询出LOB对象,对于LOB对象如果使用上述alter index方式转表空间会提示:

ORA-02327:无法以数据类型LOB的表达式创建索引

应该使用如下语法:

alter table XXX MOVE lob(LOB字段名称) store as (tablespace test_tbs);

http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_3001.htm#i2104128


标签:name,引出,对象,tablespace,TBL,table,迁移,alter,tbl
From: https://blog.51cto.com/u_13950417/6512508

相关文章

  • 20230418 0. 面向对象基础
    面向对象的三大特性:封装、继承、多态面向对象的好处:可维护、可扩展、可复用、灵活性好封装每个对象都包含它能进行操作所需要的所有信息,这个特性称为封装,因此对象不必依赖其他对象来完成自己的操作。封装有很多好处:第一,良好的封装能够减少耦合第二,类内部的实现可以自由地修......
  • mvc消息扩展对象
    @ConfigurationpublicclassWebMvcConfigextendsWebMvcConfigurationSupport{//@Autowired//privateInterceptorinterceptor;/***springboot如果需要继承webmvc那么就必须配置静态资源映射,否则访问不了**@paramregistry*/@......
  • C++创建对象的4种方式对比
    三种方式分别为等号,圆括号,大括号,最后一种是等号和大括号一起使用等号和圆括号是以前就存在的,大括号是新的语法,其具有2个优点:防止变窄转换:大括号不支持变窄转换,等号和圆括号为了向下兼容支持变窄转换免疫C++最令人头疼的解析:C++规定任何可以被解析为一个声明的东西必......
  • Java面向对象编程的三大特性:封装、继承、多态。
    一、封装封装的核心在于私有化(private),大部分情况下,来封装对象的属性,很少有封装方法的。通过将对象的属性封装,提供对外的公共方法来访问属性是最常见的方式。publicstaticclassFengZhuang{//通过封装,设置私有属性privateStringname;privat......
  • Python:zip+dict将两个list列表对象转为dict字典对象
    将两个list列表对象转为dict字典对象代码示例keys=['one','two','three']values=[1,2,3]dct=dict(zip(keys,values))print(dct)#{'one':1,'two':2,'three':3}参考文章Python。将2个列表转换为一个字典对象[重复]......
  • 对象的finalize调用链和clone调用链一样,必须手工构造
    classA{publicA(){System.out.println("Aconstruct");}@Overridepublicvoidfinalize(){System.out.println("Afinalize");}}classBextendsA{String......
  • OPC DA的Client对象模型
    OPCDA的Client对象模型可以如下图表示一个OPCServer对象可以包含一个OPCGroups对象一个OPCGroups对象可以包含多个OPCGroup对象一个OPCGroup对象可以包含一个OPCItems对象一个OPCItems对象可以包含多个OPCItem对象一个OPCItem对象就是OPCServer端的一个变量以下......
  • ORACLE如何找出视图依赖的对象和视图嵌套层数
    之前写过一篇文章“SQLServer如何找出视图依赖的对象和视图嵌套层数”,这里我介绍一下Oracle数据库中如何找出视图的依赖对象以及视图嵌套层数关系。主要通过DBA_DEPENDENCIES这个系统视图(这个系统视图中包含有对象的依赖关系数据)。另外,我们使用了Oracle的树形查询(层级查询)来展示这......
  • Java对象拷贝MapStruct
    介绍编译期即可生成对象复制代码。简单理解,功能定位org.springframework.beans.BeanUtils。官网,GitHub-MapStruct。入门maven项目引入依赖:mapstruct:包含必要注解,如@Mappingmapstruct-processor:注解处理器,根据注解自动生成mapper实现<dependency><groupId>org.mapstruct</group......
  • 源码泄露+bak备份泄露+vim泄露+.DS_Store(mas迁移泄露)
    源码泄露+bak备份泄露+vim泄露+.DS_Store(mas迁移泄露)1.源码泄露web网站源码打包在web目录下造成泄露,通常以压缩包方式存在,如.zip、.rar、.tar、.tar.gz等,常见命名方式为网站名,www.网站名,backup+网站名等简单入门题目扫描到压缩包文件进行下载,找到对应文件,查看是否有flag,如果没......