블로그 이미지
신비마마

태그목록

공지사항

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

calendar

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 31

원격지에서 SYSDBA 권한 USER 사용 방법

2011. 10. 4. 13:25 | Posted by 신비마마


1. 해당 서버내 원격지에서 SYSDBA 권한을 가진 USER가 존재하는지 조회
 SQL > SELECT *
           FROM V$PWFILE_USERS;

2. 존재하지 않을 경우 서버의 oracle 계정으로 들어가 as sysdba 로 접속하여 권한부여
  SQL > grant sysdba to system;

3. ORACLE Error가 발생할 경우가 있는데 이유는 패스워드파일이 존재하지 않기 때문
ERROR at line 1:
ORA-01994: GRANT failed: password file missing or disabled

4. ORACLE Password file 생성
  orapwd file=$ORACLE_HOME/dbs/orapwdevdb password=oracle entries=5
   - devdb는 SID, entries는 동시에 접속가능한 session 수, oracle은 DB내부의 sys의 password가 아니라 외부에서 접속할때 인증에 필요한 암호이다.

해당파일을 생성하면 dba권한부여가 가능해짐


첫째주 금요일마다 구동해주세욧! 이라고 요청이오면.....

우선 cron에 등록하기
0 21 1-7 * * /파일패스/...

Shell 파일엔
setenv CHECK_DATE  `date +%w`
if($CHECK_DATE == 5) then
       실행와아아아아~ 블라블라~
endif
 

REF CURSOR 호출 방법

2011. 3. 24. 17:49 | Posted by 신비마마
Declare

out_code varchar2(11);
out_msg  varchar2(100);
type ref_cur is ref cursor;
r_cur ref_cur;

begin
r_cur := PackageName.FunctionName(Parameters...);

dbms_output.put_line(out_code); 
dbms_output.put_line(out_msg);  

end;

ORA-29285: file write error

2011. 3. 23. 17:48 | Posted by 신비마마
ORA-29285: file write error
Cause:Failed to write to, flush, or close a file.
Action:Verify that the file exists, that it is accessible, and that it is open in write or append mode.

내가 겪은 원인은 Maxline 사이즈를 초과한 라인을 입력하려고 시도했기때문에 문제가 생겼었다.

UTL_FILE.FOPEN(
location IN VARCHAR2,
filename IN VARCHAR2,
open_mode IN VARCHAR2,
 max_linesize IN BINARY_INTEGER) RETURN file_type;

max_linesize = Maximum number of characters per line, including the newline character, for this file.
(minimum value 1, maximum value 32767). The default is approximately 1000bytes. (Tom says 1022..) 

max_linesize를 지정하지않으면 대략 1000 byte 로 잡히기때문에 위와같은 오라클에러를 떨굼.ㅠㅠ

하여 아래와 같이 변경!!

v_file := utl_file.fopen('디렉토리명', file_name, 'w')  
               --------> v_file := utl_file.fopen('디렉토리명', file_name, 'w', 32767) 

 

AUTONOMOUS_TRANSACTION 처리

2011. 1. 3. 19:49 | Posted by 신비마마

Function 사용도중 아래와 같은 에러를 만나게 되는경우가 있다.

 

ORA-14551: 질의 안에 DML 작업을 수행할 수 없습니다.

 

이메세지는 Function 문에서 DML(Insert, Update, Delete)문을 사용하지 못하는 경우에 발생하는 오류인데

이 오류를 제거하려면

DML을 처리하는 문법은 Procedure에서 값을 리턴하는 문법은 Function에서 각각 처리하도록 변경해준다.

 

Procedure

CREATE OR REPLACE PROCEDURE P_GET_FILEINFO(I_FILE_NAME IN VARCHAR2, O_MSG OUT VARCHAR2)
IS

BEGIN
  --DML 수행
  COMMIT;
  
  EXCEPTION 
  WHEN NO_DATA_FOUND THEN
   --오류처리
   ROLLBACK;
  WHEN OTHERS THEN
    --오류처리
   ROLLBACK;
  END;
END

 

Function

CREATE OR REPLACE FUNCTION F_GET_FILEINFO( I_FILE_NAME in VARCHAR2)  RETURN VARCHAR2 IS
O_MSG VARCHAR2(2000);
BEGIN
            
        P_GET_FILEINFO(I_FILE_NAME, O_MSG);
        RETURN O_MSG;

END F_GET_FILEINFO ;

 

이렇게 처리해도 마찬가지로

ORA-14551: 질의 안에 DML 작업을 수행할 수 없습니다.

에러가 발생하는데, 이럴경우에는 트랜잭션을 Procedure / Function을 분리해 준다.

Procedure에 아래 문법을 추가해준다.

CREATE OR REPLACE PROCEDURE P_GET_FILEINFO(I_FILE_NAME IN VARCHAR2, O_MSG OUT VARCHAR2)
IS

/**************************************************
    Main Transaction에 영향없이 Commit/Rollback 처리
***************************************************/
PRAGMA AUTONOMOUS_TRANSACTION;

BEGIN

 

이상은 Oracle 10g에서 테스트 되었습니다.

참고

http://blog.naver.com/yooysj?Redirect=Log&logNo=120065898810

http://blog.naver.com/supernam?Redirect=Log&logNo=24012181

http://blog.naver.com/jjaemani?Redirect=Log&logNo=50001741324



[출처] 승제만세 By Chostar : http://manseya.blog.me/50081264080

 

cURL 라이브러리 설치부터 컴파일까지..

2010. 12. 28. 09:47 | Posted by 신비마마

기나긴 여정이였습니다. 흑..

1. HP 머신에서 설치(UNIX)
cd /usr/local/src
-> 원하는 아무 디렉토리 가능

wget http://curl.haxx.se/download/curl-7.19.0.tar.gz  
-> HP-UX positive B.11.11 버전에서는 compile 시 error 1405: "/opt/ansic/lbin/ccom" terminated abnormally with signal 11. 에러가나오는데 패치를 HP에서는 패치를 하라고한다-_-.. 그래서 curl-7.14.0.tar.gz 으로 다운받아서 설치하니 complie OK! 

gunzip curl-7.19.0.tar.gz
tar zxf curl-7.19.0.tar
cd curl-7.19.0
./configure --prefix=/usr/local --with-ssl=/usr/include/openssl
make
make install

2. Makefile 구성
USER_INC =      -I/usr/local/include    \
USER_LIBS =     -L/usr/local/lib                                \
                        -lcurl(소문자 L)  -> 얘를 빼니..
/usr/ccs/bin/ld: (Warning) At least one PA 2.0 object file (test_get.o) was detected. The linked output may not run on a PA 1.x system.
/usr/ccs/bin/ld: Unsatisfied symbols:
   curl_global_cleanup (code)
   curl_easy_setopt (code)
   curl_easy_getinfo (code)
   curl_easy_cleanup (code)
   curl_easy_strerror (code)
   curl_easy_perform (code)
   curl_easy_init (code)
   curl_global_init (code)
*** 오류 종료 코드 1

위와같은 에러 작렬..-_- 반나절을 낑낑됨 ㅠㅠ

<Makefile 풀 예시>

CURL 설치방법

2010. 12. 22. 15:17 | Posted by 신비마마
유닉스에서 어떻게 설치할까요~?

cd /usr/local/src
wget http://curl.haxx.se/download/curl-7.19.0.tar.gz
tar zxf curl-7.19.0.tar.gz
cd curl-7.19.0
./configure --prefix=/usr/local --with-ssl=/usr/include/openssl
make
make install

순환관계(Connect by) 의 PLAN 차이

2010. 3. 4. 17:49 | Posted by 신비마마
동일한 쿼리, 조회 테이블의 인덱스 구조 및 데이터 분포도도 모두 동일하다.
하지만 위 쿼리와 아래쿼리는 순환구조의 plan부분이 차이가 보인다.

정확한 문제점은 무엇인지는 모르지만 두개의 오라클은 약간의 버전차이가 있다.
FTS가 나는 쪽은 오라클 버전이 낮다.

- 오라클 버전 10.2.0.4.0

- 오라클 버전 10.2.0.1.0


< 해결 방법 >

히든 파라미터(Hidden parameter) 중 '_old_connect_by_enabled' 의 값을 true로 변경한다.
(히든 파라미터이므로 spfile수정 후 DB Shutdown하여 적용시킨다.)

히든 파라미터 조회 방법은 아래 게시물을 참고!

1. 히든 파라미터(Hidden parameter) 조회

- sys 계정으로 접속해야 볼 수 있음.
- sqlplus internal 또는 sqlplus '/as sysdba'  등의 Admin계정

SELECT KSPPINM
     , KSPPSTVL
  FROM X$KSPPI X, X$KSPPCV Y
 WHERE X.INDX = Y.INDX
   AND X.KSPPINM LIKE '%히든 파라미터명%'
   AND SUBSTR(X.KSPPINM, 1, 1) = '_' -- 히든 파라미터는 파라미터명 맨앞에 '_'가 붙어있음

2. 히든 파라미터(Hidden parameter) 변경 또는 수정

- 세션 수정 : ALTER SESSION SET "파라미터명" = 변경값
- 동적파일 수정 : ALTER SYSTEM SET "파라미터명" = 변경값 SCOPE=SPFILE;
- init 파일 수정 :    initSid명.ora 내 파라미터명 = 변경값

1. 준비 사항

  - 유저에게 권한 부여

    : grant create materialized view to 유저명

  - Rewrite 기능 Enabled

    : ALTER SYSTEM SET QUERY_REWRITE_ENABLED='TRUE';

  - 옵티마이저 모드 변경

    : ALTER SESSION SET OPTIMIZER_MODE='FIRST_ROWS';

  - Job Processes 설정

    : C:\oracle\product\10.2.0\db_1\srvm\admin 안에 있는 init.ora 파일을 열어서

    : job_queue_processes = 10
     # job_queue_processes = 10 #datawarehouse

     # job_queue_interval = 10
     job_queue_keep_connections = true

 

2. 생성

  - Create 소스 테이블 ( F_SALES, D_ITEM)

    : CREATE TABLE F_SALES (
            YMD_CD NUMBER not null,
            ITEM_CD VARCHAR2(20) not null,
           EMP_NO NUMBER not null,
           SALE_AMT NUMBER,
           SALE_QTY NUMBER);

    : CREATE TABLE D_ITEM (
           ITEM_CD  VARCHAR2(20),
           ITEM_NM  VARCHAR2(20));

  - 테스트 값 입력

    : insert into f_sales values (20080509, 'ORA0001', 10, 15000000, 1); commit;

    : insert into d_item values ('ORA0001', 'BIEE_101332'); commit;

  - Mview 로그 만들기 ( Auto Refresh를 위해 필요)

    : create materialized view log on F_SALES with rowid including new values;

  - Mview 생성

    : CREATE MATERIALIZED VIEW MV_SALES
      USING INDEX
      REFRESH FORCE
      --START WITH sysdate
      --NEXT SYSDATE+(1/24/60)
      WITH ROWID
      ENABLE QUERY REWRITE
      AS
     SELECT A.YMD_CD YMD_CD, A.EMP_NO EMP_NO, B.ITEM_NM, SUM(A.SALE_AMT) SALE_AMT, SUM(A.SALE_QTY) SALE_QTY
     FROM F_SALES A, D_ITEM B
     WHERE A.ITEM_CD=B.ITEM_CD
     GROUP BY A.YMD_CD, A.EMP_NO, B.ITEM_NM

  - Mview 수정 ( 오라클 버그로 인해 위 주석처리 한 부분을 수정해줘야 함, 1분에 한번 리플래시되도록)

    : alter MATERIALIZED VIEW MV_SALES1 REFRESH FORCE START WITH sysdate NEXT SYSDATE+(1/24/60) WITH ROWID;

 

3. 검증

  - Job이 제대로 등록되었는지 확인( LAST_DATE 와 NEXT_DATE 를 확인한다.)

    : select * from user_jobs;

  - Mview가 제대로 생성되었는지 확인

    : SELECT * FROM MV_SALES;

  - Mivew Refresh 기능 확인을 위해 INSERT

    : insert into f_sales values (20080509, 'ORA0001', 8, 15000000, 1); commit;

  - Refresh 확인

    : Job에 나와있는 Next_date 이후 시간에 SELECT * FROM MV_SALES;

 

 

4. 참고

  - Mview Log 확인하기

    : select * from dba_mview_logs

- 수동으로 Refresh 하기

    : execute dbms_refresh.refresh('"BKMIN"."MV_SALES"');

 

작성 : 본인

도움 : Prodba 카페의 '용돌이' 님

출처 : http://cafe.naver.com/prodba

에서 질문하고 답변 얻고 해서 정리했어요~