暂无图片
暂无图片
5
暂无图片
暂无图片
暂无图片

Oracle表空间维护操作总结

原创 数据库路上 5天前
175

Oracle表空间维护操作总结


一、表空间基本概述

1.1 什么是表空间

表空间(Tablespace)是Oracle数据库中的一种逻辑存储结构,用于存储数据库对象(如表、索引、视图等),是Oracle中信息存储的最大逻辑单元。

从逻辑结构来看,数据库由多个表空间构成,表空间下包含段(Segment)、区(Extent)、数据块(Data Block)等逻辑数据类型。从物理结构来看,数据信息存储在数据文件中,一个表空间至少包含一个数据文件。表空间的大小等于其所有数据文件的大小总和。

核心要点:

  • 表空间是逻辑概念,数据文件是物理概念
  • 一个表空间至少包含一个数据文件
  • 表空间是Oracle数据库恢复的最小单位
  • 一个表空间只能属于一个数据库

1.2 表空间的逻辑层次

数据库(Database)
    └── 表空间(Tablespace)  ← 最大逻辑单元
            └── 段(Segment)
                    └── 区(Extent)
                            └── 数据块(Data Block)  ← 最小I/O单元
                                    └── 操作系统块(OS Block)

二、Oracle表空间的类型

2.1 按用途分类

类型 说明 存储内容
永久表空间(PERMANENT) 存储需要永久保存的数据库对象 表、索引、视图、存储过程等
临时表空间(TEMPORARY) 存储数据库操作过程中的临时数据 ORDER BY排序、GROUP BY分组产生的临时数据
撤销表空间(UNDO) 存储数据修改前的副本 事务回滚、读一致性、闪回查询所需的数据

2.2 按文件规模分类

类型 说明 数据文件数量
小文件表空间(Smallfile) 传统表空间,使用多个数据文件 最多1022个数据文件
大文件表空间(Bigfile) Oracle 10g引入,使用单个超大文件 仅1个数据文件

2.3 系统默认表空间

Oracle数据库安装完成后默认创建以下表空间:

  • SYSTEM:系统表空间,存储数据字典、系统对象和PL/SQL源代码
  • SYSAUX:辅助系统表空间,减轻SYSTEM表空间负荷
  • TEMP:默认临时表空间
  • UNDOTBS1:默认撤销表空间(自动撤销管理模式下)
  • USERS:默认用户表空间

三、表空间创建语法

3.1 创建永久表空间

基本语法:

CREATE TABLESPACE tablespace_name DATAFILE 'datafile_path' SIZE size [AUTOEXTEND ON NEXT increment_size MAXSIZE max_size] [EXTENT MANAGEMENT LOCAL [UNIFORM SIZE uniform_size | AUTOALLOCATE]] [SEGMENT SPACE MANAGEMENT {AUTO | MANUAL}];
参数 说明
DATAFILE 指定数据文件路径和名称
SIZE 数据文件初始大小
AUTOEXTEND ON 启用自动扩展
NEXT 每次自动扩展的增量
MAXSIZE 数据文件最大上限,UNLIMITED 表示无限制
EXTENT MANAGEMENT LOCAL 本地化管理区分配(Oracle 9i 后默认且推荐)
UNIFORM SIZE 本地化管理区分配下,表示表空间中所有段(表、索引等)在分配区时,每个区的大小都固定统一,不随段的增长而变化
AUTOALLOCATE 本地化管理区分配下,默认区分配方式,由 Oracle 自动决定每个区的大小,Oracle 会根据段(Segment)当前的数据量,按阶梯式递增策略动态分配区大小
SEGMENT SPACE MANAGEMENT AUTO 自动段空间管理(ASSM),使用位图管理空闲空间

示例:

-- 创建基础表空间 CREATE TABLESPACE my_tbs DATAFILE '/oradata/orcl/my_tbs01.dbf' SIZE 50M; -- 创建表空间并启用自动扩展 CREATE TABLESPACE app_data DATAFILE '/oradata/orcl/app_data01.dbf' SIZE 50M AUTOEXTEND ON NEXT 100M MAXSIZE 20G; -- 创建表空间指定区和段管理方式 CREATE TABLESPACE hr_data DATAFILE '/oradata/orcl/hr_data01.dbf' SIZE 50M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M SEGMENT SPACE MANAGEMENT AUTO;

3.2 创建临时表空间

CREATE TEMPORARY TABLESPACE temp_tbs TEMPFILE 'tempfile_path' SIZE size [AUTOEXTEND ON NEXT increment_size MAXSIZE max_size] [EXTENT MANAGEMENT LOCAL UNIFORM SIZE size]; -- 示例 CREATE TEMPORARY TABLESPACE temp_data TEMPFILE '/oradata/orcl/temp_data01.dbf' SIZE 50M AUTOEXTEND ON NEXT 50M MAXSIZE 10G EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

3.3 创建撤销表空间

CREATE UNDO TABLESPACE undo_tbs DATAFILE 'datafile_path' SIZE size [RETENTION GUARANTEE]; -- 示例 CREATE UNDO TABLESPACE undo_data DATAFILE '/oradata/orcl/undo_data01.dbf' SIZE 50M;

3.4 设置默认表空间

-- 设置默认永久表空间 ALTER DATABASE DEFAULT TABLESPACE app_data; -- 设置默认临时表空间 ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp_data;

3.5 查看创建语句

-- 查询表空间创建DDL语句 set long 200000 SELECT DBMS_METADATA.GET_DDL('TABLESPACE', 'MY_TBS') FROM DUAL;

四、表空间扩容方法

当表空间容量不足时,可以通过以下三种方法进行扩容。

4.1 方法一:添加新的数据文件

ALTER TABLESPACE tablespace_name ADD DATAFILE 'file_path' SIZE size; -- 示例 ALTER TABLESPACE app_data ADD DATAFILE '/u01/app/oracle/oradata/mydb/app_data02.dbf' SIZE 1G;

4.2 方法二:调整现有数据文件大小

ALTER DATABASE DATAFILE 'file_path' RESIZE new_size; -- 示例 ALTER DATABASE DATAFILE '/oradata/orcl/app_data01.dbf' RESIZE 100M;

4.3 方法三:启用数据文件自动扩展

-- 对已存在的数据文件启用自动扩展 ALTER DATABASE DATAFILE 'file_path' AUTOEXTEND ON NEXT increment_size MAXSIZE max_size; -- 示例 ALTER DATABASE DATAFILE '/oradata/orcl/app_data01.dbf' AUTOEXTEND ON NEXT 100M MAXSIZE 20G;

4.4 创建表空间时指定自动扩展

CREATE TABLESPACE my_tbs DATAFILE '/oradata/orcl/my_tbs01.dbf' SIZE 50M AUTOEXTEND ON NEXT 50M MAXSIZE 20480M;

注意事项

  • 确保有足够的磁盘空间
  • 自动扩展可能导致磁盘空间迅速耗尽,需合理设置增量和最大大小

五、表空间删除

5.1 基本语法

DROP TABLESPACE tablespace_name [INCLUDING CONTENTS [AND DATAFILES]];

5.2 删除方式

删除方式 说明
DROP TABLESPACE tbs_name; 仅删除表空间定义(表空间必须为空)
DROP TABLESPACE tbs_name INCLUDING CONTENTS; 删除表空间及其中的所有对象
DROP TABLESPACE tbs_name INCLUDING CONTENTS AND DATAFILES; 删除表空间、对象及对应的数据文件

5.3 重要限制

  1. 回收站:删除的表空间不会进入回收站,无法恢复
  2. 不能删除SYSTEM表空间
  3. 默认表空间:不能删除数据库的默认表空间
  4. 活动事务:不能删除包含活动事务回滚段的表空间

5.4 删除示例

-- 删除表空间及其所有内容和数据文件 DROP TABLESPACE my_tbs INCLUDING CONTENTS AND DATAFILES;

六、表空间中删除数据文件

6.1 基本语法

ALTER TABLESPACE tablespace_name DROP DATAFILE 'datafile_path';

6.2 删除条件

删除数据文件必须满足以下条件:

  1. 数据文件必须为空(没有已分配的区段),否则报错 ORA-03262: the file is non-empty
  2. 不能是表空间的第一个数据文件
  3. 表空间不能处于READ ONLY状态

6.3 删除前检查

-- 查看数据文件中是否存在段 SELECT segment_name, segment_type, owner FROM dba_extents WHERE file_id = (SELECT file_id FROM dba_data_files WHERE file_name = '/path/to/file.dbf');

6.4 删除示例

SQL> SELECT segment_name, segment_type, owner 
  2  FROM dba_extents 
  3  WHERE file_id = (SELECT file_id FROM dba_data_files WHERE file_name = '/oradata/orcl/app_data02.dbf');
no rows selected

SQL> ALTER TABLESPACE app_data DROP DATAFILE '/oradata/orcl/app_data02.dbf';
Tablespace altered.

SQL> select file_name from dba_data_Files where tablespace_Name='APP_DATA';
FILE_NAME
--------------------------------------------------------------------------------
/oradata/orcl/app_data01.dbf
可以看到,控制文件和数据字典中,app_data02.dbf已经被彻底删除!

6.5 常见误区

ALTER DATABASE DATAFILE ... OFFLINE DROP 并不会删除数据文件,只是将数据文件置于离线状态。数据文件的相关信息仍会保留在数据字典和控制文件中。

SQL> ALTER DATABASE DATAFILE '/oradata/orcl/app_data02.dbf' offline DROP;
Database altered.

SQL> select file_name from dba_data_Files where tablespace_Name='APP_DATA';
FILE_NAME
--------------------------------------------------------------------------------
/oradata/orcl/app_data02.dbf    --可以看到,文件在控制文件和数据字典中元数据保留
/oradata/orcl/app_data01.dbf

如果有增量归档日志,可以将该文件恢复后,继续联机online,类似如下:
SQL> recover datafile '/oradata/orcl/app_data02.dbf';
Media recovery complete.
SQL> ALTER DATABASE DATAFILE '/oradata/orcl/app_data02.dbf' online;
Database altered.

七、表空间离线和联机

7.1 基本语法

-- 将表空间设置为联机状态 ALTER TABLESPACE tablespace_name ONLINE; -- 将表空间设置为离线状态 ALTER TABLESPACE tablespace_name OFFLINE [NORMAL | TEMPORARY | IMMEDIATE]; -- 示例 SQL> alter tablespace app_data offline immediate; Tablespace altered. SQL> recover tablespace app_data; Media recovery complete. SQL> alter tablespace app_data online; Tablespace altered.

7.2 离线方式的区别

离线方式 检查点 是否需要介质恢复 说明
NORMAL(默认) 对所有数据文件执行检查点 不需要 最安全的方式
TEMPORARY 仅对在线的数据文件执行检查点 可能需要 适用于部分数据文件已损坏
IMMEDIATE 不执行检查点 必须执行 最快但恢复成本最高

7.3 重要限制

  • 临时表空间不能离线
  • SYSTEM表空间不能离线
  • 数据库必须处于OPEN状态才能修改表空间的可用性
  • immediate选项必须数据库开启归档模式才可以

7.4 表空间只读/读写

-- 设置为只读 ALTER TABLESPACE tablespace_name READ ONLY; -- 设置为读写 ALTER TABLESPACE tablespace_name READ WRITE; -- 示例 SQL> alter tablespace app_data read only; Tablespace altered. SQL> alter tablespace app_data read write; Tablespace altered.

注意:SYSAUX、SYSTEM和临时表空间不能设置为只读

八、大文件表空间介绍

8.1 什么是大文件表空间

大文件表空间(Bigfile Tablespace)是Oracle 10g开始引入的特性,每个表空间仅包含一个数据文件或临时文件,该文件最多可包含约40亿(2³²)个数据块。由于大文件单点故障、备份恢复都不友好,实际生产环境,使用这种模式的表空间很少,了解即可。

对比维度 大文件表空间(Bigfile) 小文件表空间(Smallfile)
数据文件数量 每个表空间仅1个 每个表空间最多1022个
单文件最大容量(8K块) 约32TB 约32GB
管理复杂度 低(单文件透明管理) 较高(需管理多个文件)
单点故障风险 低(风险分散)
适用场景 数据仓库、ASM环境、云存储 OLTP、多设备环境
备份恢复 大文件备份恢复的时间窗口较长 粒度细,可并行

8.2 创建大文件表空间

CREATE BIGFILE tablespace big_ts DATAFILE '/oradata/orcl/big_ts01.dbf' SIZE 50m AUTOEXTEND ON NEXT 1G MAXSIZE UNLIMITED; -- 创建大文件临时表空间 CREATE BIGFILE TEMPORARY tablespace temp_big TEMPFILE '/oradata/orcl/temp_big01.dbf' SIZE 50m;

8.3 大文件表空间扩容

由于大文件表空间只有一个数据文件,扩容直接在表空间级别操作:

-- 方法一:调整表空间大小 ALTER tablespace big_ts RESIZE 100m; -- 方法二:通过数据文件方式 ALTER DATABASE DATAFILE '/oradata/orcl/big_ts01.dbf' RESIZE 150m; -- 方法三:启用自动扩展 ALTER tablespace big_ts AUTOEXTEND ON NEXT 1G MAXSIZE 10T;

8.4 查看大文件表空间

-- 查看表空间类型 SELECT tablespace_name, bigfile FROM dba_tablespaces; -- 查看大文件表空间的数据文件 SELECT file_name, bytes FROM dba_data_files WHERE tablespace_name = 'BIG_TS';

九、表空间重命名操作

9.1 基本语法

ALTER TABLESPACE old_tablespace RENAME TO new_tablespace;

示例

ALTER TABLESPACE app_data RENAME TO app_data_1;

9.2 注意事项

  • 重命名后,数据库会更新数据字典、控制文件和数据文件头中的名称引用
  • SYSTEM和SYSAUX表空间不建议重命名
  • 重命名操作不会影响数据文件的实际路径和名称
  • 需要拥有 ALTER TABLESPACE 权限

十、表空间中数据文件迁移操作

10.1 方法一:ALTER DATABASE RENAME FILE(适用于任何表空间)

适用于表空间离线或数据库MOUNT状态:

-- 1. 查看当前数据文件路径 SELECT file_name FROM dba_data_files WHERE tablespace_name = 'TBS_NAME'; -- 2. 关闭数据库并启动到MOUNT状态 SHUTDOWN IMMEDIATE; STARTUP MOUNT; -- 3. 在操作系统层面移动文件(如mv命令) -- 4. 更新控制文件 ALTER DATABASE RENAME FILE '/old_path/datafile.dbf' TO '/new_path/datafile.dbf'; -- 5. 打开数据库 ALTER DATABASE OPEN; -- 示例 SQL> SELECT file_name FROM dba_data_files WHERE tablespace_name = 'APP_DATA'; FILE_NAME -------------------------------------------------------------------------------- /oradata/orcl/app_data02.dbf /oradata/orcl/app_data01.dbf SQL> SHUTDOWN IMMEDIATE; STARTUP MOUNT; Database closed. Database dismounted. ORACLE instance shut down. SQL> ORACLE instance started. ...... Database mounted. 操作系统层面oracle用户执行 mv /oradata/orcl/app_data02.dbf /oradata/orcl_test/app_data_test02.dbf SQL> ALTER DATABASE RENAME FILE '/oradata/orcl/app_data02.dbf' TO '/oradata/orcl_test/app_data_test02.dbf'; Database altered. SQL> alter database open; Database altered. SQL> SELECT file_name FROM dba_data_files WHERE tablespace_name = 'APP_DATA'; FILE_NAME -------------------------------------------------------------------------------- /oradata/orcl_test/app_data_test02.dbf --可以看到已经移动成功 /oradata/orcl/app_data01.dbf

10.2 方法二:ALTER TABLESPACE RENAME DATAFILE(表空间级别)

适用于表空间离线,无需关闭整个数据库:

-- 1. 将表空间离线 ALTER TABLESPACE tablespace_name OFFLINE; -- 2. 在操作系统层面移动文件(如mv命令) -- 3. 更新表空间中的数据文件路径 ALTER TABLESPACE tablespace_name RENAME DATAFILE '/old_path/datafile.dbf' TO '/new_path/datafile.dbf'; -- 4. 将表空间联机 ALTER TABLESPACE tablespace_name ONLINE; -- 示例 SQL> SELECT file_name FROM dba_data_files WHERE tablespace_name = 'APP_DATA'; FILE_NAME -------------------------------------------------------------------------------- /oradata/orcl_test/app_data_test02.dbf /oradata/orcl/app_data01.dbf SQL> ALTER TABLESPACE APP_DATA OFFLINE; Tablespace altered. SQL> host mv /oradata/orcl/app_data01.dbf /oradata/orcl_test/app_data_test01.dbf //host表示执行后续执行操作系统命令,mv表示移动文件 SQL> ALTER TABLESPACE APP_DATA RENAME DATAFILE '/oradata/orcl/app_data01.dbf' TO '/oradata/orcl_test/app_data_test01.dbf'; Tablespace altered. SQL> ALTER TABLESPACE APP_DATA ONLINE; Tablespace altered. SQL> SELECT file_name FROM dba_data_files WHERE tablespace_name = 'APP_DATA'; FILE_NAME -------------------------------------------------------------------------------- /oradata/orcl_test/app_data_test02.dbf /oradata/orcl_test/app_data_test01.dbf --可以看到数据文件移动成功

10.3 注意事项

  • 确保目标路径有足够的磁盘空间
  • 对于SYSTEM表空间的数据文件迁移,需要数据库处于MOUNT状态

十一、OMF文件管理方式

11.1 OMF概述

OMF(Oracle Managed Files)是Oracle提供的自动化文件管理方式,启用后无需指定文件名称、大小、路径,由Oracle自动分配和管理。

11.2 配置OMF

-- 设置OMF数据文件默认存放路径 ALTER SYSTEM SET DB_CREATE_FILE_DEST = '/oradata/omf' SCOPE=BOTH; -- 查看当前OMF配置 SHOW PARAMETER DB_CREATE_FILE_DEST; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_create_file_dest string /oradata/omf

11.3 使用OMF创建表空间

-- 创建表空间(Oracle自动命名和分配文件) CREATE TABLESPACE omf_ts DATAFILE SIZE 100M; -- 创建大文件表空间 CREATE BIGFILE TABLESPACE omf_big_ts DATAFILE SIZE 500M; -- 创建临时表空间 CREATE TEMPORARY TABLESPACE omf_temp TEMPFILE SIZE 200M; -- 创建撤销表空间 CREATE UNDO TABLESPACE omf_undo DATAFILE SIZE 300M;

11.4 OMF表空间的维护

-- 为OMF表空间添加数据文件(Oracle自动命名) ALTER TABLESPACE omf_ts ADD DATAFILE SIZE 100M; -- 删除OMF表空间(Oracle自动删除对应的数据文件) DROP TABLESPACE omf_ts INCLUDING CONTENTS AND DATAFILES; -- 将OMF表空间的数据文件移动到新位置 -- 1. 先获取OMF生成的完整文件名 SELECT file_name FROM dba_data_files WHERE tablespace_name = 'OMF_TS'; -- 2. 离线表空间并移动文件,然后使用RENAME命令更新,与常规数据文件重命名一样

11.5 OMF的优势与注意事项

优势 说明
简化管理 无需手动管理文件名和路径
自动清理 删除表空间时自动删除对应的数据文件
减少错误 避免因路径或文件名错误导致的问题

注意:OMF模式下创建的表空间,数据文件位置由 DB_CREATE_FILE_DEST 参数决定,不能通过 CREATE TABLESPACE 语句指定其他位置。

十二、表空间备份和恢复

实际生产环境中,很少单独备份表空间,一般都是全库备份+增量归档备份为主!了解即可

12.1 使用RMAN备份表空间

-- 连接RMAN rman target / -- 备份指定表空间 RMAN> BACKUP TABLESPACE tablespace_name; -- 备份表空间并同时备份归档日志 RMAN> BACKUP TABLESPACE tablespace_name PLUS ARCHIVELOG DELETE INPUT; -- 备份多个表空间 RMAN> BACKUP TABLESPACE users, app_data, hr_data;

12.2 使用RMAN恢复表空间

-- 恢复表空间 RMAN> RESTORE TABLESPACE tablespace_name; RMAN> RECOVER TABLESPACE tablespace_name; -- 恢复并重新联机 RMAN> RESTORE TABLESPACE tablespace_name; RMAN> RECOVER TABLESPACE tablespace_name; RMAN> ALTER TABLESPACE tablespace_name ONLINE;

12.3 传输表空间

-- 生成可传输表空间集合 RMAN> TRANSPORT TABLESPACE tablespace_name TABLESPACE DESTINATION '/destination_path';

十三、表空间常用查询语句

13.1 查看所有表空间和大小

-- 查看所有表空间名称 SELECT tablespace_name FROM dba_tablespaces; -- 查看表空间详细信息 SELECT tablespace_name, status, contents, bigfile FROM dba_tablespaces; -- 查看各表空间的大小 SELECT tablespace_name, round(sum(bytes )/ (1024 * 1024), 0) AS size_mb FROM dba_data_files group BY tablespace_name;

13.2 查看表空间数据文件

SELECT tablespace_name, file_id, file_name, ROUND(bytes / (1024 * 1024), 0) AS size_mb, autoextensible,ROUND(maxbytes / (1024 * 1024), 0) AS maxsize_mb FROM dba_data_files ORDER BY tablespace_name;

13.3 查看表空间使用情况(含使用率)

set linesize 200 set pagesize 2000 set time on set timing on col tablespace_name for a20 SELECT df.tablespace_name, COUNT(*) file_cnt, trunc(nvl(SUM(df.BYTES),0) / 1024 / 1024/ 1024, 2) totol_mb, trunc(nvl(SUM(free.BYTES),0) / 1024 / 1024/ 1024, 2) free_mb, trunc(nvl(SUM(df.BYTES),0) / 1024 / 1024/ 1024 - nvl(SUM(free.BYTES),0) / 1024 / 1024/ 1024, 2) used_mb, trunc(100 * (nvl(SUM(df.BYTES) - SUM(free.BYTES),0)) / nvl(SUM(df.BYTES),1), 2) pct_used, trunc(nvl(sum ( case when df.autoextensible='YES' then df.maxbytes else df.BYTES end) ,0) / 1024 / 1024/ 1024, 2) totol_max_mb, trunc(100 * (nvl(SUM(df.BYTES) - SUM(free.BYTES),0)) / nvl(sum(case when df.autoextensible='YES' then df.maxbytes else df.BYTES end),1), 2) pct_used_max FROM dba_data_files df, (SELECT tablespace_name, file_id, nvl(SUM(BYTES), 0) BYTES FROM dba_free_space where bytes > 1024 * 1024 GROUP BY tablespace_name, file_id) free WHERE df.tablespace_name = free.tablespace_name(+) AND df.file_id = free.file_id(+) and df.tablespace_name not like 'UNDO%' GROUP BY df.tablespace_name ORDER BY 6 desc; 备注: totol_max_mb表示如果数据文件打开自动扩属性,以可以扩展的最大大小,来统计数据文件大小,进而计算表空间的最大大小! pct_used_max表示,表空间最大大小为基准,来计算表空间使用率 bytes > 1024 * 1024 表示去掉1M以下的空闲空间,因为有时候会空间虽然够,但是还是说无法分配足够的空间 另一个简便的语法: SELECT df.tablespace_name, file_cnt, totol_gb, max_totol_gb, totol_gb-nvl(free_gb,0) used_gb, nvl(free_gb,0) as "FREE_GB", trunc(100 * (totol_gb- nvl(free_gb,0))/totol_gb,2) pct_used, trunc(100 * (totol_gb- nvl(free_gb,0))/max_totol_gb,2) pct_used_max FROM (SELECT tablespace_name, count(*) file_cnt, round(nvl(SUM(bytes)/1024/1024/1024,0),3) AS totol_gb, round(nvl(SUM(GREATEST(maxbytes, bytes))/1024/1024/1024,0),3) AS max_totol_gb FROM dba_data_files GROUP BY tablespace_name) df, (SELECT tablespace_name, round(nvl(SUM(BYTES)/1024/1024/1024, 0),3) free_gb FROM dba_free_space where bytes > 1024 * 1024 GROUP BY tablespace_name) free WHERE df.tablespace_name = free.tablespace_name(+) ORDER BY 7 desc;

13.4 查看表空间中各数据文件的使用情况

SELECT file_name, ROUND(df.bytes / (1024 * 1024), 0) AS total_mb, ROUND((df.bytes - SUM(fs.bytes)) / (1024 * 1024), 0) AS used_mb, ROUND(SUM(fs.bytes) / df.bytes * 100, 2) AS free_pct FROM dba_data_files df, dba_free_space fs WHERE df.file_id = fs.file_id GROUP BY file_name, df.bytes;

13.5 查看默认表空间

SELECT property_name, property_value FROM database_properties WHERE property_name IN ('DEFAULT_PERMANENT_TABLESPACE', 'DEFAULT_TEMP_TABLESPACE');

13.6 查看用户的默认表空间

SELECT username, default_tablespace, temporary_tablespace FROM dba_users WHERE username = 'USERNAME';

十四、表空间常见错误

14.1 ORA-01653:无法扩展表段

错误信息

ORA-01653: unable to extend table table_name by 128 in tablespace tablespace_name

原因:表空间已满,无法为表段分配新的区段

解决方法

-- 扩容表空间 ALTER TABLESPACE tablespace_name ADD DATAFILE 'new_file.dbf' SIZE 1G; -- 或调整现有文件大小 ALTER DATABASE DATAFILE 'existing_file.dbf' RESIZE 2G;

14.2 ORA-01652:无法扩展临时段

错误信息

ORA-01652: unable to extend temp segment by 256 in tablespace TEMP

原因:临时表空间已满

解决方法

-- 为临时表空间添加临时文件 ALTER TABLESPACE temp ADD TEMPFILE '/u01/app/oracle/oradata/mydb/temp02.dbf' SIZE 500M; -- 或调整临时文件大小 ALTER DATABASE TEMPFILE '/u01/app/oracle/oradata/mydb/temp01.dbf' RESIZE 2G;

14.3 ORA-03262:数据文件非空

错误信息

ORA-03262: the file is non-empty

原因:尝试删除的数据文件中还存在已分配的对象

解决方法

  1. 将数据文件中的对象移动到其他数据文件
  2. 确认数据文件确实为空后再执行删除

14.4 ORA-03249:不支持在大文件表空间上使用DROP DATAFILE

错误信息

ORA-03249: DROP DATAFILE not allowed for bigfile tablespace

原因:大文件表空间只有一个数据文件,不支持删除数据文件操作

解决方法:删除整个表空间而非单个数据文件

DROP TABLESPACE big_ts INCLUDING CONTENTS AND DATAFILES;

14.5 表空间无法联机

可能原因

  • 数据文件丢失或损坏
  • 需要介质恢复

解决方法

  1. 检查数据文件是否存在
  2. 使用RMAN进行恢复
  3. 如果数据文件已损坏且无法恢复,可考虑离线删除该数据文件

14.6 ORA-00376:文件无法读写

错误信息

ORA-00376: file file_id cannot be read at this time

原因:数据文件处于离线状态

解决方法

-- 恢复数据文件联机 ALTER DATABASE DATAFILE 'file_path' ONLINE;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论