AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 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

Encontrando extensões de segmentos Oracle BIN$

  • 772

Estou procurando informações sobre extensões de reciclagem.

Ao descartar uma tabela, seus segmentos são renomeados para nomes gerados pelo sistema 'BIN$...' e as extensões são ocultadas.

Essas extensões ainda me impedirão de reduzir um arquivo de dados (ou tablespace)? Se assim for, eu gostaria de explicá-los no script.

Atualmente estou usando uma consulta inspirada no maxshrink.sql do AskTom:

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;

Atualização : Inicialmente, minha pergunta também perguntou por que não vejo mais os segmentos 'BIN$' criados pelo Flashback Drop Table mais na versão 12.2. No entanto, isso foi um erro do meu lado, minhas tabelas de teste simplesmente não tinham segmentos para começar.

oracle shrink
  • 2 2 respostas
  • 1899 Views

2 respostas

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

    Você sabe desde quando esses segmentos estão ocultos (?), e existe uma maneira de realmente encontrar suas extensões?

    Você pode encontrar seus detalhes em *_SEGMENTSvisualizações/sinônimos.

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

    Essas extensões ainda me impedirão de reduzir um arquivo de dados (ou tablespace)?

    Sim, eles podem impedir que você reduza os arquivos de dados. Tabelas descartadas e quaisquer objetos associados, como índices, restrições, tabelas aninhadas e outros objetos dependentes não são movidos, eles são simplesmente renomeados com um prefixo de BIN$.

    Considere o seguinte exemplo (é apenas para fins de demonstração).

    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.
    

    Hm, no meu sistema 12.2 não vejo segmentos BIN$ nas visualizações *_SEGMENTS (com SYS como usuário SYSDBA). E acho que eles nunca apareceram em *_EXTENTS, ou?

    Não há lixeira para privilégio SYSDBA.

    Cada usuário pode ser considerado como tendo sua própria lixeira, pois a menos que um usuário tenha o privilégio SYSDBA, os únicos objetos aos quais o usuário tem acesso na lixeira são aqueles que o usuário possui. O que é Lixeira?

    • 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
    

    Removendo (comentando) o filtro da parte relevante da definição dos DBA_EXTENTSobjetos descartados dos filtros:

    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

relate perguntas

  • Backups de banco de dados no Oracle - Exportar o banco de dados ou usar outras ferramentas?

  • ORDER BY usando prioridades personalizadas para colunas de texto

  • Interface sqlplus confortável? [fechado]

  • Como encontrar as instruções SQL mais recentes no banco de dados?

  • Como posso consultar nomes usando expressões regulares?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

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

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve