跳到主要内容

表空间操作

表空间查询

select  tablespace_name         "Tablespace",
bytes/1024/1024 "Size",
nvl(bytes-free,bytes)/1024/1024 "Used",
nvl(free,0)/1024/1024 "Free",
nvl(100*(bytes-free)/bytes,100) "% Used"
from(
select ddf.tablespace_name, sum(dfs.bytes) free, ddf.bytes bytes
FROM (select tablespace_name, sum(bytes) bytes
from dba_data_files group by tablespace_name) ddf, dba_free_space dfs
where ddf.tablespace_name = dfs.tablespace_name(+)
group by ddf.tablespace_name, ddf.bytes)
order by 5 desc;

要以MBytes为单位查询Oracle数据库中表空间的使用情况(包含最大表空间),您可以修改上面的SQL查询语句如下:

SELECT tablespace_name, 
ROUND((total_space - free_space) / 1024 / 1024, 2) AS used_space_MB,
ROUND(total_space / 1024 / 1024, 2) AS total_space_MB,
ROUND((total_space - free_space) / total_space * 100, 2) AS used_percent,
ROUND(max_space / 1024 / 1024, 2) AS max_space_MB
FROM
(SELECT tablespace_name,
SUM(decode(autoextensible,'YES',maxbytes,bytes)) AS max_space,
SUM(bytes) AS total_space,
SUM(decode(autoextensible,'YES',(CASE WHEN maxbytes - bytes > 0 THEN maxbytes - bytes ELSE 0 END),0)) AS free_space
FROM dba_data_files
GROUP BY tablespace_name)
ORDER BY used_percent DESC;

以上查询将返回每个表空间的名称、已用空间(以MB为单位)、总空间(以MB为单位)、使用率(以百分比表示)和最大可用空间(以MB为单位)。

数据文件查询

select name from v$datafile;

扩展表空间

增加数据文件

alter  tablespace SYSTEM  add datafile '/oradata/testdb/test09.dbf' size 3G autoextend on maxsize 30G;

alter tablespace TEST add datafile '/oradata2/testdb/testdb014.dbf' size 10G autoextend on maxsize 30G;

要查看Oracle表空间以自增长最大空间为分母的使用率,可以执行以下步骤:

  1. 使用系统管理员(sys)或具有SELECT_CATALOG_ROLE权限的用户登录到Oracle数据库。

  2. 运行以下SQL查询语句:

    SELECT 
    tablespace_name,
    ROUND(((max_size - free_size) / max_size) * 100, 2) as used_percent
    FROM (
    SELECT
    fs.tablespace_name,
    SUM(fs.bytes) / 1024 / 1024 as free_size,
    SUM(decode(maxbytes, 0, fs.bytes, maxbytes)) / 1024 / 1024 as max_size
    FROM
    dba_free_space fs,
    dba_data_files df
    WHERE
    fs.file_id = df.file_id(+)
    GROUP BY
    fs.tablespace_name, df.maxbytes
    );

    这将返回一个结果集,其中包含每个表空间的名称和以自增长最大空间为分母的使用率百分比。

    注意:在这个查询中,我们假设已经启用了自动扩展数据文件的功能,并且 maxbytes 已经设置为零。如果您的环境中没有使用这种配置,则需要进行适当的更改。

通过运行这个查询,您就可以得到每个表空间的使用情况,并查看是否需要调整表空间大小或添加更多的数据文件。

要查看Oracle数据库中表空间是否开启自动扩展(自增长)功能,可以执行以下步骤:

  1. 使用系统管理员(sys)或具有SELECT_CATALOG_ROLE权限的用户登录到Oracle数据库。

  2. 运行以下SQL查询语句:

    SELECT 
    tablespace_name,
    autoextensible
    FROM
    dba_data_files;

    这将返回所有表空间的名称和它们是否已启用自动扩展功能的信息。

    如果 autoextensible 的值为 YES,则表示该表空间已经启用了自动扩展功能。如果该值为 NO,则表示该表空间未启用自动扩展功能。

您还可以通过运行以下查询来检查某个特定表空间是否已经启用了自动扩展功能:

SELECT 
file_name,
autoextensible
FROM
dba_data_files
WHERE
tablespace_name = 'SYSTEM';
警告

注意:在Oracle数据库中,默认情况下,数据文件是不会自动扩展的。要启用自动扩展功能,您需要手动更改数据文件的设置。

要查看Oracle数据库中表空间数据文件的最大大小(MAXSIZE),可以执行以下步骤:

  1. 使用系统管理员(sys)或具有SELECT_CATALOG_ROLE权限的用户登录到Oracle数据库。

  2. 运行以下SQL查询语句:

    SELECT 
    tablespace_name,
    file_name,
    maxbytes / 1024 / 1024 AS max_size_MB
    FROM
    dba_data_files;

    这将返回所有表空间的名称、数据文件的名称以及它们的最大大小(以MB为单位)。

    如果 maxbytes 的值为0,则表示数据文件的大小没有限制,即可以无限扩展。如果 maxbytes 的值不为0,则表示数据文件的大小受到了限制,并且不能超过指定的最大值。

您还可以通过运行以下查询来检查某个特定表空间的数据文件的最大大小:

SELECT 
file_name,
maxbytes / 1024 / 1024 AS max_size_MB
FROM
dba_data_files
WHERE
tablespace_name = 'JYDB';

注意:在Oracle数据库中,默认情况下,数据文件的最大大小是没有限制的。如果您需要限制数据文件的大小,您可以使用 ALTER DATABASE DATAFILE 命令手动更改数据文件的设置。