Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
oracle 10G收缩数据文件_Oracle_Oracle10g - Fatal编程技术网

oracle 10G收缩数据文件

oracle 10G收缩数据文件,oracle,oracle10g,Oracle,Oracle10g,如何在oracle 10G中收缩数据文件?对于oracle中的标准数据文件,您不能收缩它们。您必须执行以下操作: 将段移动到另一个表空间,或导出并删除它们 删除数据文件 创建一个新的较小的数据文件 将段移回第一个表,或从转储文件导入 对于“bigfile”表空间——也就是说创建bigfile表空间是用来创建它的——您可以使用altertablespace。。调整大小…对于Oracle中的标准数据文件,不能收缩它们。您必须执行以下操作: 将段移动到另一个表空间,或导出并删除它们 删除数据文件 创建

如何在oracle 10G中收缩数据文件?

对于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 Glendenning

    ALTER表空间…仅允许在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
    
    但是数据文件中的其他空闲块呢??它们不可用于其他数据文件