Построение списка всех сегментов баз данных, находящихся на всех устройствах сервера

Приведенный ниже командный файл помещает в базу данных sybsystemprocs хранимую процедуру p_servermap, которая выдает полный список всех сегментов различных баз данных, находящихся на дисковых устройствах сервера. Процедура p_servermap также играет существенную роль при выполнении командного файла dump_systables.

В ее выдаче последовательно перечисляются все серверные устройства, на которых есть хотя бы один сегмент произвольной базы данных, и для каждого такого устройства выдается список всех находящихся на нем сегментов баз данных с указанием кодов и размеров сегментов, а также общего пространства устройства, занятого сегментами баз данных.

В сочетании с процедурами p_mirror и p_devspace процедура p_servermap позволяет составить детальную схему использования всего дискового пространства сервера. Отметим, что, поскольку код сегмента уникален только в пределах одной базы данных, для получения информации о названиях пользовательских сегментов, соответствующих определенному коду в конкретной базе данных, необходимо выполнить следующие команды:

Isql -Usa -S<имя_сервера> -Р
use <имя_базы_данных>
до
select * from syssegments
до

Важно подчеркнуть, что процедура p_servermap не сообщает никакой информации о серверных устройствах, которым еще не назначено ни одного сегмента баз данных. Для получения полного списка серверных устройств используйте /процедуру p_devspace. Подобно другим хранимым процедурам, изменение названия процедуры p_servermap на sp_servermap позволит вызывать ее из любой базы данных, а следующая команда сделает рассматриваемую процедуру доступной для пользователей, не являющихся администраторами сервера:

grant execute on p_servermap to public

Порядок ручного вызова процедуры p_servermap:

Isql -Usa -S<имя_сервера> -Р
use sybsystemprocs
go
p_servermap
go
use sybsystemprocs
go
# Сначала получим список серверных устройств. Затем для каждого устройства выберем из таблицы sysusages необходимую информацию и поместим ее во временную таблицу #smap.
create procedure p_servermap as
select device_name =substring( sysdev.name,1,11) ,
database_name=substring(sysdb.name,1,20),
seg#=substring( convert (char (4) , sysuse.segmap),1,4),
size_Mb = substring (convert (char(7),sysuse. size/512),1,7)
into #smap
from sysdevices sysdev,
sysdatabases sysdb,
sysusages sysuse
where
sysdev.cntrltype = 0
and
sysuse.vstart
between
sysdev. low
and
sysdev.high
and
sysuse.dbid = sysdb.dbid
# Используя информацию из таблицы #smap, подведем итог по каждой базе данных, сегменту и коду сегмента на каждом устройстве, сохранив результат в таблице #smap2. Таким образом, мы объединим информацию, которая относится к разрозненным фрагментам одного и того же сегмента, находящимся на одном и том же устройстве.
select device_name,database_name,
seg#, space_per_seg=sum( convert (int ,size_Mb) )
into #smap2
from #smap
group by device_name,database_name,seg#
# Теперь займемся анализом кодов сегментов segmap. Значения segmap в диапазоне от 1 до 7 имеют одинаковый смысл во всех базах данных, в то время как последующие значения указывают на присутствие сегментов, определенных пользователями. Названия этих сегментов можно узнать из таблицы syssegments соответствующей базы данных.
# Отметим, что в SQL Server System 10 база данных аудита (sybsecurity) содержит сегмент auditsegment с кодом segmap = 8.
# Поскольку все сегменты sybsecurity должны находиться на одном серверном устройстве вместе с сегментами system (segmap = 1), default (segmap = 2) и logsegment (segmap =4), поле segmap каждого экстента базы данных sybsecurity получает значение, равное 15 (segmap = 1 + 2 + 4 + 8 ) .
set nocount on
select "segmap values 1 through 1
seg# and segment name
1 — system
2 # default
3 — default/system
4 — log only
5 # log/system
6 — log/default
7 # log/system/default
8 — user defined
15 — audit/log/sys/def
16 — user defined"
set nocount off
# Окончательная выдача производится на основе информации из временной таблицы #smap2 с одновременным суммированием полного используемого дискового пространства каждого серверного устройства.
select device_name,database_name,
seg# , space_per_seg
from #smap2
order by device_name,database_name, seg#
compute sum(space_per_seg)
by device_name
return
go

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100