在 Oracle 数据库中查看剩余表空间可以使用多种方法。以下是一些常用的 SQL 查询语句来查看表空间及其剩余空间:
### 方法一:使用 `DBA_DATA_FILES` 和 `DBA_FREE_SPACE`
这个方法通过联合 `DBA_DATA_FILES` 和 `DBA_FREE_SPACE` 视图来获取每个表空间的总大小和剩余空间。
```sql
SELECT
dfs.tablespace_name AS "Tablespace",
df.totalspace AS "Total MB",
dfs.freespace AS "Free MB",
(dfs.freespace / df.totalspace) * 100 AS "Free %"
FROM
(SELECT
tablespace_name,
SUM(bytes) / 1024 / 1024 AS totalspace
FROM
DBA_DATA_FILES
GROUP BY
tablespace_name) df,
(SELECT
tablespace_name,
SUM(bytes) / 1024 / 1024 AS freespace
FROM
DBA_FREE_SPACE
GROUP BY
tablespace_name) dfs
WHERE
df.tablespace_name = dfs.tablespace_name
ORDER BY
df.tablespace_name;
```
### 方法二:使用 `DBA_TABLESPACES` 和 `DBA_FREE_SPACE`
这个方法通过联合 `DBA_TABLESPACES` 和 `DBA_FREE_SPACE` 视图来获取每个表空间的剩余空间。
```sql
SELECT
t.tablespace_name AS "Tablespace",
(t.bytes / 1024 / 1024) AS "Total MB",
(f.bytes / 1024 / 1024) AS "Free MB",
((f.bytes / t.bytes) * 100) AS "Free %"
FROM
DBA_TABLESPACES t,
DBA_FREE_SPACE f
WHERE
t.tablespace_name = f.tablespace_name
ORDER BY
t.tablespace_name;
```
### 方法三:使用 `V$TABLESPACE` 和 `V$DATAFILE`
这个方法通过联合 `V$TABLESPACE` 和 `V$DATAFILE` 视图来获取每个表空间的总大小和剩余空间。
```sql
SELECT
v.tablespace AS "Tablespace",
(SUM(d.bytes) / 1024 / 1024) AS "Total MB",
(SUM(v.free_bytes) / 1024 / 1024) AS "Free MB",
((SUM(v.free_bytes) / SUM(d.bytes)) * 100) AS "Free %"
FROM
V$TABLESPACE v,
V$DATAFILE d
WHERE
v.ts# = d.ts#
GROUP BY
v.tablespace
ORDER BY
v.tablespace;
```
### 注意事项
- 执行这些查询需要相应的权限,通常需要 `DBA` 权限或被授予相关权限。
- 结果中的空间大小单位为 MB。
- `DBA_FREE_SPACE` 视图只显示自动管理的表空间(ANSI 标准的表空间)的空闲空间。
通过这些查询,你可以方便地查看 Oracle 数据库中各个表空间的剩余空间情况,从而进行有效的数据库管理和维护。