我创建一个表并用数据填充它:
create table tab
as
select 'value' || level val
from dual
connect by level <= 10000;
如果然后删除所有行并插入相同的数据:
delete from tab;
insert into tab
select 'value' || level val
from dual
connect by level <= 10000;
commit;
每次执行delete-然后-insert时,表大小都会增加。多次执行这些操作会使表增长到原来大小的许多
我从模式中删除了一堆旧数据,包括BLOB数据,然后我尝试缩小和压缩所有数据。我成功地缩小了所有表(启用行移动、收缩空间压缩、禁用行移动),除了存储在单独段上的一个BLOB列之外:
SELECT
segment_name,
SUM(bytes) / 1024 / 1024 / 1024 AS "GB_SIZE"
FROM
dba_segments
WHERE
owner = 'MY_OWNER'
GROUP BY
segment_name
ORDER BY
SUM(bytes) / 1024 / 1024 / 102
我不是DBA,但我必须解决这个问题。
我的Oracle 9i数据库中有两个永久表空间。一个用于表,另一个用于临时和撤消表空间以外的索引。
上周我遇到了例外
ORA-01654:无法在表空间<name of the index>中将索引<name of the Index tablespace>扩展128个。
我的表空间尺寸大大增加了。但我还是会犯这个错误。
我删除了很多数据,认为这会腾出一些空间。但那没什么用。
缩小表空间或调整永久表空间的数据文件大小会解决此问题吗?
此外,统计数据自3月份以来就没有收集过。收集最新的统计数字对我有帮助吗?
我为这个冗长的问题道歉。我正在努力学习很多动态,因为我已经成为事实上的SQL管理。我的任务是移动一个生产数据库到一个新的服务器。我的目标是进行完全备份,并在新服务器上恢复数据库。我的问题集中在缩小数据库的概念上。
我有一个大约3兆字节的生产数据库。有5张桌子不再需要了。这5个表加在一起几乎占700 for。我的想法是在完全备份之前删除这5个表,以节省相当大的空间(700 of )。我学得很快,这并不像听起来那么容易。我使用drop命令删除了5个表,但是后来学会了删除表实际上不会释放任何空间。为了释放空间,我必须缩小数据库。这就是我遇到矛盾意见的地方。我正在读你不想缩小数据库,除非你必须这样做。
我正在尝试通过copy命令将oracle表导出到本地postgresql转储中:
\copy (select * from remote_oracle_table) to /postgresql/table.dump with binary;
oracle表的大小是25G。然而,copy命令创建了一个50G的文件。这怎么可能呢?
我能够从远程oracle表中进行选择,因为我有oracle_fdw扩展。