Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member
0 Kudos

Este é um método para responder a pergunta “Quais objetos estão (possuem alocações) em um dispositivo de disco Y?” no SAP ASE 15.x e superior.

SAP ASE divide cada dispositivo de disco em 256 páginas de unidades de alocação, cada unidade de alocação consiste de 32 extensões, de 8 páginas cada.

Cada extensão pode ser alocada para apenas um “id” de índice e para apenas um “id” de objeto ou partição.

Um “id 0” de índice é usado para páginas contento dados reais e não chaves de indices. Já um “id 255” de índice é usado para dados do tipo “LOB” (“Large Objects”), ou seja, objetos contendo dados extensões, cujos tipos de dados podem ser, “text”, “image”,”unitext” e “java class”.

SAP ASE possue um comando não documentado chamado “dbcc usedextents” que reporta informações sobre cada estrutura das extensões de um banco de dados.

A saída para uma estrutura de extensões se parece com o seguinte exemplo:

====

set switch on 3604

go

dbcc usedextents(dbname,0,0)

go

[…]

Allocation bitmap: 0xff ( 2384 2385 2386

OAMPG: 328 Extent ID 2384 on allocation page 2304

Object ID is 5

Index ID is 0

Partition ID is 52387 2388 2389 2390 2391 )

Dealloc bitmap: 0x00 ( )

Forward bitmap: 0x00 ( )

Reserve bitmap: 0x00 ( )

status: 0x00 (EX_DEALL_NOSTATUS )

Sort bit is off

Reference bit is off

Spacebits bitmap: 0x88888888

Page: 2384 (0x08 (Less than 100% occupied))

Page: 2385 (0x08 (Less than 100% occupied))

Page: 2386 (0x08 (Less than 100% occupied))

Page: 2387 (0x08 (Less than 100% occupied))

Page: 2388 (0x08 (Less than 100% occupied))

Page: 2389 (0x08 (Less than 100% occupied))

Page: 2390 (0x08 (Less than 100% occupied))

Page: 2391 (0x08 (Less than 100% occupied))

Buddy Page for extent (se_extbuddypage): 0

[…]

====

Se você executar o comando “dbcc usedextents (<database_name>,0,0)” e salvar a saída em um arquivo, você pode filtrar informações como “extentid”, “object id” e “indexid” usando um simples “script” criado em “awk” como no exemplo abaixo:

====

isql -Usa -P  -o usedextents_output.txt << EOF

set switch on 3604

go

dbcc usedextents(mydatabase,0,0)

go

EOF

awk '$1=="OAMPG:" {printf ("%d\t", $5) }\

$1=="Object" {printf (" %d \t", $4)}\

$1=="Index" {printf (" %d \n", $4)}' usedextents_output.txt > usedextents_awk.txt

====

Esse “script” produz dados em forma tabular com uma linha por extensão

====

[…]

174064 591338140 2

174096 591338140 2

[…]

(extent 174064 is allocated to object  591338140 index 2)

====

Desta forma voce pode importar esses dados para uma tabela no SAP ASE e criar “queries” para responder perguntas como “Que tabelas estão no dispositivo de disco “datadev_1”

====

isql -Usa -P << EOF

use tempdb

go

create table usedextents (extent int, objectID int, indid tinyint)

go

exit

EOF

bcp tempdb..usedextents in usedextents_awk.txt -Usa -P -c

====

A “query” abaixo é para o SAP ASE 15.x ou superior, versões anteriores do SAP ASE usavam uma relação diferente entre as tabelas de sistema “sysusages” e “sysdevices”.

Quais tabelas de usuário no banco de dados “mydatabase” estão no dispositivo de disco “datadev1”?

====

declare @dbname varchar(255)

select  @dbname = "mydatabase" --  your db name here

declare @devicename  varchar(255)

select  @devicename = "datadev" -- your device name here

select distinct

    x.objectID as "objectID",

    object_name( objectID, db_id(@dbname) ) as "name"

from

    tempdb..usedextents x,

    master..sysusages u,

    master..sysdevices d

where

    u.dbid = db_id(@dbname)

and d.name = @devicename

and x.extent between u.lstart and (u.lstart+u.size)

and u.vdevno = d.vdevno

and x.objectID > 99 -- User tables only

order by

    object_name(x.objectID, db_id(@dbname))

====

Observação: Artigo original criado por bret.halford