ORACLE/ADMIN2009. 6. 29. 15:14
반응형
9I의 SPFILE 사용에 대해서
========================


PURPOSE
-------
Oracle9i부터는 database의 initial parameter를 지정하는 initSID.ora file외에
server parameter file이라고 불리는 spfileSID.ora가 새로 소개되었다.
이 spfile을 사용하게 되면 alter system을 통해 database가 운영 중에
parameter를 수정할 수 있게 되면서 parameter 수정때마다 database를 restart
시켜야 하는 필요을 줄여주고, 앞으로 소개될 dynamic한 server tuning에
중요한 역할을 할 수 있다.

Explanation
-----------

이 문서에서는 이러한 spfile에 대해서 실제 사용하면서 알아두어야 할 다음과
같은 내용에 대해서 정리하였다.


1. spfile을 vi로 직접 변경한 경우의 영향
2. db open시 spfile을 읽었는지 확인하는 방법
3. initSID.ora를 spfileSID.ora로 migration하거나 그 반대의 방법
4. alter system으로 parameter변경시 scope에 대해서
5. v$parameter와 v$spparameter에 대해서 (static parameter 확인)


1. spfileSID.ora 화일을 vi로 직접 변경한 경우의 영향

spfile이 크기 않은 관계로 vi등으로 읽으면 마치 text 화일처럼 parameter가
보이는데 이 화일은 실제로는 binary file로 직접 변경하면 안된다.
특히 이 화일의 header에는 checksum과 기본적인 meta-data 정보등을
포함하여 manual하게 변경하게 되면 이 checksum의 값이 맞지 않게 되면서,
이후 startup시 이 화일을 읽지 않고 initSID.ora file을 읽게 된다.

db를 운영하면서 spfile에 계속 parameter가 변경된 경우라면 이러한 문제로
tuning등을 통해 변경된 parameter value를 모두 잃게될 수 있는것이다.


2. db open 시 spfile을 읽었는지 확인하는 방법

db가 open 시에 참조한 initial parameter file이 무엇인지를 확인하기
위해서는 다음과 같이 조회하면 된다.

SQL> show parameter pfile

NAME TYPE VALUE
------------------------------ ----------- ---------------------
spfile string ?/dbs/spfile@.ora


여기에서 ?는 ORACLE_HOME을 나타내고 @는 SID를 나타낸다.


3. initSID.ora를 spfileSID.ora로 migration하거나 그 반대의 방법

spfile을 사용하다가 그 화일의 내용을 initSID.ora에 backup 차원에서
반영시켜 두거나, 혹은 spfile대신 initSID.ora를 사용하고자 하는 경우,
또는 반대로 initSID.ora를 참조하여 spfileSID.ora를 생성하고 하는
경우 다음과 같이 간단히 작업하면 된다.

SQL>connect / as sysdba
SQL>create pfile='initORA9i.ora' from spfile='spfileORA9i.ora';
SQL>create spfile='spfileORA9i.ora' from pfile='initORA9i.ora';

위 문장에서 화일명 대신 직접 directory까지 절대 path로 지정할 수 있고,
화일명은 임의로 지정 후 나중에 사용시 initSID.ora나 spfileSID.ora 형태로
만들어줄 수 있다.

default인 $ORACLE_HOME/dbs directory이고 SID가 붙는 이름 형태이면 간단히,
다음과 같이 지정하여도 된다.

SQL>create pfile from spfile;
SQL>create spfile from pfile;

sysdba 권한이 없으면 권한 부족 오류가 발생한다.

4. alter system으로 parameter 변경 시 scope에 대해서

spfile을 사용하게 되면 앞에서도 언급한 것과 같이 spfile을 직접 변경하는
대신 alter system command를 통해 initial parameter를 수정할 수 있다.

단 이때 alter system command 뒤에 scope를 지정할 수 있는 데 scope로
지정가능한 값은 memory/spfile/both 세가지가 된다.
memory가 이중 default여서 scope를 지정하지 않으면 memory가 된다.

memory: 변경이 현재 상태에만 영향을 미치며 db가 restartup되면,
변경 이전값으로 돌아간다.
spfile: 변경 내용을 spfile에만 저장하고 현재 상태에는 영향을 미치지
않게 한다.
static parameter의 경우는 이 scope만이 지정가능하다.
즉, spfile을 사용하더라도 static parameter에 대해서는 db
운영중에 바로 값을 변경하여 restartup없이 반영하는 것은 불가능
한 것이다.
both: 변경 내용을 현재상태에도 바로 반영하고, spfile에도 반영시켜,
이후 rebooting시에도 영향을 미치도록 한다.

지정하는 방법은 다음과 같다.

SQL>alter system set open_cursors=300;
SQL>alter system set open_cursors=300 scope=spfile;
SQL>alter system set open_cursors=300 scope=both;

단, spfile을 참조하지 않고 init.ora를 참조하여 db가 open한 경우 이러한
alter system 명령을 통해 initial parameter를 변경하려고 하면
다음과 같은 오류가 발생한다.

특히 spfile에 외부의 변경이 가해져 spfile이 참조되지 않은 경우에 주로
다음 오류를 만날 수 있다.

ORA-02095: specified initialization parameter cannot be modified


5. v$parameter와 v$spparameter에 대해서 (static parameter 확인)

initial parameter의 종류에는 db가 운영 중에는 바로 그 값을 변경하여
반영시킬 수 없고, 다음 startup 후에만 변경된 값이 영향을 주게되는
parameter가 있다.
이러한 parameter를 static parameter라고 부른다.

이 static parameter의 경우는 그래서 alter system으로 변경하더라도,
scope=spfile 로만 지정 가능한 것이다.
이러한 static parameter를 scope를 지정 안 해서 memory로 하거나 both로
하게 되면 4번에서 설명한 ORA-2095 오류가 발생하게 된다.

그럼 static parameter는 어떻게 확인할 수 있는가?

SQL>select name, issys_modifiable from v$parameter;

여기에서 보면, issys_modifiable의 값으로 다음 세 가지가 나타난다.

FLASE: static parameter로 scope=spfile로만 값을 변경 가능하다.
즉 값을 변경해도 이후 startup 시부터 영향을 미치게 된다.
IMMEDIATE: 값을 변경하면 현재 session부터 바로 영향을 받게된다.
DEFERRED: 변경된 값이 이후 접속되는 session부터 영향을 준다.


alter system을 통해 parameter를 변경하는 경우 변경된 값이 반영이 잘
되었는가를 확인하려면 다음과 같이 show parameter나 v$parameter를
조회하고, 현재 반영은 안 되었더라도 spfile에 저장은 되었는지를 확인하
려면 v$spparameter를 조회하면 된다.

SQL>show parameter open_cursors
SQL>select value from v$prameter where name = 'open_cursors';
SQL>select value from v$spparameter where name = 'open_cursors';

즉, scope=spfile로 parameter를 변경한 경우는 v$spparameter에만 변경
된 값이 나타나고, show parameter나 v$parameter에서는 변경 전 값이
나타나게 된다.
반응형
Posted by [PineTree]
ORACLE/SQL2009. 6. 12. 16:35
반응형
--/// 누적 예제 ///--
create table baljeon
(balday date, balyang number) tablespace users;

insert into baljeon values('2007-02-01',30);
insert into baljeon values('2007-02-02',25);
insert into baljeon values('2007-02-03',20);
insert into baljeon values('2007-02-04',15);
insert into baljeon values('2007-02-05',10);

--/// 날짜별 순차적인 누적량을 구하기 위해선 더해야할 행수는 해당 테이블의 총행수(count값)을 넣어주면된다.
--/// 또는 rows 부터 그이하를 생략하면 된다.
select count(*) from baljeon;

select balday "발전일자", balyang "발전량",
    sum(balyang) over(order by balday) "누적량"
from baljeon;
-----------------------------------------------------------------------------------------
insert into baljeon values('2007-03-01',10);
insert into baljeon values('2007-03-02',20);
insert into baljeon values('2007-03-03',30);
insert into baljeon values('2007-03-04',40);
insert into baljeon values('2007-03-05',50);
-----------------------------------------------------------------------------------------
select * from baljeon;

select balday "발전일자", balyang "발전량",
    sum(balyang) over(partition by to_char(balday,'yyyy-mm') order by balday) "누적량"
    -- partition by to_char(balday,'yyyy-mm') 원하는 날짜별로 누계를 구한다.
from baljeon;
반응형

'ORACLE > SQL' 카테고리의 다른 글

CUBE 함수  (0) 2009.07.08
ROLLUP 함수  (0) 2009.07.08
Oracle 관리 및 SQL Plus 정리  (0) 2009.06.10
ORACLE START WITH, CONNECT BY  (3) 2009.04.02
SQL 실행순서  (0) 2009.02.24
Posted by [PineTree]
ORACLE/ADMIN2009. 6. 11. 14:09
반응형
출처 : http://pigmon.tistory.com/144?srchid=BR1http%3A%2F%2Fpigmon.tistory.com%2F144

DBLink를 이용할 일이 있어서 찾아보다가 나온 내용을 정리한다.

CREATE PUBLIC DATABASE LINK "Link명"
CONNECT TO DB이용자ID
IDENTIFIED BY "DB이용자비밀번호"
USING '(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 원격DB IP)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = 원격DB SID)
    )
  )';


DB링크 이용
쿼리
SELECT * FROM foo@DBLink

Function
SELECT function@DBLink명(parameter...) FROM dual
반응형
Posted by [PineTree]
ORACLE/SQL2009. 6. 10. 16:45
반응형

오라클 9i Release 2 기준으로 작성되었음.

◈ SGA 정보보기(정상 설치/실행 상태인가?)

$ sqlplus system/manager
SQL> show sga



◈ DBA로 접속

$ sqlplus "sys/passwd as sysdba"



◈ DB 시작
-- 일반 시작

$ sqlplus "sys/passwd as sysdba"
startup -- DB 인스턴스 시작
startup force -- DB가 실행중일 경우 강제로 종료했다 시작
startup restrict -- 일반 사용자 접근 금지 상태로 DB 시작



-- 단계별 시작

$ sqlplus "sys/passwd as sysdba"
startup nomount; -- NO Mount 단계
alter database mount; -- Mount 단계
alter database open; -- Open 단계



◈ DB 종료

$ sqlplus "sys/passwd as sysdba"
shutdown normal -- 세션,트랜잭션 종료시까지 대기후 종료
shutdown transactional -- 트랜잭션 종료시까지 대기후 종료
shutdown immediate -- 즉시 종료. 모든 DML 롤백
shutdown abort -- 비정상 즉시 종료. 백업과 복구시에만 사용.



◈ 로그인 없이 SQL*Plus 만 실행하기

$ sqlplus "/nolog"



◈ Table 생성 스크립트 뽑아내기

$ exp mlb/mlb file=결과덤프파일.dmp compress=n rows=n tables=테이블명



◈ & 기호 이용하기

1. 첫번째 방법
SELECT 'You '||Chr(38)||' Me' FROM DUAL;

2. 두번째 방법
SET DEFINE OFF
SELECT 'You & me' FROM DUAL;



◈ 편집기 및 SQL*Plus 공통 설정 지정하기
$ORACLE_HOME/sqlplus/admin/glogin.sql에 SQL*Plus 실행시 항상 지정되는 전체 설정을 할 수 있다.
여기서 "ed" 명령으로 실행되는 에디터는 다음 처럼 지정할 수 있다.

DEFINE_EDITOR=gvim.exe



◈ 프로시져 혹은 함수등의 소스 뽑아내기

SET NEWPAGE 0
SET TERMOUT OFF
SET VERIFY OFF
SET SPACE 0
SET PAGESIZE 0
SET FEEDBACK OFF
SET HEADING OFF
SET TRIMSPOOL ON
SET LINESIZE 500
SPOOL procedure_name.sql
SELECT TEXT FROM USER_SOURCE WHERE NAME='프로시져혹은함수이름' ORDER BY LINE;
SPOOL OFF


이렇게 저장된 procedure_name.sql 에서 불필요한 부분을 삭제하한다. 각 줄의 공백은 SET TRIMSPOOL ON 에 의해 제거된다.
VIM 공백 제거 : :%s/ *$//g
그리고 이렇게 생성된 소스 맨 앞에 CREATE OR REPLACE PROCEDURE 등을 붙여서 각 프로시져 등의 생성 스크립트로 사용할 수 있게 된다.

◈ 오류 내역출력

SHOW ERRORS


직전에 발생한 오류 내역 출력

◈ 숫자 출력 범위 늘리기

SET NUM 15


숫자를 15자리까지 출력

◈ 쿼리 결과를 셸 스크립트로 자동 저장하기

#!/bin/sh
# 오늘 날짜를 셸 변수로 지정
TODAY=`date +"%Y%m%d"`

sqlplus username/password << ENDSQL
-- 아래는 출력시 불필요한 형식 꾸미기가 안들어가게 한다.
SET ECHO OFF
SET NEWPAGE 0
SET SPACE 0
SET PAGESIZE 0
SET FEEDBACK OFF
SET HEADING OFF
SET TRIMSPOOL ON

SPOOL 저장할파일_${TODAY}_ORIG
SELECT COL1 || '|' || COL2 || '|' || COL3 -- 실행할 쿼리
FROM MYTABLE;
SPOOL OFF
QUIT
ENDSQL

# 처음과 마지막 쿼리 잔재 제거. 일단 스풀을 실행해보고나서 파일 위,아래에 추가되는
# 불필요한 줄수를 알아본다. (여기서는 위에 2줄과 맨 아래 1줄)
sed -e "1,2d" -e "\$d" 저장할파일_${TODAY}_ORIG > 저장할파일_${TODAY}

# 최종적으로 "저장할파일_${TODAY}"만 남겨둔다
rm 저장할파일_${TODAY}_ORIG


위와 같은 내용으로 셸 스크립트를 만들면 SQL*Plus 로 쿼리 결과를 특정한 형식(여기서는 각 컬럼을 세로 바(|)로 나눈 형식)으로 뽑아낼 수 있다.
그리고 이 경우 셸 환경 변수 값을 TODAY 처럼 SQL 쿼리 문장에 삽입하는 것이 가능하다.

◈ 쿼리 수행 시간 알아내기

SET TIMING ON


이렇게 설정하고 쿼리를 날리면 쿼리 수행시간도 함께 출력된다.

◈ DBMS_OUTPUT.* 으로 출력되는 양 조절

SET SERVEROUTPUT ON SIZE 4000;
Execute DBMS_OUTPUT.PUT_LINE(SYSDATE

반응형

'ORACLE > SQL' 카테고리의 다른 글

ROLLUP 함수  (0) 2009.07.08
Oracle sum() over() - 누적계산  (0) 2009.06.12
ORACLE START WITH, CONNECT BY  (3) 2009.04.02
SQL 실행순서  (0) 2009.02.24
다중 행(Multiple-Row) 서브쿼리 IN, NOT IN, ANY, ALL, EXISTS  (0) 2009.02.24
Posted by [PineTree]
ORACLE/SCRIPT2009. 6. 10. 16:31
반응형
매일 보거나 일정한 간격으로  볼려면 cron에  등록해서 돌리면 된다.


#!/bin/sh
# 오늘 날짜를 셸 변수로 지정
TODAY=`date +"%Y%m%d"`

sqlplus "/as sysdba" << ENDSQL

SET LINESIZE 500
COLUMN TableSpaceName FORMAT A15
COLUMN "전체 용량" FORMAT A10
COLUMN "사용량" FORMAT A10
COLUMN "사용량 비율" FORMAT A12
COLUMN "남은 공간" FORMAT A12
COLUMN "남는 공간 비율" FORMAT A15
COLUMN CheckDate FORMAT A10
column date_column new_value today_var

SPOOL DBSIZE_${TODAY}_magic.txt


select  TableSpaceName
        ,sum(TotalMemory)||'MB' as "전체 용량"
        ,sum(UsedMegaBytes)||'MB' as "사용량"
        ,round(100*(sum(UsedMegaBytes))/sum(TotalMemory),0)||'%' as "사용량 비율"
        ,(sum(TotalMemory)-sum(UsedMegaBytes))||'MB' as "남은 공간"
        ,100-round(100*(sum(UsedMegaBytes))/sum(TotalMemory),0)||'%' as "남는 공간 비율"
        ,SYSDATE CheckDate
from (
SELECT
           A.TABLESPACE_NAME TableSpaceName,
           ROUND(A.BYTES / 1024 / 1024, 0) TotalMemory,
           ROUND(((A.BYTES - SUM(NVL(B.BYTES,0)))) / 1024 / 1024, 1) UsedMegaBytes,
           ROUND((SUM(NVL(B.BYTES,0))) / 1024 / 1024 ,1) FreeMegaBytes,
           ROUND((SUM(NVL(B.BYTES,0)) / (A.BYTES)) *100 ,1) FreePercent,
           A.FILE_NAME DataFile,
           SYSDATE CheckDate
FROM
   DBA_DATA_FILES A RIGHT OUTER JOIN DBA_FREE_SPACE B ON (A.FILE_ID = B.FILE_ID)
GROUP BY A.TABLESPACE_NAME, A.FILE_NAME, A.BYTES
)
group by TableSpaceName
order by 1;
SPOOL OFF

ENDSQL

반응형
Posted by [PineTree]
ORACLE/TroubleShooting2009. 6. 9. 10:42
반응형
리스너 로그 파일에  아래와 같은 메시지의 흔적이 보여 메타링크를 찾아봤습니다.

WARNING: Subscription for node down event still pending


역시나 올해 1월 8일에 메타링크에 이미 공지된 내용이네요. 10g 에서만 문제되는 듯합니다 ^^

오라클 리스너 파일에 아래 파라미터를 추가하면 되네요..

SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF





출처: 오라클 메타링크


10G LSNR: 'Warning: Subscription For Node Down Event Still Pending' In Listener Log




Applies to:

Oracle Net Services - Version: 10.1.0.2.0 to 11.1.0.7.0
This problem can occur on any platform.
Checked for relevance on 08-JAN-2009.
This issue affects only 10g and newer listeners.


Symptoms

You are receiving the following warning messages in the listener.log file constantly:
'WARNING: Subscription for node down event still pending' 


Changes
This may be a new installation or a recent upgrade to 10g or newer.


Cause
These messages are related to the Oracle TNS Listener's default subscription to the Oracle Notification Service (ONS). In a non-RAC environment it is recommended to disable this subscription.  
This feature was introduced in Oracle 10g.


Solution

Set the following parameter in the listener.ora:
SUBSCRIBE_FOR_NODE_DOWN_EVENT_<listener_name>=OFF

Where <listener_name> should be replaced with the actual listener name configured in the
LISTENER.ORA file.

SUBSCRIBE_FOR_NODE_DOWN_EVENT_<listener_name> parameter is to be placed by istelf on an empty line.

It will be necessary to restart or reload the listener following the addition of this parameter.

This will prevent the messages from being written to the log file and may also prevent the TNS
Listener from hanging periodically.  See Note 340091.1

Please Note: Setting SUBSCRIBE_FOR_NODE_DOWN_<listername> to OFF disables a necessary RAC functionality. The above workaround is recommended only for non-RAC environments.
The issue may be present in all 10g and newer installations.


반응형
Posted by [PineTree]
ORACLE/INSTALL2009. 5. 27. 16:02
반응형
vi /etc/system


forceload:sys/shmsys  
forceload:sys/semsys
set shmsys:shminfo_shmmax=2147483648
set shmsys:shminfo_shmmin=1
set shmsys:shminfo_shmmni=100 
set shmsys:shminfo_shmseg=10
set semsys:seminfo_semmni=100 
set semsys:seminfo_semmsl=256 
set semsys:seminfo_semmns=500 
set semsys:seminfo_semopm=100 
set semsys:seminfo_semvmx=32767 

# groupadd -g 101 oinstall
# groupadd -g 102 dba    
# useradd -m -d /u0/oracle -g oinstall -G dba -u 103 -s /bin/bash oracle


.bash_profile

PS1='$PWD  $'
umask=022
export EDITOR=vi
export LANG=C
export ORACLE_BASE=/u0/oracle
export ORACLE_HOME=$ORACLE_BASE/product/9.2.0/db_1
export ORACLE_SID=ring
export ORACLE_TERM=vt100
export PATH=$PATH:$ORACLE_HOME/bin:/bin:/usr/bin:/sbin:/usr/ccs/bin:/usr/ucb
#export SHLIB_PATH=$ORACLE_HOME/lib:/usr/lib:$ORACLE_HOME/network/lib (HP 용)     
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:$ORACLE_HOME/network/lib
#export LIBPATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32:/usr/lib:/lib:/usr/ccs/lib (AIX 용)
export NLS_LANG=AMERICAN_AMERICA.KO16KSC5601
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export TNS_ADMIN=$ORACLE_HOME/network/admin
export DISPLAY=220.76.205.26:0.0

패치셋 적용후
db생성시에  
만약 13% 쯤에 에러메시지와 코드가 뜬다면 무시해도 된다.
물론 내용이 ORA-29807  Specified Operator does not exist. 일때 말이다.

listener.ora
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME =/u0/oracle/product/9.2.0/db_1)



      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ring )(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )
 


반응형

'ORACLE > INSTALL' 카테고리의 다른 글

LINUX ORACLE 10G 패키지  (0) 2009.08.04
LINUX ORALCE 10G설치  (0) 2009.08.04
오라클 삭제 방법  (0) 2009.03.18
CentOS 5.2에 Oracle 9i 설치하기  (0) 2009.02.23
HP-UX 11.11(64bit)에 Oracle 9.2.0.1 설치하기  (0) 2009.01.21
Posted by [PineTree]
ORACLE/TUNING2009. 5. 8. 14:05
반응형
덤프 : 일회성으로 그 순간의 상태정보를 가집니다.
트레이스 : 10046, 10053 , 4031 등의 이벤트를 걸게 되면 순간의 상태(immediate) 또는
세션이 close될때까지의 정보(trace name context forever) 를 trace로
남깁니다. 4031같은 오라클 내부 에러에 대해서는 immediate,
10046, 10053 처럼 sql, plan에 대해서 확인하는 것은 forever로
하지요.

참고로 udump 에 없다고 해서 고민하지 말구요. bdump를 찾아보세요.
background process를 이용해서 dump를 뜨는 경우에는 bdump에 나오겠죠.

- 문제발생시 덤프 뜨는 방법
문제발생 세션에 대한 10046 event, truss output, errorstack dump
OS engineer의 system state dump
system state dump 2~3회
hang analyze dump 2~3회
system state dump 1~2회
hang analyze dump 1~2회

- 에러스택 뜨기(꼭 수행할 때마다 exit나와서 다시 서버에 접속해서 뜰 것)
oradebug setospid XX
oradebug unlimit
oradebug dump errorstack 3
oradebug tracefile_name

- hanganalyze, systemstate dump 뜨기(꼭 수행할 때마다 exit나와서 다시 서버에 접속해서 뜰 것)
oradebug setmypid
oradebug unlimit
oradebug hanganalyze 3
oradebug dump systemstate 10

- oradebug로 event 걸기(10046 event는 sql 트레이스 정보, 10053은 optimizer에 대한 트레이스 정보)
oradebug setospid XX
oradebug unlimit
oradebug event 10046 trace name context forever, level 12;
oradebug event 10053 trace name context forever, level 1;
oradebug tracefile_name
oradebug event 10046 trace name context off;
oradebug event 10053 trace name context off;

- 문제가 있는 세션의 process state dump 뜨기
oradebug setospid
oradebug unlimit
oradebug dump processstate 10

- alter session, alter system 명령으로 event걸기(session 이 logout할때까지 수행됨)
alter session set timed_statistics=true;
alter session set max_dump_file_size=unlimited;
alter session set tracefile_identifier='10046evnt1';
alter session set events '10046 trace name context forever , level 12';
alter session set events '10053 trace name context forever , level 1';
alter session set events '10046 trace name context off';
alter session set events '10053 trace name context off';

- sqlplus 로 접속이 불가능할 경우 백그라운드 프로세스의 systemstate 덤프 뜨기
(위험한 명령임, 서비스 중엔 사용금지, 도저히 문제 발생으로 smon 프로세스를 죽이던지 해서 DB를 내리기전에 수행)

OS debuger를 사용하면 특정 process에게 특정 function을 호출하도록 할 수
있습니다. 이러한 점을 이용하면 ORACLE에서 systemstate dump를 요청할 때
사용하는 ksudss function을 호출할 수 있으며, 절차는 아래와 같습니다.

1. 먼저 attach할 ORACLE process에 대한 OS PID를 알아 둡니다.
(여기서는 PMON process를 예를 들었습니다.)
$ ps ?ef | grep $ORACLE_SID | grep pmon
aprdbms 1432 1 0 23:14:50 ? 0:00 ora_pmon_APR920U6
2. Pmon process에 debuger를 사용하여 attach합니다.
$gdb $ORACLE_HOME/bin/oracle 1432
3. Ksudss function을 호출합니다.
gdb) call ksudss (10)
4. Pmon은 ksudss를 호출하여 systemstate dump를 받게 됩니다.
attach한 process가 ksudss function call 요청을 받아 들이기 위해서는
system call을 수행 중에 있지 않아야 합니다.

- alter session 명령으로 ORA-4031 에러에 대한 event 걸기(immediate로 즉각 떨어지도록)
alter session set max_dump_file_size=unlimited;
alter session set tracefile_identifier='4031evnt1';
alter session set events '04031 trace name errorstack level 3';
alter session set events '04031 trace name systemstate level 10';
반응형
Posted by [PineTree]
ORACLE/ADMIN2009. 4. 22. 09:43
반응형

LOB, LONG, LONG RAW 데이터 타입 간의 비교


PURPOSE
-------------
이 문서는 LOB 데이터 타입과 LONG이나 LONG Raw 데이터 타입의 차이점 및 LOB 사용에 따라 발생하는 제약 사항을 기술하는 데 목적이 있다.

Explanation
---------------
LOB (Large Object)는 LONG이나, LONG RAW 데이터 타입과 유사하지만, 일부 차이점이 존재한다.

1.
테이블의 한 ROW에 여러 LOB 컬럼이 있을 수 있는 반면, LONG 또는 LONG RAW 컬럼은 한 ROW에 하나 밖에 사용될 수 없다.

2. LOB는 사용자 정의 데이터 타입 (user-defined datatype)의 속성 (attribute) 으로 사용될 수 있는 반면, LONG이나 LONG RAW는 속성으로 사용될 수 없다.

3.
LONG 또는 LONG RAW는 값 전체가 테이블 내에 저장이 되는 반면, LOB는 테이블 컬럼
내에 LOB locator만 저장이된다.
BLOB과 CLOB (내부 LOB) 데이터는 별도의 테이블스페이스에 저장시킬 수 있으며, BFILE (외부 LOB) 데이터는 데이터베이스 외부의 별도 파일로 존재한다. 따라서 LOB 컬럼을 액세스할 경우에는, locator 값만 return되는 반면, LONG이나 LONG RAW 컬럼을 액세스할 경우에는, 전체 값이 return된다.

4. LOB 데이터는 4GB까지 저장이 가능하며, BFILE 컬럼이 가리키는 파일 크기는 4GB 이내에서 OS에서 지원하는 최대 크기까지 가능하다. 액세스 가능한 범위는 1부터 (232-1) 까지이다. 한편 LONG이나 LONG RAW 데이터 타입에서는 2GB 까지만 지원이 가능하다.

5. 데이터에 대한 랜덤 액세스 기능 또는 데이터 조작을 할 경우 LOB를 사용하는 것이 LONG 또는 LONG RAW를 사용하는 것에 비해 훨씬 많은 기능을 사용할 수 있다.

6.
LOB는 랜덤 액세스가 가능한 반면, LONG 타입에 저장된 데이터는 처음부터 원하는 지점까지 순차적으로 읽어 처리하여야 한다.

7.
LOB 데이터에 대한 replication을 local 또는 remote에서 수행할 수 있는 반면, LONG / LONG RAW 컬럼 데이터는 replication이 되지 않는다.

8.
LONG 컬럼의 데이터는 TO_LOB()라는 함수를 사용하여 LOB로 변환 가능하지만,
LOB를 LONG / LONG RAW로 변환 하는 기능은 제공되지 않는다
.



한편, LOB 사용을 하는데 다음과 같은 제약 사항이 따른다.

1. LOB는 클러스터 테이블에서는 사용할 수 없으며, 따라서 클러스터 키로도 사용할 수 없다.

2.
LOB 컬럼은 GROUP BY, ORDER BY, SELECT DISTINCT 등에 사용할 수 없으며
JOIN 에도 사용할 수 없다.
그러나 LOB 컬럼을 사용하는 테이블에 대한 UNION ALL은 지원이 된다. UNION MINUS나 SELECT DISTINCT는 OBJECT TYPE의 MAP이나 ORDER 함수가 정의된 경우 사용할 수 있다.

3. LOB 컬럼은 ANALYZE ... COMPUTE/ESTIMATE STATISTICS 명령 사용 시에도
analyze 되지 않는다.

4. LOB는 파티션된 IOT (Index Organized Table)에는 사용할 수 없다. 그러나
파티션 되어 있지 않은 IOT에는 사용할 수 있다.

5. LOB는 VARRAY에는 사용할 수 없다.

6. NCLOB은 OBJECT TYPE의 속성(attribute)으로 사용될 수 없으나, 메소드 정의를
하는 데는 NCLOB 파라미터를 사용할 수 있다.


Reference Documents
-------------------
Oracle8i Application Developer's Guide
Note:107441.1

출처 : Technical Bulletin



반응형
Posted by [PineTree]
ORACLE/ADMIN2009. 4. 15. 16:04
반응형
☞ 데이터베이스 링크(Database Link)

   데이터베이스 링크는 클라이언트 또는 현재의 데이터베이스에서 네트워크상의 다른 데이터베이스에
접속하기 위한 접속 설정을 정의하는 오라클 객체 입니다.


◈ 우선 고려되어야 사항은 ORACLE INSTANCE가 두개이상이고 각각의 HOST NAME과 ORACLE_SID는
    다르고  NLS_CHARACTER_SET은 동일하게 되어 있어야 합니다.

  - 만약 같은 MECHINE에서  INSTANCE의 ORACLE_SID가 같다면 TNS ERROR가 발생 합니다.
  - 또한 미래를 위해 다른 MECHINE이라 할지라도 ORACLE_SID는 규칙에 의해 다르게 가져가는
    것이 좋습니다.
  - 그리고 NLS_CHARACTER_SET이 동일하게 되어 있지 않으면 DATA 입출력시 ?????로 나타납니다.
  - 데이터베이스 링크로 연결되는 서버에 리스너가 꼭 띄어져 있어야 됩니다


[Syntax]


 - PUBLIC : 오라클 시노님과 마찬가지로 PUBLIC 옵션을 사용하면 공용 데이터베이스 링크를 생성
                할 수 있습니다.  PUBLIC 옵션을 사용하지 않으면 링크를 생성한 자신만 사용 할 수 있습니다.

 - link_name : 데이터베이스 링크의 이름을 지정 합니다.

 - service_name : 네트워크 접속에 사용할 오라클 데이터베이스 네트워크 서비스명을 지정 합니다.

 - username, password : 오라클 사용자명과 비밀번호를 지정 합니다.

 

☞ 데이터베이스 링크의 사용

-- 데이터베이스 링크 생성 예제

SQL>CREATE DATABASE LINK test_server
       CONNECT TO scott IDENTIFIED BY tiger USING ’testdb’;

 이 데이터베이스 링크 생성 문장에서 USING다음에 오는 testdb는 tnsnames.ora파일에 정의되어
있어야 합니다.

====== tnsnames.ora =====
testdb =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 211.109.12.123)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = oracle)
    )
  )
=========================
 
-- 데이터베이스 링크를 통한 데이터의 조회..
SQL>SELECT ename FROM emp@test_server;
 
 
--시노님을 생성해서 사용하면 더욱더 편리하게 사용 할 수 있습니다.
SQL> CREATE SYNONYM emplink FOR emp@test_server;  
 
 
-- 시노님을 통한 조회
SQL>SELECT ename FROM emplink;    
 
 
데이터베이스 링크의 삭제..
SQL>DROP DATABASE LINK test_server;

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


반응형
Posted by [PineTree]