AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 190494
Accepted
eckes
eckes
Asked: 2017-11-09 18:39:22 +0800 CST2017-11-09 18:39:22 +0800 CST 2017-11-09 18:39:22 +0800 CST

查找 Oracle BIN$ 段的范围

  • 772

我正在寻找有关回收站范围的信息。

删除表时,其段被重命名为“BIN$...”系统生成的名称,并且范围被隐藏。

这些范围仍然会阻止我缩小数据文件(或表空间)吗?如果是这样,我想在脚本中说明它们。

目前我正在使用受 AskTom 的 maxshrink.sql 启发的查询:

select tbs.TABLESPACE_NAME, df.FILE_NAME,
    round(MAX(e.BLOCKS+e.BLOCK_ID+1)*tbs.BLOCK_SIZE/1024/1024,2) "MinMB",
    round(MAX(df.BYTES)/1024/1024,2) "FileMB"
  from DBA_TABLESPACES tbs
  LEFT JOIN DBA_DATA_FILES df on tbs.TABLESPACE_NAME = df.TABLESPACE_NAME
  LEFT JOIN DBA_EXTENTS e on df.FILE_ID = e.FILE_ID AND df.RELATIVE_FNO = e.RELATIVE_FNO
  -- WHERE
  --   tbs.TABLESPACE_NAME like 'MY%'
  GROUP BY df.FILE_ID, df.RELATIVE_FNO, tbs.TABLESPACE_NAME, tbs.BLOCK_SIZE, df.FILE_NAME
  ORDER BY 1,2;

更新:最初我的问题还问我为什么在 12.2 中不再看到由 Flashback Drop Table 创建的“BIN$”段。然而,这对我来说是一个错误,我的测试表根本没有开始的段。

oracle shrink
  • 2 2 个回答
  • 1899 Views

2 个回答

  • Voted
  1. atokpas
    2017-11-09T20:07:24+08:002017-11-09T20:07:24+08:00

    你知道从什么时候开始隐藏这些段(?),有没有办法真正找到它们的范围?

    *_SEGMENTS您可以从视图/同义词中找到它们的详细信息。

    SQL> select bytes from user_segments where segment_name='BIN$XYbYSYopQFTgUzIUqMA4vA==$0';
    
         BYTES
    ----------
         65536
    

    这些范围仍然会阻止我缩小数据文件(或表空间)吗?

    是的,它们可能会阻止您缩小数据文件。删除的表和任何关联对象(例如索引、约束、嵌套表和其他依赖对象)不会移动,它们只是用前缀重命名BIN$。

    考虑以下(仅用于演示目的)示例。

    SQL> conn sys@orclpdb as sysdba
    Enter password:
    Connected.
    SQL> create tablespace tbs1 datafile size 1M;
    
    Tablespace created.
    
    SQL> alter user jay quota unlimited on tbs1;
    
    User altered.
    
    SQL> create table t1(id number, col1 varchar2(100)) tablespace tbs1;
    
    Table created.
    
    SQL> insert into t1 select level, 'dsfldshfkjdhsfkdshfdklsjfhdkhfdks'||level 
         from dual connect by level<=1000;
    
    1000 rows created.
    
    SQL> commit;
    
    Commit complete.
    
    SQL> select bytes from user_segments where segment_name='T1';
    
         BYTES
    ----------
        983040
    
    SQL> conn sys@orclpdb as sysdba
    Enter password:
    Connected.
    
    SQL> select ts#, name from v$tablespace;
    
           TS# NAME
    ---------- ------------------------------
            10 TBS1
    
    1 rows selected.
    
    SQL> select bytes from v$datafile where ts#=10;
    
         BYTES
    ----------
       1048576
    
    SQL> select file# from v$datafile where ts#=10;
    
         FILE#
    ----------
            55
    
    SQL> conn jay@orclpdb
    Enter password:
    Connected.
    SQL> drop table t1;
    
    Table dropped.
    
    SQL> select object_name from recyclebin;
    
    OBJECT_NAME
    --------------------------------------------------------------------------------
    BIN$XYY3afBNKwPgUzIUqMAIkA==$0
    BIN$XYYmdj0XKLjgUzIUqMB2iA==$0
    
    SQL> conn sys@orclpdb as sysdba
    Enter password:
    Connected.
    SQL> alter database datafile 55 resize 512K;
    alter database datafile 55 resize 512K
    *
    ERROR at line 1:
    ORA-03297: file contains used data beyond requested RESIZE value
    
    SQL> conn jay@orclpdb
    Enter password:
    Connected.
    SQL> purge recyclebin;
    
    Recyclebin purged.
    
    SQL> conn sys@orclpdb as sysdba
    Enter password:
    Connected.
    SQL> alter database datafile 55 resize 512K;
    
    Database altered.
    

    嗯,在我的 12.2 系统上,我在 *_SEGMENTS 视图中看不到 BIN$ 段(SYS 作为 SYSDBA 用户)。而且我认为他们从未出现在 *_EXTENTS 中,或者?

    SYSDBA 权限没有回收站。

    可以认为每个用户都有自己的回收站,因为除非用户具有 SYSDBA 权限,否则用户可以访问回收站中的唯一对象是用户拥有的对象。 什么是回收站?

    • 2
  2. Best Answer
    Balazs Papp
    2017-11-10T04:38:01+08:002017-11-10T04:38:01+08:00
    create table bp.t1 as select * from dba_users;
    drop table bp.t1;
    
    select owner, object_name, original_name from dba_recyclebin where owner = 'BP';
    
    OWNER OBJECT_NAME                     ORIGINAL_NAME
    ----- ------------------------------- -------------
    BP    BIN$XY0E/EKVFyXgU0cBqMCr3Q==$0  T1           
    
    select * from dba_extents where owner = 'BP';
    
    no rows selected
    

    DBA_EXTENTS从过滤器丢弃对象的定义的相关部分中删除(注释掉)过滤器:

    select
      ds.owner, ds.segment_name, ds.partition_name, ds.segment_type,
      ds.tablespace_name,
      e.ktfbueextno, f.file#, e.ktfbuebno,
      e.ktfbueblks * ds.blocksize, e.ktfbueblks, e.ktfbuefno
    from
      sys.sys_dba_segs ds, sys.x$ktfbue e, sys.file$ f
    where
      e.ktfbuesegfno = ds.relative_fno
      and e.ktfbuesegbno = ds.header_block
      and e.ktfbuesegtsn = ds.tablespace_id
      and ds.tablespace_id = f.ts#
      and e.ktfbuefno = f.relfile#
      and bitand(NVL(ds.segment_flags, 0), 1) = 1
      --and bitand(NVL(ds.segment_flags,0), 65536) = 0
      and ds.owner = 'BP';
    
    OWNER SEGMENT_NAME                   PARTITION_NAME SEGMENT_TYPE       TABLESPACE_NAME KTFBUEEXTNO      FILE#  KTFBUEBNO E.KTFBUEBLKS*DS.BLOCKSIZE KTFBUEBLKS  KTFBUEFNO
    ----- ------------------------------ -------------- ------------------ --------------- ----------- ---------- ---------- ------------------------- ---------- ----------
    BP    BIN$XY0E/EKVFyXgU0cBqMCr3Q==$0                TABLE              USERS                     0          4        128                     65536          8          4
    
    • 1

相关问题

  • Oracle 中的数据库备份 - 导出数据库还是使用其他工具?

  • ORDER BY 使用文本列的自定义优先级

  • 舒服的sqlplus界面?[关闭]

  • 如何在数据库中找到最新的 SQL 语句?

  • 如何使用正则表达式查询名称?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve