DBMS 2

DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!

System stored procedure

DBMS 2
Sybase 가이드
DBA를 위한 가이드
System stored procedure
작성자
admin
작성일
2021-02-19 13:51
조회
1324

System stored procedure

sp_iqcheckdb
syntax

sp_iqcheckdb 'mode target [….] [resource resource-percent] ';


  • mode : allocation | check | verify | repair
  • target : database | table table-name | index index-name
  • resource-percent : 이 명령어를 위한 CPU 사용량을 제한하기 위한 쓰레드 수

데이터베이스의 모든 페이지를 디스크에서 메모리로 읽어 데이터베이스 할당정보의 일치성 오류(corrupt) 여부를 점검하며 mode 옵션에 따라 복구도 가능합니다.

수행된 결과는 저장되며 sp_iqdbstatistics의 실행에 의해 마지막으로 저장된 결과를 다시 볼 수 있습니다.

이 작업은 매우 많은 리소스와 시간을 소비하므로 실행하기 전에 충분히 숙지 하시고 사용하기 바랍니다.

정확한 결과를 얻기 위해서는 checkpoint를 먼저 실행하고 실행하십시오.

Mode별 점검되는 오류 및 속도는 아래 표와 같으니 실행할 때 주의 바랍니다.

Mode별 점검되는 오류 및 속도

예)

Mode별 점검되는 오류 및 속도 예시


sp_iqcheckoptions
syntax

sp_iqcheckoptions

사용자별, 옵션별 기본 값과 변경 값을 비교하여 옵션별, 사용자별로 정렬해서 다음과 같은 정보를 보여줍니다.

sp_iqcheckoptions 컬럼 이름별 설명

예)

sp_iqcheckoptions 예시


sp_iqcolumn
syntax

sp_iqcolumn [table-name ] , [table-owner];

sp_iqcolumn [table_name = ' table-name '] , [table_owner = ' table-owner' ];

시스템 테이블이 아닌 특정한 IQ영역의 사용자 테이블에 대한 다음과 같은 컬럼 정보를 출력합니다. 만약 파라미터가 생략되면 기본 값이 입력 파라미터로 전송됩니다.

sp_iqcolumn 컬럼 이름별 설명1

sp_iqcolumn 컬럼 이름별 설명2


예)

sp_iqcolumn 예시


sp_iqconnection
syntax

sp_iqconnection [conn-handle];

현재 IQ에 접속중인(혹은 특정한) 사용자에 대한 정보를 다음과 같이 출력합니다.

sp_iqconnection 컬럼 이름별 설명1

sp_iqconnection 컬럼 이름별 설명1


예)

sp_iqconnection 예시


sp_iqconstraint
syntax
sp_iqconstraint [table-name] , [column-name], [table-owner];
sp_iqconstraint [table_name = ' table-name' ] , [column_name = ' column-name' ],
[table_owner = ' table-owner' ];

시스템 테이블이 아닌 특정한 사용자 테이블에 대한 참조 무결성 제약조건(Referential Integrity constraint, 이하 RI) 정보를 다음과 같이 출력합니다.

sp_iqconstraint 컬럼 이름별 설명1

sp_iqconstraint 컬럼 이름별 설명2


예)

sp_iqconstraint 예시


sp_iqcontext
syntax

sp_iqcontext [conn-handle];

현재 IQ에서 실행중인 명령어, 접속중인

sp_iqcontext 컬럼 이름별 설명1

sp_iqcontext 컬럼 이름별 설명2


예)

sp_iqcontext 예시


sp_iqdbsize
syntax

sp_iqdbsize ;

현재 database에 대한 크기 정보를 다음과 같이 출력하지만 많은 리소스

sp_iqdbsize 컬럼 이름별 설명


예)

sp_iqdbsize 예시


sp_iqdbspace
syntax

sp_iqdbspace [dbspace-name];

각 dbspace에 대한 크기 정보를 다음과 같이 출력합니다.

sp_iqdbspace 컬럼 이름별 설명1

sp_iqdbspace 컬럼 이름별 설명2


예)

sp_iqdbspace 예시


sp_iqdbspaceinfo
syntax

sp_iqdbspace [dbspace-name];

각 dbspace에 대한 크기 정보를 다음과 같이 출력합니다.

sp_iqdbspaceinfo 컬럼 이름별 설명


예)

sp_iqdbspaceinfo 예시


sp_iqestspace
syntax

sp_iqestspace table-name, #-of-rows, iq-page-size;


  • table-name : 대상 테이블 이름, 이 테이블은 이미 존재해야 함
  • #-of-rows : 테이블에 입력될 예상 데이터 건수
  • iq-page-size : iq page size (65536 | 131072 | 262144 | 524288)

예상 데이터 건수의 데이터가 입력된다고 가정하고 대상 테이블의 크기를 예측합니다.

sp_iqestspace 컬럼 이름별 설명


예)

sp_iqestspace 예시


sp_iqindex
syntax
sp_iqindex [table-name] , [column-name], [table-owner];
sp_iqindex [table_name = ' table-name' ] , [column_name = ' column-name' ],
[table_owner = ' table-owner' ];

FP 인덱스를 포함하여 대상 테이블이 가지고 있는 모든 인덱스 정보를 다음과 같이 출력 합니다.

sp_iqindex 컬럼 이름별 설명


예)

sp_iqindex 예시


sp_iqindexfragmentation
syntax

sp_iqindexfragmentation ' table table-name [(index index-name)] ';

인덱스 내부 구조인 btree, bitmap, garray의 fragmentation에 대한 정보를 아래와 같이 출력합니다.

sp_iqindexfragmentation 컬럼 이름별 설명


예)

sp_iqindexfragmentation 예시


sp_iqindexinfo
syntax

sp_iqindexinfo 'database | [ table table-name | index index-name ]';

대상 object가 사용중인 dbspace와 그 크기 등을 다음과 같이 출력합니다.

sp_iqindexinfo 컬럼 이름별 설명


예)

sp_iqindexinfo 예시


sp_iqindexsize
syntax

sp_iqindexsize [ [table-owner.] table-name.] index-name ;

특정한 인덱스의 크기를 다음과 같이 출력합니다.

sp_iqindexsize 컬럼 이름별 설명


예)

sp_iqindexsize 예시


sp_iqlocks
syntax

sp_iqlocks [conn-handle,] [ [owner.] table-name,] [max-locks,] [sort-order] ;


  • conn-handle : 특정한 커넥션 ID로 이 값을 사용하면 해당 ID의 lock 정보만 출력
  • owner.table-name : 특정한 테이블로 이 값을 사용하면 해당 테이블의 lock 정보만 출력
  • max-locks : 출력을 원하는 최대 lock 건 수
  • sort-order : 출력시의 정열 방법으로 C면 Connection별로, T면 테이블 이름별로 정렬

sp_iqlocks 컬럼 이름별 설명


예)

sp_iqlocks 예시


sp_iqrebuildindex
syntax

sp_iqrebuildindex 'table-name','column column-name [ count ] | index index-name';;


  • column : 컬럼에 대한 FP 인덱스를 count에서 제시한 값으로 재생성
  • index : FP인덱스가 아닌 index-name에서 지정한 인덱스를 재생성

특정한 컬럼에 대한 FP 인덱스를 재생성 하거나 특정한 인덱스를 재생성 합니다.

FP인덱스를 재생성하는 경우에 현재 인덱스가 1byte FP 인 경우는 대상 컬럼의 카디날리티 정보에 따라 1byte FP만 가능합니다. 2byte FP인 경우는 대상 컬럼의 카디날리티에 따라 1byte FP 혹은 2byte FP로 달라질 수 있습니다.


예)
sp_iqrebuildindex 'employee', 'column emp_lname';
// employee 테이블 emp_lname 컬럼의 FP 인덱스를 재생성
// Minimize_Storage 값이 On인 경우 : FFP, FFFP, Flat FP 순으로 재생성 시도
// Minimize_Storage 값이 Off인 경우 : 현재 설정된 FP 종류에 따라 같은 인덱스 재생성
sp_iqrebuildindex 'employee', 'index emp_lname_LF';
// employee 테이블 emp_lname_LF 인덱스를 재생성
sp_iqrebuildindex 'employee', 'column emp_lname 20';
// employee 테이블 emp_lname 컬럼의 FP 인덱스를 IQ UNIQUE(20)으로 재생성

sp_iqrelocate
syntax

sp_iqrelocate ' database | table table-name | index index-name ';


  • database : 모든 object가 이동 대상
  • table : 특정한 테이블만 이동 대상
  • index : 특정한 인덱스만 이동 대상

relocate 모드 상태인 dbspace에 존재하는 대상 테이블 혹은 인덱스를 readwrite 모드의 다른 dbspace로 이동 합니다. 단, Main Store만 가능합니다.


예)

sp_iqrelocate 'database';


sp_iqspaceinfo
syntax

sp_iqspaceinfo ;

Object(table, index)별로 사용중인 dbspace의 block 수 정보를 다음과 같이 출력하지 만 많은 리소스, 시간이 소요되므로 주의하시기 바랍니다

sp_iqspaceinfo 컬럼 이름별 설명


sp_iqspaceinfo
예)

sp_iqspaceinfo 예시


sp_iqspaceinfo

Tip) 테이블별로 디스크 사용 정보 보기


create procedure sp_iqspaceinfo_table( in tablename_param char(257))
result ( Name varchar(128), NBlocks unsigned bigint, dbspace_name char(128))
begin
declare end_of_cursor exception for SQLSTATE '02000';
declare objname varchar(128);
declare numblocks bigint;
declare db_space varchar(128);
declare iqspace cursor for call sp_iqspaceinfo();
declare local temporary table iq_spaceinfo_table_temp (
Name varchar(128) null,
Blocks unsigned bigint null,
dbspacename varchar(128) null
) in SYSTEM on commit preserve rows;
open iqspace;
iqspaceloop:
LOOP
fetch next iqspace into objname, numblocks, db_space;
if SQLSTATE = end_of_cursor THEN
leave iqspaceloop;
end if;
insert into iq_spaceinfo_table_temp values ( objname, numblocks, db_space);
END LOOP iqspaceloop;
close iqspace;
select * from iq_spaceinfo_table_temp
where Name = tablename_param or
Name like tablename_param or
Name like tablename_param || '.%'
order by Name;
drop table iq_spaceinfo_table_temp;
end

sp_iqspaceused
syntax

sp_iqspaceused out mainKB, out mainKBUsed, out tempKB, out tempKBUsed ;

Main store와 Temp store의 전체 크기와 현재 사용중인 크기를 아래와 같이 Kbyte 형태의 output 파라미터 형태로 넘겨줍니다.

sp_iqspaceused 컬럼 이름별 설명


sp_iqspaceused
예)
out 파라미터 형태로 결과가 넘어오기 때문에 적절하RE mt UNSIGNED BIGINT;
DECLARE mu UNSIGNED BIGINT;
DECLARE tt UNSIGNED BIGINT;
DECLARE tu UNSIGNED BIGINT;
CALL sp_iqspaceused(mt,mu,tt,tu);
SELECT
cast(cast(mt/1024 as unsigned bigint) as varchar(10)) || ' MB' as MainStore,
cast(cast(mu/1024 as unsigned bigint) as varchar(10)) || ' MB' as MainUsed,
cast(cast(mu*100/mt as numeric(4,1)) as varchar(10)) || '%' as MainUsedRatio,
cast(cast(tt/1024 as unsigned bigint) as varchar(10)) || ' MB' as TempStore,
cast(cast(tu/1024 as unsigned bigint) as varchar(10)) || ' MB' as TempUsed,
cast(cast(tu*100/tt as numeric(4,1)) as varchar(10)) || '%' as TempUsedRatio;
END

sp_iqspaceused
예)

sp_iqspaceused 예시


sp_iqstatus
syntax

sp_iqstatus ;

현재 데이터베이스의 다음과 같은 상태를 출력합니다

sp_iqstatus 컬럼 이름별 설명


sp_iqstatus

system

sp_iqstatus 컬럼 이름별 설명1

sp_iqstatus 컬럼 이름별 설명2


예)

sp_iqstatus 예시


sp_iqtable
syntax
sp_iqtable [table-name] , [table-owner], [table-type] ;
sp_iqtable [table_name = ' table-name' ] , [table_owner = ' table-owner' ],
[table_type = ' SYSTEM | TEMP | VIEW | ALL | IQ ' ];

특정 테이블에 대한 다음과 같은 상태를 출력합니다

sp_iqtable 컬럼 이름별 설명


예)

sp_iqtable 예시


sp_iqtablesize
syntax

sp_iqtablesize [table-owner.] table-name ;

특정한 테이블의 크기를 다음과 같이 출력합니다.

sp_iqtablesize 컬럼 이름별 설명


예)

sp_iqtablesize 예시


sp_iqtransaction
syntax

sp_iqtransaction ;

현재의 트랜잭션과 버전에 대한 정보를 다음과 같이 출력합니다.

sp_iqtransaction 컬럼 이름별 설명1

sp_iqtransaction 컬럼 이름별 설명2


참고

sp_iqtransaction 참고사항


  • TxnID 456311에서 트랜잭션이 시작하고 CmtID 456312에서 발생한 작업을 commit을 하면 TxnID는 자동으로 456313가 됩니다.
  • TxnID 456311에 의해 만들어진 버전을 다른 connection에서 참조하지 않는다면 State는 APPLIED가 되고 다른 connection에서 참조하고 있다면 COMMITED가 되며, 다른 connection에서 commit 했을 때에야 비로소 APPLIED가 됩니다. 이렇게 트랜잭션이 발생하면 iqmsg log 에 " Txn 456311" 이라고 기록 됩니다.
  • TxnID 456311에서 발생되어진 명령어는 TxnID에 순차적으로 1씩 증가하여 자동으로 CmtID에 할당됩니다. 예를 들어 TxnID가 456313에서 456321로 간 이유는 456313에서 write 작업을 수행 하기 전에 많은 select 작업을 수행했기 때문입니다.
  • 위는 하나의 connection(ConnHandle 1550990889)이 5개의 트랜잭션을 발생시켜 그 중에 4개는 commit 되고 (State가 APPLIED이므로 version이 발생하지 않았음) 하나는(TxnID 456337)현재 begin transaction 중입니다.
예)

sp_iqtransaction 예시


sp_iqview
syntax
sp_iqview [view-name] , [view-owner], [view-type] ;
sp_iqview [view_name = ' view-name' ] , [view_owner = ' view-owner' ],
[view_type = ' SYSTEM | ALL | IQ' ];

특정 뷰에 대한 다음과 같은 상태를 출력합니다

sp_iqview 컬럼 이름별 설명


예)

sp_iqview 예시