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

To report this post you need to login first.

Be the first to leave a comment

You must be Logged on to comment or reply to a post.

Leave a Reply