PARTITIONED INDEX의 종류 및 IU(INDEX UNUSABLE) 상태 정리 ORACLE

PARTITIONED INDEX의 종류 및 IU(INDEX UNUSABLE) 상태 정리
=======================================================

Oracle8의 새로운 기능인 partition 은 index에도 적용된다. 이 partitioned 
index는 생성되는 형태에 따라 몇 가지로 나누어지는데, 여기에서는 이 각각의 
종류에 대해 좀 더 자세히 설명한다. 그리고 table과 index가 partition됨에 
따라 index가 unusable 상태가 되는 경우가 발생할 수 있는데 이러한 상태를 
유발시키는 경우와 조치 방법에 대해서도 살펴본다.

1. partitioned index의 종류

(1) LOCAL INDEX

local index란 index를 생성한 table과 partitioned index가 equi-partition된 
경우를 나타낸다.
즉, index와 table은 같은 컬럼에 의해 partition되며, 하나의 index 
partition이 table partition 하나와 대응되며, 대응되는 index partition과 
table partition은 각각 같은 범위를 갖게 된다. 결국 특정한 하나의 index에 
포함된 모든 key들은 하나의 table partition 내의 data만을 가리키게 된다.

partitioned index는 다시 다음과 같이 prefixed와 non-prefixed로 나누어진다.

(1)-1 local prefixed index

prefixed index는 index에서 맨 앞에 위치한 column에 의해 partition되는 
것이며, non-prefixed index는 index에서 맨 앞의 컬럼을 제외한 다른 컬럼에 
의해 partition된 경우이다.
local prefixed index는 다음과 같이 생성할 수 있다.

CREATE TABLE dept
(deptno NUMBER NOT NULL,
loc VARCHAR2(10))
PARTITION BY RANGE (deptno)
(PARTITION part1 VALUES LESS THAN(30),
PARTITION part2 values less than (MAXVALUE));

CREATE INDEX dept_idx ON dept(deptno) LOCAL;

(1)-2 local non-prefixed index
index columns들 중 맨 앞에 있는 column으로 partition되지 않은 경우는 
non-prefixed index가 된다. 다음과 같이 생성할 수 있다.

CREATE INDEX dept_locidx ON dept(loc) LOCAL;

이러한 non-prefixed index는 특히 historical한 data를 보관하는 table의 
경우 유용하다. 즉, 날짜에 따라 table과 index의 partition은 이루어지고, 
인덱스는 별도의 사원 번호나 제품 번호와 같이 key가 되는 것에 생성하는 
경우이다.

(2) GLOBAL INDEX

global index는 table과는 다르게 partition이 된다. 즉, table과 같은 
column으로 partition되나 그 범위가 틀리거나, 혹은 다른 컬럼으로 partition이
이루어진다.
하나의 index partition에 있는 모든 index는 모두 하나의 table partition에 
속하게 되지 않고, 두 개 이상의 partition에 나누어 있을 수 있다.

예를 들어 EMP table의 경우 많은 수의 사원을 각 부서 별로 partition을 구성할 
수 있다. 특정 부서에 속한 사원에 대한 operation의 경우 이것은 매우 도움이 
될 수 있다. 그러나 대부분 회사에 부서의 종류는 아주 많은 것이 아니어서 부
서 번호에 index를 거는 것은 드문 일이다. 그러나 사원 번호는 고유하기 때문
에 primary key가 되거나 index를 생성하는 것이 일반적이다. 이 때 이 사원 
번호에 부여된 index를 partitioning하게 되면, 이것이 global index가 되는
것이다.

global index는 prefixed global index만이 존재하며, non-prefixed global 
index는 생성이 불가능하다. 즉, global index는 항상 index의 맨 앞 컬럼 값만을 
이용하여 partition된다.

위의 예를 이용하여 global index를 생성하면 다음과 같다.

CREATE TABLE emp
(empno NUMBER NOT NULL,
ename VARCHAR2(10),
deptno NUMBER)
PARTITION BY RANGE (deptno)
(PARTITION part1 VALUES LESS THAN(30),
PARTITION part2 VALUES LESS THAN (MAXVALUE));

CREATE UNIQUE INDEX emp_pk on emp(empno)
GLOBAL PARTITION BY RANGE (empno)
(PARTITION p1 VALUES LESS THAN ('1000'),
PARTITION p2 VALUES LESS THAN ('2000'),
PARTITION p3 VALUES LESS THAN (MAXVALUE));

2. index unusable

non-partitioned index나 partitioned index의 partition은 특정한 
operation에 의해 Index Unusable(IU) 상태가 될 수 있다. 이렇게 IU 상태가 된
index나 index partition을 SELECT하거나 DML을 시도하면 오류가 발생하게 된다. 
어떤 partition이 IU 상태가 되면 그 partition을 사용하기 전에 rebuild하여야 
한다. 그러나 IU partition을 제외한 다른 partition만을 읽거나 DML을 수행하는 
작업은 IU partition을 access하지 않는 한 오류가 발생하지 않는다.

단, IU partition을 rebuild하기 전에 split이나 rename이 가능하며, IU 상태인 
global index를 drop하는 것도 가능하다.

partition을 Index Unusable 상태로 만들 수 있는 작업은 다음과 같이 6가지로 
요약할 수 있다.

(1) direct path load 시

Direct path SQL*Loader 수행 후 index가 table의 해당 data보다 이전 것이면, 
IU 상태가 된다. (Oracle7에서는 Index가 Direct Load State가 되었다고 표현한다). 
index가 table의 data보다 이전 상태라는 것은 data를 load 후 index를 생성 중에 
space 부족 등의 원인으로 오류가 발생하였거나 SKIP_INDEX_MAINTENANCE 
option을 사용한 경우이다.

(2) ALTER TABLE MOVE PARTITION과 같이 ROWID를 변화시키는 작업. 
영향받는 local index와 전체 global index를 IU 상태가 되게 한다.

(3) ALTER TABLE TRUNCATE PARTITION이나 DROP PARTITION과 같이 table의 row를 
지우는 작업. 
global index partition을 IU 상태로 만든다.

(4) ALTER TABLE SPLIT PARTITION은 local index의 partition definition은 
변경시키지만, 자동으로 index를 새로운 definition에 맞게 rebuild하지 않기
때문에 영향 받는 local index partition을 IU 상태로 만든다. 또한 이것은
ROWID를 변경시키기 때문에 모든 global index partition을 IU 상태로 만든다.

(5) ALTER INDEX SPLIT PARTITION은 index의 definition은 변경시키지만, 영향
받은 partition은 rebuild시키지 않는다. 이 작업은 영향받는 index 
partition 부분을 IU 상태로 만든다. 그러나 global index의 경우는 그대로 
usable 상태로 된다. 

3. unusable상태를 확인하고 해결하는 방법

os> sqlplus system/manager
SQL>select index_owner, index_name, partition_name, status 
from dba_ind_partitions
where status = 'UNUSABLE' ; 

rebuild하는 방법은 해당 user에서
SQL>alter index emp_pk rebuild partiton p1; 

Reference Documents




작업 대상

작업유형

인덱스

Unusable 상태 변경

파티션 테이블

ADD

LOCAL

새로 생성되므로 상관없다.

GLOBAL

파티션만 추가되므로 상관없다.

DROP

LOCAL

같이 삭제되므로 상관없다.

GLOBAL

모든 GLOBAL INDEX가 Unusable

SPLIT

LOCAL

SPLIT된 파티션 인덱스 Unusable

GLOBAL

모든 GLOBAL INDEX가 Unusable

MERGE

LOCAL

머지되어 남는 파티션 인덱스 Unusable

GLOBAL

모든 GLOBAL INDEX가 Unusable

RENAME

LOCAL

실제 변경이 없으므로 상관없다.

GLOBAL

실제 변경이 없으므로 상관없다.

MOVE

LOCAL

MOVE된 파티션 인덱스 Unusable

GLOBAL

모든 GLOBAL INDEX가 Unusable

TRUNCATE

LOCAL

남은 로우가 없으므로 상관없다.

GLOBAL

모든 GLOBAL INDEX가 Unusable

EXCHANGE

LOCAL

EXCHANGE한 파티션 인덱스 Unusable

GLOBAL

모든 GLOBAL INDEX가 Unusable



출처 1: https://forums.oracle.com/forums/thread.jspa?threadID=453710&tstart=1360

출처 2: http://blog.naver.com/PostView.nhn?blogId=ithejury&logNo=90028162254


[Informix] HPL - onpladm INFORMIX

onpladm은 GUI환경의 ipload나 shell program을 대체할 수 있는 서버 명령어로 IIF 9.2버전 이후에 제공된다. 
job은 mapping과 formatting이 필요한 conversion job과 informix의 internal format 형태로 자료를 사용할 수 있는 non-conversion job이 있다.
  • job 생성


    onpladm create job <jobname> [-p <projectname>] -d <devicename> 
              -D <databasename> -t <tablename> -f [luadp] 
              [-T <targetservername>] [-S <onploadservername>]
     

    예)onpladm create job customer2 -d /tmp/pload/customer2.unl -D stores_demo -t customer2 -fu
    Successfully created Job customer2
    • 최초로 job을 생성하면 onpload 데이터베이스 생성된다
    • -n옵션을 추가하면 no-conversion job이란 의미
    • -f옵션에는 u(unload), l(load), a(device array), d(tape device), p(pipe command)를 넣을 수 있는데, u나 l옵션 하나만 넣어도 -n 옵션과 함께 사용하면 unload job과 load job이 한번에 생성된다 (왜 그럴까?)
    • -z 옵션으로 포맷을 지정할 수 있는데, 디폴트는 delimiter 이다. (-zD) 
      D(Delimiter), FI(Fixed Internal), FA(Fixed ASCII), FB(Fixed Binary), C(Cobol), CB(Cobol, byte)
       
  • job list 확인
    onpladm list job [ -p <projectname>] -f[lu] [-S <onploadservername>]

    예)onpladm list job
    customer2         [L]
    customer2         [U]

    • list옵션에는 job외에도 map, format, query, device, filter, machine, project, default 옵션이 있는데, no-conversion job을 생성했다면 query와 device에만 정보가 들어있다
    • 즉, query리스트를 보려면 onpladm list query 실행
       
  • job실행
    onpladm run job <jobname> -p <projectname> -f [lu]
              [-l <log_file_name>] [-S <onploadservername>]

    예) onpladm run job customer2 -fu
    Successful connection to onpload established
    Wed Mar 21 19:10:26 2001
    SHMBASE        0xa000000CLIENTNUM      0x49010000Session ID 2Unload Database -> stores_demoQuery Name      -> AUTO.2Device Array    -> customer2Query Mapping   -> AUTO.2Query           -> select * from customer2 for read onlyConvert Reject  -> /tmp/customer2.rej
    Database Unload Completed -- Unloaded 28 Records Detected 0 Errors
    Wed Mar 21 19:10:30 2001

    Job Completed Successfully ... connection closed

    • -l옵션을 주고 로그파일을 지정하면 화면상에 출력되는 메시지가 파일로 저장된다
       
  • job 내용 확인
    onpladm describe job -f[lu] [-F <specfilename> [-p <projectname> ]
              [-R] [-S <onploadservername>]

    예) onpladm describe job customer2 -fu
    BEGIN OBJECT FASTUNLOADJOB customer2
    PROJECT                  DEVICE                   customer2SERVERDATABASE                 stores_demoQUERY                    customer2
    END OBJECT

    • list옵션과 마찬가지로 describe뒤에 map, format, query, device, filter, machine, project, default 옵션을 사용할 수 있다
    예) onpladm describe query customer2 
    BEGIN OBJECT QUERY customer2
    PROJECT                  DATABASE                 stores_demoSELECTSTATEMENT          "select * from customer2"
    END OBJECT

    예) onpladm describe device customer2 
    BEGIN OBJECT DEVICEARRAY customer2
    BEGIN  SEQUENCETYPE                     FILEFILE                     /tmp/pload/customer2.unlTAPEBLOCKSIZE            0TAPEDEVICESIZE           0PIPECOMMANDEND  SEQUENCE
    END OBJECT
     

  • job 변경
    onpladm modify object [-F <specfilename>] [-S <onploadservername>]

    다음은 device를 변경하는 예제이다
    예)vi customer2.mod
    BEGIN OBJECT DEVICEARRAY customer2
    BEGIN  SEQUENCETYPE                     FILEFILE                     /tmp/pload/customer.txtTAPEBLOCKSIZE            0TAPEDEVICESIZE           0PIPECOMMANDEND  SEQUENCE
    END OBJECT
    예)onpladm modify object -F ./customer2.mod

    Successfully modified object DEVICEARRAY customer2
    • specfile을 만들기 위해서 describe로 기존의 값을 먼저 파일로 저장하고 그 구문에 맞춰 필요한 부분을 고치면 편리하다
       
  • job 삭제
    onpladm delete job <jobname> [-p <projectname>]
              [-R] [-S <onploadservername>]

    예)onpladm delete job customer2 -fl
    Successfully deleted Job customer2
    • 위의 경우 customer2의 unload job은 삭제되지 않고 남아있다
    • job을 모두 삭제하더라도 query나 device등에는 여전히 남아있다
    • 따라서, 완전히 모든 정보를 지우기 위해서는 각각 delete명령을 사용해야한다

    • job과 관련된 것까지 삭제를 할려면 옵션에 -R을 줌!
       

    예)
    onpladm delete job customer2 -fl -R

    예)onpladm delete device customer2 

    Successfully deleted Device-Array customer2
    예)onpladm delete query customer2 
    Successfully deleted Query customer2
     

  • CASE STUDY - fixed length 데이터 로드
    1. 테이블 생성
      $ dbaccess stores_demo << ! 
      create table fixedlengthtable ( 
      col1 int, 
      col2 char(3), 
      col3 char(3) ); 

    2. 데이터파일
      $ vi /tmp/pload/fixedlength.dat 
      1abc123
      2bcd234
      3cde345
      4def456
      5efg567
      6fgh678
      7ghi789
      8hij890
      9ijk901
    3. device 정의
      $ vi /tmp/pload/fixed.device 
      BEGIN OBJECT DEVICEARRAY fixeddevice
      BEGIN  SEQUENCETYPE                     FILEFILE                     /tmp/pload/fixedlength.datTAPEBLOCKSIZE            0TAPEDEVICESIZE           0PIPECOMMANDEND  SEQUENCE
      END OBJECT
      $ onpladm create object -F fixed.device
      Successfully created object DEVICEARRAY fixeddevice
    4. format 정의
      $ vi /tmp/pload/fixed.format 
      BEGIN OBJECT FIXEDFORMAT fixedformat
      PROJECT                  CHARACTERSET             ASCIIMACHINE                  SparcstationBEGIN  SEQUENCEFIELDNAME                f01DATATYPE                 "Chars"BYTES                    1DECIMALSOFFSET                   0END  SEQUENCEBEGIN  SEQUENCEFIELDNAME                f02DATATYPE                 "Chars"BYTES                    3DECIMALSOFFSET                   1END  SEQUENCEBEGIN  SEQUENCEFIELDNAME                f03DATATYPE                 "Chars"BYTES                    3DECIMALSOFFSET                   4END  SEQUENCEBEGIN  SEQUENCEFIELDNAME                f04DATATYPE                 "Chars"BYTES                    1DECIMALSOFFSET                   7END  SEQUENCE
      END OBJECT
      • 데이터 파일의 carriage return값을 읽기 위해서 f04를 선언했다
      $ onpladm create object -F fixed.format
      Successfully created object FIXEDFORMAT fixedformat
    5. map 정의
      $ vi /tmp/pload/fixed.map 
      BEGIN OBJECT LOADMAP fixedmap
      PROJECT                  FORMAT                   fixedformatDATABASE                 stores_demoTABLE                    fixedlengthtableBEGIN  SEQUENCECOLUMNNAME               col1FIELDNAME                f01JUSTIFICATIONCASECONVERTDEFAULTVALUETRANSFERBYTES            0COLUMNOFFSET             0FIELDOFFSET              0FIELDMINIMUMFIELDMAXIMUMFILLCHARACTERPICTUREFUNCTIONSTORAGECODINGBLOBCOLUMNEND  SEQUENCEBEGIN  SEQUENCECOLUMNNAME               col2FIELDNAME                f02JUSTIFICATIONCASECONVERTDEFAULTVALUETRANSFERBYTES            0COLUMNOFFSET             0FIELDOFFSET              0FIELDMINIMUMFIELDMAXIMUMFILLCHARACTERPICTUREFUNCTIONSTORAGECODINGBLOBCOLUMNEND  SEQUENCEBEGIN  SEQUENCECOLUMNNAME               col3FIELDNAME                f03JUSTIFICATIONCASECONVERTDEFAULTVALUETRANSFERBYTES            0COLUMNOFFSET             0FIELDOFFSET              0FIELDMINIMUMFIELDMAXIMUMFILLCHARACTERPICTUREFUNCTIONSTORAGECODINGBLOBCOLUMNEND  SEQUENCE
      END OBJECT
      • format에서는 f04를 선언했지만 mapping시키지는 않는다
      $ onpladm create object -F fixed.map
      Successfully created object LOADMAP fixedmap
    6. device 정의
      $ vi /tmp/pload/fixed.job 
      BEGIN OBJECT LOADJOB fixedjob
      PROJECT                  DEVICE                   fixeddeviceMAP                      fixedmapFILTERSERVERDATABASE                 stores_demoREJECTFILE               /tmp/pload/fixedjob.rejLOGFILE                  /tmp/pload/fixedjob.logRUNMODE                  EGENERATEVIORECS          YTAPES                    0NUMRECORDS               0STARTRECORD              0MAXERRORS                0
      END OBJECT
      $ onpladm create object -F fixed.job
      Successfully created object LOADJOB fixedjob
    7. data load
      $ onpladm run job fixedjob -fl 
      Connecting to onpload, Please wait...
      Successful connection to onpload established
      Thu Mar 22 11:19:59 2001
      SHMBASE        0xa000000CLIENTNUM      0x49010000Session ID 8Load Database   -> stores_demoLoad Table      -> fixedlengthtableDevice Array    -> fixeddeviceRecord Mapping  -> fixedmapConvert Reject  -> /tmp/pload/fixedjob.rejTable 'fixedlengthtable' will be read-only until level 0 archiveDatabase Load Completed -- Processed 9 RecordsRecords Inserted-> 9Detected Errors--> 0Engine Rejected--> 0Thu Mar 22 11:20:05 2001
      Job Completed Successfully ... connection closed
       
  • 마치며...
    기존에 사용하던 shell이나, ipload 작업과 마찬가지로 onpladm에서 job을 생성하면 모든 정보는 onpload 데이터베이스에 만들어지는데, 몇가지 테이블을 업데이트하여 필요한 정보 변경할 수 있다.
    • unload 파일의 delimiter를 다른 문자로 변경하고 싶으면 
      formats 테이블에서 fieldsep 컬럼에 변경할 delimiter문자를 넣는다.
    • log파일을 변경하고 싶으면
      session테이블에서 logfile 컬럼에 전체경로와 파일명을 넣는다.
    • reject파일을 변경하고 싶으면
      session테이블에서 rejectfile 컬럼에 전체경로와 파일명을 넣는다.
    • runmode(express,deluxe)를 변경하고 싶으면
      session테이블에서 runmode를 변경한다
      LOAD JOB
      • deluxe : 129
      • express : 130
      UNLOAD JOB
      • Dirty Read : 129
      • Committed Read : 130
    • 한글 로케일을 사용해야한다면
      formats 테이블에서 datatype컬럼값을 ASCII에서 KS5601로 바꾼다
    • 데이터파일을 여러개로 구분한다면
      device테이블에서 seq를 1부터 증가하면서 file컬럼에 데이터파일명을 넣는다
      즉,seq:1, file:/tmp/customer1.unl 
          seq:2, file:/tmp/customer2.unl 등등..
    위의 모든 테이블에서 키가 되는 컬럼은 name인데 update할때 where절에 name조건을 넣지 않아서 전체 job이 몽땅 변경되는 사태는 만들지 말아야 하겠다.
    음.. 이정도쯤은 shell로 만들어 놔도 간단히 쓸만 하겠는데..


 

OS별 kernel bit,cpu info, memory info check 방법 OS

장비별 kernel bit check 방법

1. SUN : isainfo -kv 
2. HP : getconf KERNEL_BITS 
3. AIX : getconf WORD_BIT 
bootinfo -y : hardware에서 64비트 지원되는지 표시 
bootinfo -K : 현재 부팅 커널의 비트수 

4. LINUX : getconf WORD_BIT 
linux는 uname -a 해서 x86_64와 같이 뒤에 64가 붙어있으면 64bit 지원. 

5. DEC : only 64 


장비별 cpu info check 방법

SUN : /usr/sbin/psrinfo ?v 
HP : ioscan -fnC processor 
AIX : lsdev -Cc processor 
LINUX : cat /proc/cpuinfo 
DEC : psrinfo -v 
HP IA64 : /usr/contrib/bin/machinfo 


장비별 memory info check 방법

SUN : prtconf | grep -i “memory size” 
HP : grep -i Physical /var/adm/syslog/syslog.log 
AIX : bootinfo -r 
LINUX : free or cat /proc/meminfo 
DEC : uerf | grep memory 

[Informix] Database Logging Mode 확인 및 변경 INFORMIX

- Database Logging Mode 확인 방법

dbaccess sysmaster << !
select name, is_logging, is_buff_log, is_ansi
where name="[Database Name]";
!
ex)
====================================================================
[informix@devsvr script]$ dbaccess sysmaster << ! 
> select name,is_logging,is_buff_log,is_ansi 
> from sysdatabases> where name="kiug"; 
> ! 
Database selected. 
name kiug 
is_logging 1 
is_buff_log 0 
is_ansi 0 
 1 row(s) retrieved.
 Database closed. 
 [informix@devsvr script]$
====================================================================


- Database Logging Mode 

is_logging 1, is_buff_log 0, is_ansi 0 -> Unbuffered Logging(U)
is_logging 0, is_buff_log 1, is_ansi 0 -> Buffered Logging(B)
is_logging 0, is_buff_log 0, is_ansi 1 -> MODE ANSI Unbuffered Logging(A)
is_logging 0, is_buff_log 0, is_ansi 0 -> No logging(N)



- Database Logging Mode 변경 방법

Unbuffered Logging : ontape -s -N [Database Name]
Buffered Logging : ontape -s -N [Database Name]
MODE ANSI Unbuffered Logging : ontape -s -N [Database Name]
No Logging : ontape -s -N [Database Name]


* Database Logging Mode에 대한 간략한 설명
No Logging - transaction이 지원되지않지만 performance측면에서는 좋음
단위 작업에 대한 복구는 불가능함. 
Buffered Logging - logical log buffer가 full  됐을 때 logical log에 기록한다. 
Disk에 logical log를 기록하기 전에 fail이 일어날 경우 
복구가 불가능하다. 
Unbuffered Logging  - transaction  단위로 logical log buffer의 내용을 logical log에 기록
즉 한 개의 transaction이 끝나면 곧바로 disk에 write를 한다.  
Performance는 떨어짐. 
ANSI  표준 MODE  -  Unbuffered mode와 동일,  다른 db와 연동 시 사용
 

[Informix] NETTYPE에 대해서 INFORMIX

NETTYPE 이란?

Informix 데이터베이스들 사이의 통신 방법을 정의하기 위해 사용하는 매개변수로서
sqlhostsonconfig 파일에서 설정한다



NETTYPE의 형식

ddiiippp 

dd : 데이터베이스 서버 제품
on or ol - OnLine 서버
se - INFORMIX-SE 서버
dr - INFORMIX-Gateway with DRDA(TM)

iii : 네트워크 인터페이스
ipc - 프로세스간 통신(공유 메모리 연결시에만 사용함)
soc - 소켓(sockets)
tli - 전송 단계 인터페이스

ppp : 네트워크 프로토콜 또는 ipc 유형
tcp - 네트워크 연결에서의 TCP/IP 프로토콜
spx - 네트워크 연결에서의 IPX/SPX 프로토콜
shm - 공유 메모리 연결(ipc 유형에서만 사용함)



NETTYPE의 예제

onsoctcp - 소켓과 TCP/IP를 사용하는 OnLine 엔진
ontlispx - TLI와 IPX/SPX를 사용하는 OnLine 엔진
ontlitcp - TLI와 TCP/IP를 사용하는 OnLine 엔진
onipcshm - IPC와 공유메모리를 사용하는 OnLine 엔진
setlitcp - TLI와 TCP/IP를 사용하는 INFORMIX-SE



[Informix] DBspace별 사이즈 확인하는 스크립트 INFORMIX

1. 스크립트 내용(dbschk.sh)

#!/bin/ksh

dbaccess sysmaster 2> /dev/null <<+

set isolation to dirty read;
unload to dbschk.out delimiter " "
select a.name, count(*), sum(b.chksize), sum(b.nfree)
from sysdbspaces a, syschunks b
where a.dbsnum = b.dbsnum
group by 1
order by 1;
+
echo "DBspace status report"
echo "======================================================="
echo "DBSPACE           #CHUNKS    SIZE(KB)  FREE(KB)   %USED"
echo "-------------------------------------------------------"
cat dbschk.out | awk '{ printf("%-20s  %2d %10d   %2d       %2d\n",$1,$2,$3*4,$4*4, ($3-$4)/$3*100) }'
echo "======================================================="
rm dbschk.out


2. 해당 스크립트 수행 및 결과 

informix:/informix/script > . ./dbschk.sh

DBspace status report
=======================================================
DBSPACE #CHUNKS    SIZE(KB)  FREE(KB) %USED
-------------------------------------------------------
rootdbs                1     400000   216600       45
=======================================================

Optim Troubleshooting #1 OPTIM

Optim 으로 Archive 수행 시 Error 발생 및 해당 Report에 아래와 같은 메세지가 나타남

   ErrMsg: Client-Side OCI Error id=Unknown RC value

Archive를 수행하려는 해당 DBAlias에 대한 설정에 문제가 생긴것으로 생각되어 DBAlias를 드랍한 후에 다시 생성한 결과 정상적으로 수행됨





[CentOS] FTP 사용하기 OS

1. vsftpd가 설치되어있는지 확인한다

rpm -qa | grep vsftpd

2. 아래 명령어를 수행한 다음 SELinux 를 비활성 시킨다

system-config-securitylevel

3. vsftpd에 대한 환경설정을 해준다

vi /etc/vsftpd/vsftpd.conf

4. FTP를 재시작한다

service vsftpd restart

5. root계정으로 접속하기 위해 아래의 두개의 파일에 대해서 root 를 # root로 수정해준다

vi /etc/vsftpd.ftpusers
vi /etc/vsftpd.user_list

* root계정이 아닌 다른 계정으로 ftp를 사용하고 싶을 경우 원하는 계정에서 5번과 같은 과정을 진행하면 된다

[ORACLE] TNSPING은 연결되었으나 sqlplus로 접속은 안되는 경우 ORACLE

[환경]

서버 : Windows 2008, Oracle Server 10.2.0
클라이언트 : Windows Xp, Oracle Client


[증상]

서버쪽 오라클 리스너 기동 후 클라이언트쪽에서 TNSPING의 연결을 확인한 후에 sqlplus로 접속할 때 ORA-12170 에러가 발생


[해결]

클라이언트 쪽에 ORACLE_HOME 환경변수를 설정하여 해결함
(내컴퓨터 -> 속성 -> 고급 -> 환경 변수 -> 시스템 변수(S) 로 가서 변수 ORACLE_HOME을 입력한 후 그에 해당하는 경로를 입력)

[Oracle] 파티션 테이블 drop시 인덱스 유형에 따른 인덱스 리빌드 ORACLE

파티션 테이블 에는 크게 로컬 파티션 인덱스, 글로벌 파티션 인덱스, Non 파티션 인덱스가 존재합니다

로컬, 글로벌 파티션 인덱스는 말 그대로  파티션 되어있는 것이고, Non 파티션 인덱스는 파티션 되어있지 않고 통으로 만들어진 인덱스입니다.

로컬과 글로벌 파티션 인덱스 구분은 테이블이 파티션 되는 조건과 동일하게 인덱스가 파티션 되면 로컬이고, 테이블 파티션 조건과 별개로 파티션되어 있으면 글로벌 파티션 인덱스 입니다.

파티션된 테이블의 특정 파티션을 Drop 시 인덱스 리빌드의 경우, 로컬은 테이블 구조와 동일하게 때문에 파티션 drop시에 인덱스도 같이 drop되기에 인덱스 리빌드가 필요 없습니다. 글로벌의 경우 파티션이지만 테이블 구조와 틀리기 때문에 파티션 drop시 인덱스 리빌드가 필요하며 Non 파티션 인덱스 또한 인덱스 리빌드가 필요합니다




1 2