oracle 10G收缩数据文件
如何在oracle 10G中收缩数据文件?对于oracle中的标准数据文件,您不能收缩它们。您必须执行以下操作:oracle 10G收缩数据文件,oracle,oracle10g,Oracle,Oracle10g,如何在oracle 10G中收缩数据文件?对于oracle中的标准数据文件,您不能收缩它们。您必须执行以下操作: 将段移动到另一个表空间,或导出并删除它们 删除数据文件 创建一个新的较小的数据文件 将段移回第一个表,或从转储文件导入 对于“bigfile”表空间——也就是说创建bigfile表空间是用来创建它的——您可以使用altertablespace。。调整大小…对于Oracle中的标准数据文件,不能收缩它们。您必须执行以下操作: 将段移动到另一个表空间,或导出并删除它们 删除数据文件 创建
对于“bigfile”表空间——也就是说创建bigfile表空间是用来创建它的——您可以使用altertablespace。。调整大小…对于Oracle中的标准数据文件,不能收缩它们。您必须执行以下操作:
对于“bigfile”表空间——也就是说创建bigfile表空间是用来创建它的——您可以使用altertablespace。。调整大小…注意:除了个人安装,我不是Oracle系统管理员。我说的每句话都要恕我直言 我假设您使用自动扩展创建了数据文件,并且它们已经扩展到您认为应该包含的范围之外。有一个ALTER DATABASE子句将调整文件大小,以下是Oracle SQL参考中的示例:
ALTER DATABASE
DATAFILE 'diskb:tbs_f5.dat' RESIZE 10 M;
但是,我真的不认为您想盲目地这样做。IMO的一个更好的方法是使用export命令转储该数据文件中的表,然后重新创建表空间。注意:我不是Oracle系统管理员,只是个人安装。我说的每句话都要恕我直言 我假设您使用自动扩展创建了数据文件,并且它们已经扩展到您认为应该包含的范围之外。有一个ALTER DATABASE子句将调整文件大小,以下是Oracle SQL参考中的示例:
ALTER DATABASE
DATAFILE 'diskb:tbs_f5.dat' RESIZE 10 M;
但是,我真的不认为您想盲目地这样做。IMO的一个更好的方法是使用export命令转储该数据文件中的表,然后重新创建表空间。这里有一种方法,由Tom Kyte提供,可以获得数据库的块大小,列出您可以回收的空间,并构建更改。。。用于实际执行数据库收缩的命令。希望这有帮助
克雷格·格伦登宁(Craig Glendanning)汤姆·凯特(Tom Kyte)提供了一种方法,可以得到数据库的块大小,列出您可以回收的空间,并构建alter。。。用于实际执行数据库收缩的命令。希望这有帮助
Craig GlendenningALTER表空间…仅允许在HWM之外调整大小。因此,它下面可能有许多未使用的分段。在此操作之前,请发出以下命令: 改变表格。缩小该表空间/数据文件的某些表上的空间,以便重新组织数据文件的内容
这可能是一项很长的任务,但您可以使用SQL生成命令。ALTER TABLESPACE…RESIZE仅允许超出HWM。因此,它下面可能有许多未使用的分段。在此操作之前,请发出以下命令: 改变表格。缩小该表空间/数据文件的某些表上的空间,以便重新组织数据文件的内容
这可能是一项很长的任务,但您可以使用SQL生成命令。@Dave关于导出和导入的回答是正确的,也是释放空间的最佳选择。 在Oracle中也没有shrink命令,@Dave是正确的,但是存在resize命令,正如@David所说的“数据文件可以调整大小到最后使用的块”,但是有一件事值得一提,数据文件中的空闲块可以这样分配
0101000001111000000000000000000001110000000000
|---------
其中:
0-1是自由块
1-是块使用的
通过调整数据文件的大小直到最后使用的块,它将变成:
010100000111100000000000000000000111
|---------
1111111111111100000000000000000
但是数据文件中的其他空闲块呢??它们不可用于其他数据文件或系统本身
如果数据文件是这样的:
010100000111100000000000000000000111
|---------
1111111111111100000000000000000
然后调整大小将是有用的,但不是在以前的变体中
无论如何,要确定数据文件的大小,请使用以下脚本:
select 'alter database '||a.name||' datafile '''||b.file_name||'''' ||
' resize '||greatest(trunc(bytes_full/.7)
,(bytes_total-bytes_free))||chr(10)||
'--tablespace was '||trunc(bytes_full*100/bytes_total)||
'% full now '||
trunc(bytes_full*100/greatest(trunc(bytes_full/.7)
,(bytes_total-bytes_free)))||'%'
from v$database a
,dba_data_files b
,(Select tablespace_name,sum(bytes) bytes_full
From dba_extents
Group by tablespace_name) c
,(Select tablespace_name,sum(bytes) bytes_total
From dba_data_files
Group by tablespace_name) d
,(Select a.tablespace_name,a.file_id,b.bytes bytes_free
From (select tablespace_name,file_id
,max(block_id) max_data_block_id
from dba_extents
group by tablespace_name,file_id) a
,dba_free_space b
where a.tablespace_name = b.tablespace_name
and a.file_id = b.file_id
and b.block_id > a.max_data_block_id) e
Where b.tablespace_name = c.tablespace_name
And b.tablespace_name = d.tablespace_name
And bytes_full/bytes_total < .7
And b.tablespace_name = e.tablespace_name
And b.file_id = e.file_id
选择“更改数据库”|| a.name | | |“数据文件”| | b.file | u name |”||
“调整大小”| |最大(trunc(字节_-full/.7)
,(总字节数-空闲字节数)chr(10)||
“--表空间为”| | trunc(字节数*100/字节总数)||
“%现在已满”||
trunc(字节满*100/最大值)(trunc(字节满/.7)
,(总字节数-空闲字节数))| |'%'
从v$a数据库
,dba_数据_文件b
,(选择表空间\名称,总和(字节)字节\已满
从dba_扩展数据块
按表空间分组(U名称)c
,(选择表空间\名称,总和(字节)字节\总计
从dba_数据_文件
按表空间分组(U名称)d
,(选择a.tablespace\u name、a.file\u id、b.bytes\u free
从(选择表空间名称、文件id
,max(块id)max\u数据块id
从dba_扩展数据块
按表空间\u名称、文件\u id)分组a
,dba_自由空间b
其中a.tablespace\u name=b.tablespace\u name
a.file\u id=b.file\u id
和b.block_id>a.max_data_block_id)e
其中b.tablespace\u name=c.tablespace\u name
和b.tablespace\u name=d.tablespace\u name
和字节数/总字节数<.7
和b.tablespace\u name=e.tablespace\u name
b.file\u id=e.file\u id
不要担心,这个脚本不会从数据文件中剪切任何使用过的块 Dave关于导出和导入的回答是正确的,也是释放空间的最佳选择。 在Oracle中也没有shrink命令,@Dave是正确的,但是存在resize命令,正如@David所说的“数据文件可以调整大小到最后使用的块”,但是有一件事值得一提,数据文件中的空闲块可以这样分配
0101000001111000000000000000000001110000000000
|---------
其中:
0-1是自由块
1-是块使用的
通过调整数据文件的大小直到最后使用的块,它将变成:
010100000111100000000000000000000111
|---------
1111111111111100000000000000000
但是数据文件中的其他空闲块呢??它们不可用于其他数据文件