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권한부여가 가능해짐
'Programer Life'에 해당되는 글 53건
- 2011.10.04 원격지에서 SYSDBA 권한 USER 사용 방법
- 2011.04.06 매월 몇째주 몇요일에 구동하는 Script 만들기!
- 2011.03.24 REF CURSOR 호출 방법
- 2011.03.23 ORA-29285: file write error
- 2011.01.03 AUTONOMOUS_TRANSACTION 처리
- 2010.12.28 cURL 라이브러리 설치부터 컴파일까지..
- 2010.12.22 CURL 설치방법
- 2010.03.04 순환관계(Connect by) 의 PLAN 차이
- 2010.03.04 히든 파라미터(Hidden parameter) 조회 및 변경
- 2010.02.25 MView 엠뷰 준비, 생성, 자동리플래시, Materialized View Auto Manual Refresh
첫째주 금요일마다 구동해주세욧! 이라고 요청이오면.....
우선 cron에 등록하기
0 21 1-7 * * /파일패스/...
Shell 파일엔
setenv CHECK_DATE `date +%w`
if($CHECK_DATE == 5) then
실행와아아아아~ 블라블라~
endif
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;
/
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)
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) BEGIN |
Function
CREATE OR REPLACE FUNCTION F_GET_FILEINFO( I_FILE_NAME in VARCHAR2) RETURN VARCHAR2 IS 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) /************************************************** 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
[출처] AUTONOMOUS_TRANSACTION 처리|작성자 승제만세
기나긴 여정이였습니다. 흑..
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 풀 예시>
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
하지만 위 쿼리와 아래쿼리는 순환구조의 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 내 파라미터명 = 변경값
MView 엠뷰 준비, 생성, 자동리플래시, Materialized View Auto Manual Refresh
2010. 2. 25. 11:15 |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 |
에서 질문하고 답변 얻고 해서 정리했어요~