首页 > 数据库 >Oracle Database 23ai 中的大文件表空间收缩

Oracle Database 23ai 中的大文件表空间收缩

时间:2024-11-11 11:16:16浏览次数:3  
标签:Database 23ai TS ts 空间 tablespace user Oracle reclaim

一、创建测试环境

我们需要一个表空间来运行一些测试。在Oracle数据库23ai中,表空间的默认文件大小是bigfile,因此我们不需要显式指定它。

1.1 创建测试用户

1)创建用户

sqlplus sys/oracle@db1:1521/freepdb1 as sysdba

-- 创建测试的用户和表空间
drop user if exists reclaim_user cascade;
drop tablespace if exists reclaim_ts including contents and datafiles;

--设置OMF
alter system set db_create_file_dest='/opt/oracle/oradata/FREE';

--创建表空间
create tablespace reclaim_ts datafile size 10m autoextend on next 1m;

select tablespace_name,bigfile from dba_tablespaces where TABLESPACE_NAME='RECLAIM_TS';

TABLESPACE_NAME                BIG
------------------------------ ---
RECLAIM_TS                     YES

2)给用户授权

--创建用户指定默认表空间reclaim_ts并授权
create user reclaim_user identified by reclaim_user default tablespace reclaim_ts quota unlimited on reclaim_ts;
grant create session, create table to reclaim_user;
grant select_catalog_role to reclaim_user;

1.2 创建测试表

-- 连接到测试用户
conn reclaim_user/reclaim_user@db1:1521/freepdb1

create table t1 (
  id   number,
  col1 varchar2(4000),
  col2 varchar2(4000),
  constraint t1_pk primary key (id)
);

create table t2 (
  id   number,
  col1 varchar2(4000),
  col2 varchar2(4000),
  constraint t2_pk primary key (id)
);

insert /*+append*/ into t1
select rownum, rpad('x', 4000, 'x'), rpad('x', 4000, 'x')
from dual
connect by level <= 100000;
commit;

insert /*+append*/ into t2
select rownum, rpad('x', 4000, 'x'), rpad('x', 4000, 'x')
from dual
connect by level <= 100000;
commit;

exec dbms_stats.gather_table_stats(null, 't1');
exec dbms_stats.gather_table_stats(null, 't2');

1.3 查看表空间和表的体积

我们检查与表空间和表关联的数据文件的大小。

select tablespace_name, blocks, bytes/1024/1024 as size_mb
from   dba_data_files
where  tablespace_name = 'RECLAIM_TS';

TABLESPACE_NAME                    BLOCKS    SIZE_MB
------------------------------ ---------- ----------
RECLAIM_TS                         427520       3340

SQL>


column table_name format a10

select table_name, blocks, (blocks*8)/1024 as size_mb
from   user_tables
where  table_name in ('T1', 'T2')
order by 1;

TABLE_NAME     BLOCKS    SIZE_MB
---------- ---------- ----------
T1             200696  1567.9375
T2             200694 1567.92188

SQL>

二、模拟数据GAP

2.1 截断表

我们截断第一个表t1,在表段开始之前在数据文件中留下一个GAP。

truncate table t1;

exec dbms_stats.gather_table_stats(null, 't1');

2.2 分析大文件表空间

我们进行分析,看看通过执行收缩可以节省多少空间。我们在DBMS_SPACE包中调用SHRINK_SPACE过程,传入大文件表空间名称和TS_MODE_ANALYZE收缩模式常量。

sqlplus sys/oracle@db1:1521/freepdb1 as sysdba


set serveroutput on
execute dbms_space.shrink_tablespace('RECLAIM_TS', shrink_mode => dbms_space.ts_mode_analyze);
-------------------ANALYZE RESULT-------------------
Total Movable Objects: 2
Total Movable Size(GB): 1.56
Original Datafile Size(GB): 3.26
Suggested Target Size(GB): 3.19
Process Time: +00 00:00:00.622483

PL/SQL procedure successfully completed.

SQL>

它认为我们不能节省太多空间(3.26-3.19=0.7GB),这听起来很可疑,因为我们截断了一个表,该表占用了数据文件中大约一半的空间。

2.3 收缩大文件表空间

我们通过使用表空间名称调用Shrink_space过程来运行收缩操作。

set serveroutput on
execute dbms_space.shrink_tablespace('RECLAIM_TS');
-------------------SHRINK RESULT-------------------
Total Moved Objects: 2
Total Moved Size(GB): 1.56
Original Datafile Size(GB): 3.26
New Datafile Size(GB): 1.63
Process Time: +00 00:00:09.344545

PL/SQL procedure successfully completed.

不管分析如何,我们已将关联的数据文件减小到原始大小的大约一半。  

前面的命令相当于调用收缩模式为 TS_MODE_SHRINK 且目标大小为 TS_TARGET_MAX_SHRINK 的过程。

set serveroutput on
execute dbms_space.shrink_tablespace('RECLAIM_TS', shrink_mode => dbms_space.ts_mode_shrink, target_size => dbms_space.ts_target_max_shrink);

三、注意事项

以下是有关收缩大文件表空间的一些附加信息。

  • 移动对象以压缩数据文件中的段,因此所有未使用的空间都位于数据文件的末尾。这允许缩小数据文件以回收未使用的空间。
  • 尽管文档中有说明,通过 SHRINK_SPACE 进行的在线移动没有与传统 ALTER TABLE ... MOVE 相关的所有限制。分析阶段将指示是否存在不受支持的对象。
  • TS_MODE_SHRINK_FORCE 的收缩模式将为不支持在线移动的对象执行离线移动。如果脱机移动会导致应用程序出现问题,请勿使用此选项。
  • 如果表空间未设置为自动扩展,则在操作结束时段将没有空间增长。您将需要手动调整表空间的大小以腾出空间。
  • 收缩可能会失败,但如果任何移动成功完成,它仍然可能会减小数据文件的大小。
  • 我们可以收缩 SYSAUX 表空间。
  • SHRINK_TABLESPACE 过程存在一定的负载,其中包含 SHRINK_RESULT 输出参数,因此操作结果可以作为 CLOB 返回,而不是使用 DBMS_OUTPUT 推出。

标签:Database,23ai,TS,ts,空间,tablespace,user,Oracle,reclaim
From: https://blog.csdn.net/2403_87251975/article/details/143676293

相关文章

  • postgresql事务与oracle中的事务差异
    事务事务ID及回卷参见postgresql中的事务回卷原理及预防措施。子事务(事务处理:概念与技术4.7)  子事务具有ACI特性,但是不具有D特性。只会在主事务提交时,才会提交,无法单独提交。pg不支持子事务。xact保存点保存点是不支持子事务/嵌套事务时的折中实现,但它是ANSISQL......
  • 07 Oracle数据库恢复基础解析:从检查点到归档,一步步构建数据安全防线
    文章目录Oracle数据库恢复基础解析:从检查点到归档,一步步构建数据安全防线一、检查点(Checkpoint)1.1检查点定义1.2检查点重要性1.3检查点工作原理1.4手动触发检查点二、日志(RedoLog)2.1日志定义2.2日志重要性2.3查看当前使用的Redo日志成员三、归档机制(Archiving)3......
  • 08 Oracle数据库故障应对与恢复策略:全面掌握RMAN恢复方法
    文章目录Oracle数据库故障应对与恢复策略:全面掌握RMAN恢复方法一、故障场景及恢复策略1.1实例失败1.2介质故障1.3数据丢失二、RMAN恢复方法详解2.1全库恢复2.2增量恢复2.3时间点恢复三、实践与总结Oracle数据库故障应对与恢复策略:全面掌握RMAN恢复方法Ora......
  • Oracle 中的 Incarnation 到底是个什么?概念理解篇
    转自:https://www.cnblogs.com/askscuti/p/10935945.html目录1.恋爱的持续2.痛苦的分手3.对上天的祈求4.重生的机会(恋爱篇)5.重生的机会(数据库篇)6.幸福美满的生活 1.恋爱的持续一直到上大学,我们不在同一个地方-称之为异地恋,那时候没有微信,没有触屏手机,移动的动......
  • Oracle 中的 Incarnation 到底是个什么?实验操作篇
    转自:https://www.cnblogs.com/askscuti/p/10939593.html目录1.官方图示例2.场景模拟3.实验步骤3.1备份数据库(略)3.2 查询当前数据库化身版本3.3按场景模拟操作3.4恢复出B表并打开数据库3.5查询当前数据库化身版本3.6恢复出A-6(修改当前......
  • Oracle 与 GreatSQL 差异:更改唯一索引列
    Oracle与GreatSQL差异:更改唯一索引列问题来源在从Oracle迁移到GreatSQL的应用系统中,一条普通的update语句在GreatSQL中却报错,需要进行SQL语句的改写。把实际问题简化为下面简单情况进行说明。在Oracle下,可以正常执行的update语句。--建表CREATETABLEte......
  • Oracle 第28章:Oracle机器学习
    Oracle机器学习第28章:数据科学与机器学习基础及利用Oracle进行预测性分析在当今数据驱动的时代,数据科学和机器学习成为了企业决策的重要组成部分。Oracle作为一家领先的数据库技术提供商,不仅提供强大的数据库管理功能,还整合了先进的数据分析工具,使得用户能够轻松地在其环境......
  • Oracle 存储过程分页 + Sqlsugar调用
    一、Oracle存储过程分页1createPROCEDUREGetPatientVisitData(2p_HospIdINVARCHAR2,--院区编码3p_strDateINVARCHAR2,--开始日期4p_endDateINVARCHAR2,--结束日期5p_page_sizeINNUMBER,--每页记录数6p_page_numberIN......
  • 03 Oracle进程秘籍:深度解析Oracle后台进程体系
    文章目录Oracle进程秘籍:深度解析Oracle后台进程体系一、Oracle后台进程概览1.1DBWn(DatabaseWriterProcess)1.2LGWR(LogWriterProcess)1.3SMON(SystemMonitorProcess)1.4PMON(ProcessMonitorProcess)二、后台进程的监控与诊断2.1使用OracleEnterpriseManager(OE......
  • 04 深入 Oracle 并发世界:MVCC、锁、闩锁、事务隔离与并发性能优化的探索
    文章目录深入Oracle并发世界:MVCC、锁、闩锁、事务隔离与并发性能优化的探索一、多版本并发控制(MVCC)1.1理论解析1.2实践应用二、锁与闩锁机制2.1理论解析2.2实践应用三、事务隔离级别3.1理论解析3.2实践应用四、死锁预防与解决策略4.1理论解析4.2实践应用五......