달력

4

« 2024/4 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
.. .. ..

SELECT TRUNC(MEM_MAX_DB_SIZE/1024/1024, 2) Max,
       TRUNC(MEM_ALLOC_PAGE_COUNT*32/1024, 2) Alloc,
       TRUNC((MEM_ALLOC_PAGE_COUNT - MEM_FREE_PAGE_COUNT) * 32/1024, 2) Used,
       TRUNC(MEM_FREE_PAGE_COUNT*32/1024, 2) Free
FROM V$DATABASE;
 
위에서 MAX 는 메모리테이블스페이스가 늘어날 수 있는 최대 크기를 나타냅니다.
Alloc(이전 쿼리에서 currsize)은 현재 DB에 할당된 메모리 크기를 나타냅니다.
Used는 할당된 크기 안에서 실제로 사용 중인 메모리를 말하며 Free는 사용 가능한 용량을 나타냅니다.
 
Free 사이즈가 존재하는 이유는 사용중인 테이블들에서 delete 또는 테이블 drop 등으로 발생한 여유 메모리를 O/S에 바로 반납하지 않고 재사용을 위해 DB가 가지고 있기 때문입니다.
 
.
:
Posted by .07274.
.. .. ..

메모리 테이블 스페이스의 초기 크기를 변경할 수는 없습니다.

 

create memory data tablespace ts_bis_master_dat size 100m

checkpoint path 'F:\altibasedata\userdata';

 

이렇게 메모리 테이블 스페이스를 생성하셨으면, ts_bis_master_dat 의 초기 크기는 100m 입니다.

이 크기를 1G 로 늘리고 싶다고 하셨는데요, 최대 1G까지 사용하고 싶다.. 는 것을 말씀하시는 것이라면,

다음과 같이 ALTER TABLESPACE.. 구문으로 변경 가능합니다.

 

ALTER TABLESPACE ts_bis_master_dat

ALTER AUTOEXTEND ON NEXT 256M MAXSIZE 1G;

 

AUTOEXTEND ON 으로 설정하시면, 테이블스페이스의 확장이 필요할 때 자동으로 확장될 수 있도록 설정하는 것이며,

'NEXT 크기' 자동확장 시 확장되는 크기,

'MAXSIZE 크기' 는 최대로 확장할 수 있는 크기

를 의미합니다.

.
:
Posted by .07274.
.. .. ..
1. sys 계정으로 접속한다.
a. ISQL -SYSDBA
b. sys
c. ma....

2. 이중화 프로퍼티 확인 후 수정
$ALTIBASE_HOME/conf/altibase.properties
         server 1 : PORT_NO = 20301                      ,          REPLICATION_PORT_NO = 21301
         server 2 : PORT_NO = 20301                      ,          REPLICATION_PORT_NO = 23301


3. 이중화 테이블 생성  
 CREATE TABLE TEST (I1 INTEGER PRIMARY KEY, I2 CHAR(10) );

4. 이중화 객체 생성 
server 1: create replication rep with '210.223.88.138' , 23301 from dbwork.tb_ip_ne_addr to dbwork.tb_ip_ne_addr      
server 2: create replication rep with '210.223.88.139' , 21301 from dbwork.tb_ip_ne_addr to dbwork.tb_ip_ne_addr


5. 이중화 구동과 종료
  alter replication rep start;
  alter replication rep stop;


6. 이중화 객체 확인
  select * from v$repreceiver;
  select * from v$repsender;
  select * from v$repgap;   < -- gap 확인





기타

이중화 테이블 삭제
1. ALTER REPLICATION REP STOP;
2. ALTER REPLICATION REP DROP TABLE FROM DBWORK.TB_IP_NE_ADDR  TO DBWORK.TB_IP_NE_ADDR

이중화 테이블 추가
1. ALTER REPLICATION REP STOP;
2. ALTER REPLICATION REP ADD TABLE FROM DBWORK.TB_IP_NE_ADDR TO DBWORK.TB_IP_NE_ADDR


이중화 네트워크 추가
1. ALTER REPLICATION REP STOP;
2. ALTER REPLICATION REP ADD HOST '210.223.88.999',30500;  (삭제 : DROP , 변경 : SET )

이중화 이름과 테이블정보등 상세정보 보기
select local_user_name, local_table_name from system_.sys_repl_items_;
.
:
Posted by .07274.
.. .. ..
알티베이스 버젼
version 4.3.9.11 IBM_AIX_5.3-64bit-4.3.9.11-release-xlC_r (powerpc-ibm-aix5.3.0.0) Sep 12 2006 20:39:18, binary db version 4.11.1, meta version 4.8.1, cm protocol version 4.5.1, replication protocol version 4.7.1

set linesize 1000;
set colsize 20;
 
SELECT
         UF.NAME SPACENAME,
         ROUND(DF.MAXSIZE, 3)||' MB' MAXSIZE ,
         ROUND(DF.CURRSIZE, 3)||' MB' CURRSIZE ,
         NVL(to_char(ROUND(UF.USED_PAGE_CNT*8/1024,3)),'N/A')||' MB' USEDSIZE
     FROM
         (SELECT
             SUM(MAXSIZE)*8/1024 MAXSIZE ,
             SUM(CURRSIZE)*8/1024 CURRSIZE ,
             SPACEID
         FROM
             V$DATAFILES
         GROUP BY SPACEID) DF , V$TABLESPACES UF
     where DF.SPACEID = UF.ID
     UNION ALL
     SELECT
         'SYS_TBS_MEMORY' SPACENAME,
         ROUND(MEM_MAX_DB_SIZE/1024/1024,3)||' MB' MAXSIZE,
         ROUND(MEM_ALLOC_PAGE_COUNT*32/1024,3)||' MB' CURRSIZE,
         TO_CHAR(ROUND(MEM_ALLOC_PAGE_COUNT*32/1024,3))||' MB' USEDSIZE
     FROM
         V$DATABASE
     ORDER BY 1;
.
:
Posted by .07274.
.. .. ..

alter session set explain plan = on
.
:
Posted by .07274.
.. .. ..
4.3.9 버전에서 테이블 스페이스 사용량 조회 확인 쿼리입니다.
 
set linesize 1000;
set colsize 20;
 
SELECT
    UF.NAME SPACENAME,
    ROUND(DF.MAXSIZE, 3)||' MB' MAXSIZE ,
    ROUND(DF.CURRSIZE, 3)||' MB' CURRSIZE ,
    NVL(to_char(ROUND(UF.ALLOCATED_PAGE_COUNT*8/1024,3)),'N/A')||' MB' USEDSIZE
FROM
    (SELECT
        SUM(MAXSIZE)*8/1024 MAXSIZE ,
        SUM(CURRSIZE)*8/1024 CURRSIZE ,
        SPACEID
    FROM
        V$DATAFILES
    GROUP BY SPACEID) DF , V$TABLESPACES UF
where DF.SPACEID = UF.ID
UNION ALL
SELECT
    'SYS_TBS_MEMORY' SPACENAME,
    ROUND(MEM_MAX_DB_SIZE/1024/1024,3)||' MB' MAXSIZE,
    ROUND(MEM_ALLOC_PAGE_COUNT*32/1024,3)||' MB' CURRSIZE,
    TO_CHAR(ROUND(MEM_ALLOC_PAGE_COUNT*32/1024,3))||' MB' USEDSIZE
FROM
    V$DATABASE
ORDER BY 1;
.
:
Posted by .07274.
2010. 5. 27. 17:30

TRUNCATE 란? I.lib()/I.lib(Altibase)2010. 5. 27. 17:30

.. .. ..
테이블 자료 삭제 시 아래 명령을 통해서 수행하게 됩니다.
delete from [테이블명];


상기 명령어는 rollback 로그를 남겨야 하기 때문에 데이타가 몇백만, 몇천만이 되버리면 상당한 속도저하를 보여 DB가 죽은 상태로 인식될 수 있습니다. 대용량에서는 위험할 수 있는 부분이죠.

이럴 때를 위해 제공되는 TRUNCATE TABLE 명령어
TRUNCATE TABLE  [테이블명];

TRUNCATE TABLE 은 다음과 같은 특성을 가집니다. 
개별 행 삭제를 로깅하지 않고 모든 행을 테이블에서 제거합니다. TRUNCATE TABLE은 기능상으로 WHERE 절이 없는 DELETE 문과 동일하지만 더 빠르고 시스템 및 트랜잭션 로그 리소스를 덜 사용합니다.

TRUNCATE TABLE은 테이블에서 모든 행을 제거하지만 테이블 구조와 테이블의 열, 제약 조건, 인덱스 등은 그대로 남습니다.게다가 COMMIT 이 필요없습니다. 로깅하지 않기 때문에 바로 삭제가 되버립니다. 대신 ROLLBACK도 되지 않습니다.

* TRUNCATE 는 DDL 명령어기때문에 roolback이 되지 않는다. 그래서 따로 backup 해둔것이 없어 복원이 되지
   않으니 주의가 필요하다.

.
:
Posted by .07274.
.. .. ..
저장프로시저
- 저장 프로시저는 하나 이상으로 구성된 Transact-SQL 문을 데이터베이스에 저장한 개체입니다.

저장프로시저 특징
  • 모듈 프로그래밍
    자주 반복해서 사용하는 T-SQL문을 DB에 저장해 필요한 시점에만 사용함.
    매번 같은 구문을 다시 작성할 필요가 없음
  • 유연한 보완관리
    데이터 조회하는 저장프로시저. 접근권한이 없어도 저장프로시저를 실행할 권한이 있다면 조회가능
  • 네트워크 트래픽 감소
    쿼리전체를 서버로 전송해서 작업하는 것이 아닌 저장 프로시저와 매개변수값만을 전달함으로 데이터량이 작음
  • 빠른실행
    저장프로시저는 실행후 쿼리 실행계획을 메모리에 저장 > 저장된 실행계획 사용 > 구문분석이나 최적화 과정 거치지 않아서 더 빠른 실행을 할수 있고 캐시에 없더라도 구문분석, 표준화등의 작업을 하지 않기에 성능이 빠름

저장프로저의 구성요소
저장 프로시저명, 매개변수들, SQL문, 결과값 반환의 반환값

저장프로시저의 종류
  • 확장프로시저 : C와 같은 언어를 이용해서 구현한 프로시저, master DB에만 추가가능
  • 사용자 정의 저장 프로시저 : T-SQL문을 이용해 저장 프로시저로 구현
  • 시스템 저장 프로시저 : SQL서버관리를 위해 시스템에서 제공해주는 저장 프로시저
    sys의 스키마로 나타남, 데이터베이스 명 필요없이 시스템 저장 프로시저명을 통해서 실행가능

    Sp_who, sp_who2 : 사용자 정보
    Sp_lock : lock 정보
    Sp_help : 지정한 개체 정보
    Sp_helpdb : 지정한 DB정보
    Sp_configure : SQL 서버 설정변경
  • 임시 저장프로시저
    T-SQL 문 또는 일괄처리의 실행계획을 재 사용하지 않던 이전 버전의 방식
    사용자 정의 프로시저와 동일하게 작성하지만, 저장프로시저 명을 #으로 하면 임시저장프로시저가 됨
    SQL Server 2005에서는 T-SQL문과 일괄처리의 실행계획을 재 사용할수 있음으로 임시저장프로시저 사용이 거의없음
  • CLR 저장 프로시저
    T-SQL에서 부족한 프로그래밍 부분을 CLR 저장 프로시저를 통해 T-SQL 저장 프로시저보다는 더 강력한 구조적 프로그래밍이 가능

저장 프로시저의 생성

CREATE PROCEDURE usp_withANumber <- 소문자 : 스키마. 저장 프로시저명
@ EmployeeID INT <- 매개변수, 데이터 형식
AS
SELECT ANumber, AContent, ManagerID
FROM HumanResource.analysisDate
WHERE ManagerID = @ EmployeeID
GO

EXECUTE usp_withANumber

GO
* 임시 저장프로시저의 생성은
CREATE PROCEDURE #usp_withANumber <- 소문자 : 스키마. 저장 프로시저명앞에 샾
* 저장프로시저 생성시, SP_ 접두사는 시스템저장프로시저와 혼란을 줄수 있음으로 사용금지
* 그룹화면 저장프로시저 삭제시 개별적으로 하나씩 삭제할수 없음으로 가급적 사용하지말것
- 그룹화하기 : 같은 저장 프로시저명에 ; 하고 숫자를 매김

CREATE PROCEDURE usp_withANumber;1
AS
[ T-SQL구문 ]
GO

CREATE PROCEDURE usp_withANumber;2
AS
[ T-SQL구문 ]
GO

* 다른 사용자의 접근막기위해서는 CREATE아래쪽에 WITH ENCRYPTION을 사용함
시스템뷰에서 저장프로시저의 텍스트가 나타나지 않음. 암호화된 저장프로시저의 내용은 다시 확인할수 있는 방법이 없음으로 암호화되기전의 저장프로시저를 잘 보관해야함



저장 프로시저의 수정

ALTER PROCEDURE 스키마. 저장프로시저명.
@ 매개변수 데이터 형식
AS
[ 변경된 SQL문 ]



저장 프로시저의 삭제

DROP PROCEDURE 스키마.저장프로시저명;



기본값을 지니는 매개변수의 사용과 output사용

CREATE PROCEDURE usp_withANumber
@EmployeeID INT = 10 <- EmployeeID에 기본값을 지정한 것
@outvalue int output <- outvalue에 output 변수를 쓰겠다는것
@currency_cursor CURSOR VARYING OUTPUT <- output 매개변수로 커서를 사용할때
AS
SELECT @outvalue = ManagerID <- 관리자 ID를 output 매개변수에 설정
FROM HumanResource.analysisDate
WHERE ManagerID = @ EmployeeID
GO

DECLARE @ManagerID INT; <- 저장프로시저 output 매개변수에 반환하는 값저장을 위한 지역변수선언

EXECUTE usp_withANumber 20, @ManagerID output <-반환되는값 조회

GO

.
:
Posted by .07274.
2010. 4. 12. 16:00

IOT(INDEX ORGANIZED TABLE) I.lib()/I.lib(Altibase)2010. 4. 12. 16:00

.. .. ..
IOT(INDEX ORGANIZED TABLE) 란?


일반 테이블에서 인덱스를 통해서 레코드를 액세스 할 때에는 키 값을 가지고 인덱스를 탐색해서 ROWID를 얻은 다음에  다시 ROWID를 이용해서 테이블을 읽는 두 번의 과정을 거쳐야 합니다.

또한 키 컬럼이 인덱스와 테이블 양 쪽에 중복해서 저장되므로 키 값이 큰 경우에는 디스크의 낭비 또한 무시할 수 없습니다.

이러한 문제점을 해결하고자 고안된 것이 IOT(Index Organized Table) 입니다.


 - IOT는 인덱스 안에 테이블을 넣어 버린 구조로 되어 있기 때문에 인덱스를 읽는 것으로 모든 작업이  완료 됩니다.

 - 키 값에 해당되는 레코드를 테이블에서 읽을 필요도 없고, 데이터의 중복 문제도 자연스럽게 해결할 수 있습니다.

 - IOT는 겉보기에는 테이블이지만 실제로는 기본 키(primary key)를 근간으로 한 인덱스이기 때문에 전제 조건으로 Primary Key를 필요로 합니다.

 - IOT를 생성하면 인덱스와 테이블이 같은 저장 구조에 생성되어 SQL 문이 실행되면, 무조건 IOT 인덱스를 통해 데이터를 검색하여 빠른 데이터 검색이 가능하고 저장 공간이 적게 사용 합니다.


특징

- IOT는 table data를 primary key에 대한 B*Tree index에 적재하는 구조를 갖습니다.

- IOT의 index row들은 인덱스 키 값과 non-key 값을 포한 합니다.

- IOT의 index에는 ROWID 정보가 없습니다.


장점

- range search, exact match를 수행하는 경우 일반적인 table보다 빠른   key-based access가 가능 합니다.

- full table scan 시 primary key에 대한 full index scan이 이루어지므로  자동적인 ordering이 이루어 집니다.

- index key column과 rowid에 대한 storage 중복을 피할 수 있어 storage가 절약 됩니다.

일반 테이블과 IOT테이블의 차이점


 - 일반테이블은 ROWID로 행을 구별하지만 IOT는 PK로 행을 구별합니다.

 - 일반 테이블의 FULL SCAN은 행이 Return되는 순서를 예측할 수 없지만, IOT는 PK값의 순서에 따랄 출력됩니다.

 - IOT는 Unique 제약조건을 설정 할 수 없습니다.

 - IOT는 클러스트를 사용할 수 없습니다.

 - IOT는 일반테이블보다 저장공간이 감소합니다.

 - IOT는 Primary Key를 꼭 생성해야 합니다.  

 - IOT의 Secondary 인덱스는 Primary Key값과 그것을 기반으로 하는 ’Universal Rowid’ 즉, Urowid를 가지고 인덱스가 만들어집니다.

 - IOT는 일반 인덱스와 달리 물리적인 ROWID 정보를 가지고 있지 않고 논리적인 유니버설 ROWID(UROWID)를 가지고 있어 빠르게 검색할 수 있습니다.


 ※ UROWID(Universal Rowid) : 인덱스 구성 테이블(IOT, Index-Organized Table)행의 논리적인 위치

IOT(INDEX ORGANIZED TABLE) 생성


[Syntax]



-- IOT 생성 예제
SQL> CREATE TABLE iot_test (
         id NUMBER CONSTRAINT   iot_test_pk_id   PRIMARY KEY,
         name VARCHAR2(30),
         contents VARCHAR2(2000))
         
ORGANIZATION INDEX TABLESPACE indx
         
PCTTHRESHOLD 40 INCLUDING name
         
OVERFLOW TABLESPACE users;
 
테이블이 생성되었습니다.


아래는 위에서 생성한 문법의 설명 입니다.

 ORGANIZATION INDEX TABLESPACE : IOT Data 저장되는 Tablespace
 
 
PCTTHRESHOLD

  - IOT
위해서 예약된 공간의 백분율, 1블럭의 N% 비율보다 데이터가 입력되면 열이 아닌 데이터는 OVERFLOW TABLESPACE절에 정의된 테이블스페이스에 저장 됩니다.

  - 0~50
사이값으로만 지정가능, 디폴트는 50

  -
만약 PCTTHRESHOLD 40 으로 지정했을 경우,  하나의 행자체가 위에 값보다 크게 되면 INCLUDING
뒤에 있는 컬럼만 제외하고는 모두 OVERFLOW 세그먼트로 이동됩니다.
 
 
INCLUDING

  - IOT
행을 인덱스와 오버플로우 구역으로 나눌 열을 구분합니다.  

  - INCLUDING
지정되지 않았는데 크기가 PCTTHRESHOLD 초과하면 기본 열을 제외한 모든 오버플로우 세그먼트에 저장이 됩니다.

  - INCLUDING
뒤에 있는 컬럼만 제외하고 모두 오버플로우 세그먼트에 저장이 됩니다.

  - INCLUDING
절에 오는 열은 기본 키의 마지막 열의 이름 이거나 기본 키가 아닌 입니다.
 
 
OVERFLOW TABLESPACE
 
  -
PCTTHRESHOLD 초과하는 Data 행이 저장됩니다.

  -
만일 Overflow Tablespace Option 주지 않고 생성된 IOT 대하여 (PCTTHRESHOLD / 100) *DB_BLOCK_SIZE보다 row 발생한다면 ORA-1429 같은 오류를 만나게 됩니다



 

IOT 생성시 만들어지는 세그먼트


위에서 설명한거와 같이 IOT 생성할  기본적으로 인덱스 세그먼트와 OVERFLOW 세그먼트를 지정합니다.


인덱스 : PK 지정시 생성되는 인덱스로 CREATE TABLE 문에 지정된 테이블스페이스에 생성되며 이때 지정된 스토리지와 공간활용 파라미터를 가진다.

OVERFLOW 행조각을 수용할 테이블 : PCTTHRESHOLD 초과한 경우 나머지 컬럼들이 저장되는 테이블로 이름이 SYS_IOT_OVER_n으로 지정되며 n DBS_OBJECTS에서 있는 IOT OBJECT_ID입니다.





-
위에 그림과 같이 인덱스 세그먼트이름은 PK 이름이 되고, 세그먼트유형은 INDEX 됩니다.

-
OverFlow 세그먼트는 세그먼트이름은  SYS_IOT_OVER_n 지정되고, 세그먼트유형은 TABLE 됩니다.



-- 위에서 생성한 IOT 인덱스 세그먼트를 조회 예제 입니다.
SQL> SELECT segment_name FROM user_segments WHERE segment_type=’INDEX’;
SEGMENT_NAME
----------------------
PK_DEPT
PK_EMP
IOT_TEST_PK_ID    --> IOT Data 저장되는 세그먼트



-- 위에서 생성한 IOT OverFlow 세그먼트 조회 예제 입니다.
SQL> SELECT segment_name FROM user_segments WHERE segment_type=’TABLE’;
 
SEGMENT_NAME
------------------------------------------------------------------------
DEPT
EMP
SYS_IOT_OVER_30957 --> OVERFLOW 해당하는 Data 저장되는 세그먼트


 

IOT 실습

똑같은 테이블과 똑같은 데이터를 가지고 일반테이블과 IOT 실습을 해보겠습니다.
 
 
1) 먼저 일반테이블을 생성해서 데이터를 INSERT합니다.


-- 테이블을 생성합니다.
 CREATE TABLE TEST(
 NO NUMBER  CONSTRAINT TEST_NO_PK Primary Key,
 TITLE VARCHAR2(50),
 CONTNETS VARCHAR2(500))
 TABLESPACE USERS;


 -- Data INSERT합니다.
 INSERT INTO TEST
VALUES(3,’CCCCCCCCCC’,’CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC’);
 INSERT INTO TEST
VALUES(1,’AAAAAAAAAA’,’AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA’);
 INSERT INTO TEST
VALUES(5,’EEEEEEEEEE’,’EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE’);
 INSERT INTO TEST
VALUES(2,’BBBBBBBBBB’,’BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB’);
 INSERT INTO TEST
VALUES(4,’DDDDDDDDDD’,’DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD’);
 COMMIT;


-- 데이타를 조회 합니다.
SQL> SELECT no, title FROM test;
 
  NO TITLE
---- ------------ 
   3 CCCCCCCCCC
   1 AAAAAAAAAA
   5 EEEEEEEEEE
   2 BBBBBBBBBB
   4 DDDDDDDDDD




 
2) 위와 똑같이 IOT 생성해서 똑같은 데이터를 INSERT합니다.
 
 
-- IOTTEST 테이블을 생성합니다.
CREATE TABLE IOTTEST (
NO NUMBER CONSTRAINT   IOTTEST_PK_NO   PRIMARY KEY,
TITLE VARCHAR2(50),
CONTENTS VARCHAR2(500))
ORGANIZATION INDEX TABLESPACE INDX
PCTTHRESHOLD 40 INCLUDING TITLE
OVERFLOW TABLESPACE USERS;
 
 
-- DATA INSERT합니다.
 INSERT INTO IOTTEST
VALUES(3,’CCCCCCCCCC’,’CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC’);
 INSERT INTO IOTTEST
VALUES(1,’AAAAAAAAAA’,’AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA’);
 INSERT INTO IOTTEST
VALUES(5,’EEEEEEEEEE’,’EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE’);
 INSERT INTO IOTTEST
VALUES(2,’BBBBBBBBBB’,’BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB’);
 INSERT INTO IOTTEST
VALUES(4,’DDDDDDDDDD’,’DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD’);
 COMMIT;
 
 
-- 데이타를 조회 합니다.
SQL>COL title FORMAT A30;
SQL> SELECT no, title FROM iottest;
 
  NO TITLE
---- ----------
   1 AAAAAAAAAA
   2 BBBBBBBBBB
   3 CCCCCCCCCC
   4 DDDDDDDDDD
   5 EEEEEEEEEE

 
입력한 순서에 상관없이 오름차순으로 정렬되어 있는 것을 확인 있습니다


 

IOT 9i 향상기능


오라클 9i에서 확장된 IOT 대한 온라인 기능 보겠습니다.
 
 
 -- IOT 세컨더리 인덱스에 대해 온라인 생성과 재구성을 있습니다.  
SQL>CREATE INDEX iottest_title_idx ON iottest (title) ONLINE;  
인덱스가 생성되었습니다.
 
 
-- IOT 프라이머리 인덱스에 대해 온라인 COALESCE 있습니다.  
SQL>ALTER TABLE iottest COALESCE;  
 
 
 
IOT 로지컬 ROWID 온라인 갱신
 
IOT 세컨더리 인덱스는 성능향상을 위해 엔트리에 대한 로지컬 ROWID 저장합니다.
로지컬 ROWID 변경될 있기 때문에 인덱스에 저장된 값은 최대 추측가능 값이 됩니다.

따라서, 로지컬 ROWID 내내 변질 상태가 있고, 변질된 로지컬 ROWID 온라인으로 갱신이 가능합니다.

아래 명령어로 로지컬 ROWID 온라인 갱신을 있습니다.
 
 
 
-- IOT 세컨더리 인덱스에 대한 로지컬 ROWID 온라인 갱신을 있습니다.  
SQL>ALTER INDEX iottest_title_idx UPDATE BLOCK REFERENCES;  
 
 
 
IOT 온라인 MOVE

IOT
단편화(fragmentation) 방지하기 위해 재생성 있습니다.
ALTER
명령의 MOVE옵션을 사용하여 재생성 작업을 온라인으로 있습니다.
오버플로우 데이터 세그먼트도 온라인으로 옮겨질 있습니다.


 -- IOT
오버플로우 세그먼트와 함께 온라인으로 옮길 있습니다.
 -- iottest
테이블의 테이블스페이스와 OVERFLOW 테이블스페이스 변경  
SQL>ALTER TABLE iottest MOVE ONLINE TABLESPACE tbs1
      OVERFLOW TABLESPACE
tbs2;


 

IOT 정보조회


-- PAGE,문자열 포맷설정
SET LINESIZE 120;
COL IOT FORMAT A10;
COL OVERFLOW FORMAT A25;
COL INDEX FORMAT A20;
COL OVERFLOWTS FORMAT A10;
COL INDEXTS FORMAT A10;


-- IOT 정보 조회
SELECT t.table_name AS "IOT", o.table_name AS "Overflow",
       i.index_name AS "Index", o.tablespace_name AS "OverflowTS",
       i.tablespace_name AS "IndexTS", I.pct_threshold
FROM dba_tables t, dba_tables o, dba_indexes I
WHERE t.owner = o.owner
  AND t.table_name = o.iot_name
  AND t.owner = I.owner
  AND t.table_name = I.table_name
  AND t.owner = ’SCOTT’;


-- 조회 결과
IOT        Overflow                  Index                OverflowTS IndexTS    PCT_THRESHOLD
---------- ------------------------- -------------------- ---------- ---------- -------------
IOTTEST    SYS_IOT_OVER_30979        IOTTEST_PK_NO        USERS      INDX                  40
IOTTEST    SYS_IOT_OVER_30979        IOTTEST_TITLE_IDX    USERS      SYSTEM
IOT_TEST   SYS_IOT_OVER_30966        IOT_TEST_PK_ID       USERS      INDX                  40



<< 참고문헌 >>
- Oracle Technical Bulletins  No.11615 ORACLE 8.0의 IOT(INDEX ORGANIZED TABLE)
- Oracle 9i Performance Tuning Student Guide Volumn 1

  ================================================
    * 데이터베이스 정보공유 커뮤니티 oracleclub.com
    * 강좌 작성자 : 김정식 (oramaster _at_ naver.com)

.
:
Posted by .07274.