我们的数据文件之一达到了 32G 的最大值。因此,我们在该表空间中创建了第二个数据文件。
但是,我们忘记给出默认的 NEXT 大小。因此,文件 1 的 NEXT 为 50MB。文件 2 的 NEXT 为 8k。
这些是本地管理的,所以,我猜唯一要做的就是创建一个新的表空间,然后移动所有对象。或者还有其他解决方案吗?一个问题:如何移动TYPES?我需要删除并重新创建那些吗?这将使很多事情无效......
有什么建议?我可以仅隔离该数据文件中的对象吗?
感谢您。
您应该始终首先查阅Oracle 文档。您要求的是一个简单的、涉及单个 SQL 命令的操作。您错过的关键知识是您不更改表空间,而是更改数据文件。
概念证明
首先,我将查询我的example表空间的块大小,因为我将使用该值来证明我的数据文件被正确更改。
SQL> select tablespace_name, block_size
SQL> from dba_tablespaces
SQL> where tablespace_name = 'EXAMPLE';
TABLESPACE_NAME BLOCK_SIZE
------------------------------ ----------
EXAMPLE 8192
Run Code Online (Sandbox Code Playgroud)
好的,tbs 使用 8KB 的块大小。
现在,我的example数据文件是什么样的?
SQL> select file_name, file_id, tablespace_name, autoextensible, increment_by * &example_tbs_block_size_b / 1048576 as increment_by_mbytes
SQL> from dba_data_files
SQL> where tablespace_name = 'EXAMPLE';
FILE_NAME FILE_ID TABLESPACE_NAME AUTOEXTENSIBLE INCREMENT_BY_MBYTES
---------------------------------- ---------- --------------- -------------- -------------------
D:\ORA\MY_CDB\MY_PDB\EXAMPLE01.DBF 10 EXAMPLE YES 1
Run Code Online (Sandbox Code Playgroud)
好的,我只看到一个自动扩展为 1MB 的数据文件。
现在更改数据文件...
SQL> alter database datafile 10 autoextend on next &target_autoextend maxsize unlimited;
Database altered
Run Code Online (Sandbox Code Playgroud)
并再次重新检查 tbs 数据文件
SQL> select file_name, file_id, tablespace_name, autoextensible, increment_by * &example_tbs_block_size_b / 1048576 as increment_by_mbytes
SQL> from dba_data_files
SQL> where tablespace_name = 'EXAMPLE';
FILE_NAME FILE_ID TABLESPACE_NAME AUTOEXTENSIBLE INCREMENT_BY_MBYTES
---------------------------------- ---------- --------------- -------------- -------------------
D:\ORA\MY_CDB\MY_PDB\EXAMPLE01.DBF 10 EXAMPLE YES 8
Run Code Online (Sandbox Code Playgroud)
而且,瞧,我有一个 8MB 的自动扩展。
| 归档时间: |
|
| 查看次数: |
10581 次 |
| 最近记录: |