Oracle修改用户表所属表空间的步骤

2024-02-14 22:18

本文主要是介绍Oracle修改用户表所属表空间的步骤,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

使用脚本进行修改。据目前所了解,正长情况下需要修改表的空间和表的索引的空间,如果涉及到BOLB字段的表,修改的方式又不一样了!
正常情况下的修改脚本:
1 。修改表的空间
alter table TABLE_NAME move tablespace TABLESPACENAME

查询当前用户下的所有表
选择'alter table'|| table_name ||' 移动表空间tablespacename;' 来自  user_tables;

2.修改表的索引的空间
alter index INDEX_NAME rebuild tablespace TABLESPACENAME

查询当前用户下的所有索引select'alter
index'|| index_name ||' 重建表空间tablespacename;' from  user_indexes;

可以使用脚本执行查询的结果,这样就可以批量处理!

在移植看注意研究了下ORACLE ALTER TABLE MOVE的语法:

       ALTER TABLE table_name MOVE [ONLINE] tablespace_name;
通过上面的语句可以移植表到新表空间,

如果要移植LOB字典需要参考以下语法:
ALTER TABLE table_name LOB(lob_item)STORE AS [lob_segment]
      (
        TABLESPACE tablespace_name
                   (STORAGE .....)
           ENABLE | DISABLE STORAGE IN ROW
           CHUNK integer
           PCTVERSION integer
            RETENTION
            FREEPOOLS integer
            CACHE | NOCACHE | CACHE READS
           INDEX lobindexname

(TABLESPACE tablesapce_name

((STORAGE .....))


....

注:

LOB(lob_item):表中的lob字段
STORE AS [lob_segment]:每个lob字段在表创建后系统都会自动单独创建一个段,可以通过这个参数手动指定一个段名
   TABLESPACE_NAME:LOB字段新的存储表空间
(STORAGE .....):指定TABLESPACE_NAME的存储属性
    ENABLE STORAGE IN ROW:如果设置了enable storage in row那么oracle会自动将小于4000bytes的数据存储在行内,这是ORACLE的默认值,对于大于4000字节的lob字段保存在lob段),在表段将保留36-84字节的控制信息。对于在行中禁用存储,Oracle将lob字段分开保存在lob段中,而仅仅在行位置保留20字节的指针。对于相当于禁用存储行的这部分(也就是单独保存在LOB段的这部分数据),UNDO仅仅是记录指针与相关高球索引改变,如果发生更新操作等DML操作,原始数据将保留在LOB段。

    DISABLE STORAGE IN ROW :如果DISABLE这个属性,那么LOB数据会在行外存储,行内只存储该吊球值得指针,这个而且在属性表
创建³³后只能在MOVE表时才可以被改变
    CHUNK:是一个很特别的属性,对一次LOB数据的操作(插入或更新),因该分配多少存储空间,指定的值最好是数据库块的倍数,而且指定的值不能 于表空间区间中NEXT的值,要不然ORACLE会返回一个错误,如果以前已经设置这个值了,那么在后期指定的值是不能被改变的。

存储为(CHUNK字节)表示在行对于禁用存储的这部分,最小的LOB块的大小,必须是数据库块(DB_BLOCK_SIZE)的整数倍。一个块最多只保留一行LOB数据,也就是说,如果你设置了32K的CHUNK,但是如果LOB字段大小只有4K,也将占用32K的空间

存储为(cache | nocahce)表示是否允许lob段经过buffer cache并缓存。默认是nocache,表示直接读与直接写,不经过数据库的data buffer。所以,默认情况下,对于单独保存在LOB段的这个部分数据,在发生物理读的时候,是直接读,如直接路径读取(lob)

存储为(nocache记录| nocache nologging),记录/ nologging属性只对nocache方式生效,默认是logging,如果是nologging方式,对于保存在行外的日志部分,在更新等DML操作时将不记录重做日志

    。PCTVERSION integer,RETENTION:都是ORACLE用来管理LOB字段镜像数据的。在LOB数据的更新过程中,
ORACLE没有用UNDO TABLESPACE空间,而是从LOB字段所在的表空间里划分一段空间来做镜像空间的,
这个空间的大小由PCTVERSION参数控制,默认值为10,代表划分表空间的10%作为镜像空间,
每个镜像空间的单元大小由CHUNK参数指定,pctversion可以使用在手动撤消模式和自动撤消模式 环境中。
保留应用了自动撤销模式中的撤销通知通过时间来管理lob镜像空间。
pctversion和retention不能同时被指定。建议数据库在自动撤销模式下使用保留参数。
FREEPOOLS integer:给LOG段指定free list.RAC环境下整数为实例的个数。单实例环境下为1.在自动undo模式下oracle默认采用
FREEPOOLS来管理空闲块列表。除非我们在表的存储配置中指定了freelist groups参数。
CACHE | NOCACHE | CACHE READS:指定lob块是否在数据库缓冲区中缓存。
索引lobindexname(TABLESPACE tablesapce_name((STORAGE .....):给lob列指定索引存储参数
举例:
SQL> show parameter db_create_file_dest

SQL> create tablespace test datafile size 100M autoextend off;
SQL> create table test(a varchar2(100 ),b clob,d blob)pctfree 10 tablespace test;

SQL> desc test
SQL> SELECT segment_name,tablespace_name,segment_type FROM dba_segments WHERE tablespace_name ='TEST';

我们发现每个LOB字段单独有一个LOGSEGMENT和LOBINDEX;

SQL> set linesize 200
col table_name格式a5
col column_name格式a5
SELECT b.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
FROM dba_segments a,dba_lobs b
WHERE a.segment_name = b.segment_name
AND a.tablespace_name ='TEST'
/

SQL>

从上面的结果我们可以观察到LOB字段的各个属性。
下面我们对LOB字段移动到另一个表空间

SQL>创建表空间lob_test数据文件大小100M autoextend off;

SQL> ALTER TABLE TEST MOVE LOB(B)作为TEST_B 存储(
TABLESPACE lob_test
禁用存储在行
16384
RETENTION
FREEPOOLS 1
NOCACHE);
SQL> ALTER TABLE TEST MOVE LOB(D)STEST AS TEST_D(
TABLESPACE lob_test
DISABLE STORAGE IN ROW
CHUNK 16384
RETENTION
FREEPOOLS 1
NOCACHE);
SQL> SELECT segment_name,tablespace_name,segment_type FROM dba_segments WHERE tablespace_name ='TEST';

SQL> set linesize 200
col table_name format a5
col column_name format a5
SELECT b.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
FROM dba_segments a,dba_lobs b
WHERE a.segment_name = b.segment_name
AND a.tablespace_name ='LOB_TEST'
/ SQL>

在一些复杂情况下可能需要连接一起移植
alter table table_name move [tablespace_name] lob(lob_item)store as [lobsegmentname](tablespace tablespace_name .....);
移植分区中lob
alter table table_name move partition [partition_name] lob(lob_item)store as [logsegmentname](tablespace_name .....);
移植分区表
alter table table_name move partition [partition_name] tablespace_name lob(lob_item)store as [logsegmentname]( tablespace_name .....);
如果不需要修改lobsegmentname,可以同时移植多个列
alter table table_name move lob(lob_item1,lob_item2,lob_item3 ...)store as [lobsegmentname](tablespace tablespace_name .....);



    LOB段也可以利用移动来重整数据,以下的语句会将表与lob字段移动到指定的表空间:

   alter table table_name move [tablespace tbs_name]

lob(lob_field1,lob_field2)存储为(tablespace new_tbs_name);

如果LOB字段在分区表中,则增加partition关键字,如

   alter table table_name move [partition partname] [tablespace tbs_name]

lob(field)store as(tablespace new_tbs_name) ;



在数据库中合理的存储LOB列,不仅可以提升性能,而且还可以有效的管理存储空间。

这篇关于Oracle修改用户表所属表空间的步骤的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/709715

相关文章

SQL Server身份验证模式步骤和示例代码

《SQLServer身份验证模式步骤和示例代码》SQLServer是一个广泛使用的关系数据库管理系统,通常使用两种身份验证模式:Windows身份验证和SQLServer身份验证,本文将详细介绍身份... 目录身份验证方式的概念更改身份验证方式的步骤方法一:使用SQL Server Management S

Python对PDF书签进行添加,修改提取和删除操作

《Python对PDF书签进行添加,修改提取和删除操作》PDF书签是PDF文件中的导航工具,通常包含一个标题和一个跳转位置,本教程将详细介绍如何使用Python对PDF文件中的书签进行操作... 目录简介使用工具python 向 PDF 添加书签添加书签添加嵌套书签Python 修改 PDF 书签Pytho

CentOS7增加Swap空间的两种方法

《CentOS7增加Swap空间的两种方法》当服务器物理内存不足时,增加Swap空间可以作为虚拟内存使用,帮助系统处理内存压力,本文给大家介绍了CentOS7增加Swap空间的两种方法:创建新的Swa... 目录在Centos 7上增加Swap空间的方法方法一:创建新的Swap文件(推荐)方法二:调整Sww

详解如何在SpringBoot控制器中处理用户数据

《详解如何在SpringBoot控制器中处理用户数据》在SpringBoot应用开发中,控制器(Controller)扮演着至关重要的角色,它负责接收用户请求、处理数据并返回响应,本文将深入浅出地讲解... 目录一、获取请求参数1.1 获取查询参数1.2 获取路径参数二、处理表单提交2.1 处理表单数据三、

SpringBoot实现二维码生成的详细步骤与完整代码

《SpringBoot实现二维码生成的详细步骤与完整代码》如今,二维码的应用场景非常广泛,从支付到信息分享,二维码都扮演着重要角色,SpringBoot是一个非常流行的Java基于Spring框架的微... 目录一、环境搭建二、创建 Spring Boot 项目三、引入二维码生成依赖四、编写二维码生成代码五

Oracle 通过 ROWID 批量更新表的方法

《Oracle通过ROWID批量更新表的方法》在Oracle数据库中,使用ROWID进行批量更新是一种高效的更新方法,因为它直接定位到物理行位置,避免了通过索引查找的开销,下面给大家介绍Orac... 目录oracle 通过 ROWID 批量更新表ROWID 基本概念性能优化建议性能UoTrFPH优化建议注

PostgreSQL 序列(Sequence) 与 Oracle 序列对比差异分析

《PostgreSQL序列(Sequence)与Oracle序列对比差异分析》PostgreSQL和Oracle都提供了序列(Sequence)功能,但在实现细节和使用方式上存在一些重要差异,... 目录PostgreSQL 序列(Sequence) 与 oracle 序列对比一 基本语法对比1.1 创建序

IDEA之MyBatisX使用的图文步骤

《IDEA之MyBatisX使用的图文步骤》本文主要介绍了IDEA之MyBatisX使用,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 目录一、idea插件安装二、IDEA配置数据库连接(以mysql为例)三、生产基础代码一、idea插

Docker安装MySQL镜像的详细步骤(适合新手小白)

《Docker安装MySQL镜像的详细步骤(适合新手小白)》本文详细介绍了如何在Ubuntu环境下使用Docker安装MySQL5.7版本,包括从官网拉取镜像、配置MySQL容器、设置权限及内网部署,... 目录前言安装1.访问docker镜像仓库官网2.找到对应的版本,复制右侧的命令即可3.查看镜像4.启

debian12安装docker的实现步骤

《debian12安装docker的实现步骤》本文主要介绍了debian12安装docker的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录步骤 1:更新你的系统步骤 2:安装依赖项步骤 3:添加 docker 的官方 GPG 密钥步骤