생계/OERR2023. 7. 27. 17:52

오라클 인스턴스 재기동시 alert log 에 여러 내용들이 찍히는데 

patch 정보도 같이 올라온다. 이때 temp 사이즈가 너무 작으면 patch 정보 못담아서 에러가 나기도 한다. 

보통 적당하게 temp 사이즈를 잡기 때문에 이부분에서 에러날일이 없지만 테스트 용으로 복사하면서 템프를 너무 작게 잡을경우 발생할수 있다 

 

반응형
Posted by 돌고래트레이너
생계/Oracle2023. 7. 3. 13:48

오라클 히든 파라미터 체크 

SELECT x.ksppinm "Parameter",
              Y.ksppstvl "Session Value",
              Z.ksppstvl "Instance Value"
  FROM x$ksppi X,
             x$ksppcv Y,
             x$ksppsv Z
WHERE x.indx = Y.indx
      AND x.indx = z.indx
      AND x.ksppinm LIKE '/_%' escape '/'
order by x.ksppinm;

위 쿼리로 현재 설정된 히든 파라미터 정보를 확인해보자 

반응형
Posted by 돌고래트레이너
생계/OERR2023. 6. 10. 18:12

ORA 02020 too many database link 오류

원인 : 동시에 연결된 db link 의 갯수가 parameter 에 설정된 값보다 많은 경우 발생하는 에러

해결방안 : 

     1. 링크를 종료하는 습관 

         rollback; 혹은 commit;

    2. 설정값 늘리기 

      select name, value from v$parameter where name='open_links';

      alter system set open_links=100 scope=spfile;

 

반응형
Posted by 돌고래트레이너
생계/튜닝2023. 6. 10. 18:09

테이블 통계정보가 부정확 할 경우 실행계획이 잘못 생성되어 성능에 이슈가 발생할 수 있다. 

그래서 보통 dbms_stats 유틸로 gather_table_stat 패키지를 실행해서 통계정보를 수집하는데 

바뀐 통계정보가 바로 반영되어 새로운 실행계획이 바로 적용되지 않을 수 있는데 

이 경우 no_invalidate=> false 옵션을 사용하면 즉시 cursor 가 무효화 되어 새로운 실행계획을 바로 적용할수 있다. 

* no_invalidate=> true 는 커서를 무효화 하지 않겠단 뜻으로 cursor 가 shared pool 에서 flush 된 후 reload 될때까지 변경되지 않는다. 

다만 rac 환경에서는 롤링이 되지않아 특정 노드에서만 쿼리가 느린 현상이 발견 됨.

"_optimizer_invalidation_period" 에 적용된 시간이 지나서야 모든 노드의 cursor 가 무효화가 된다. 

반응형
Posted by 돌고래트레이너
생계/OERR2023. 6. 8. 11:15

운영 상태에서 인덱스를 생성, 변경시 online 옵션은 매우 유용하지만 가끔 의도치 않는 상황을 만들기도 한다. 

의도치 않거나 혹은 의도해서 해당 프로세스를 kill 했을때 uncommit 된 트랜잭션이 정리가 되지 않는 상태로 오래 지속될수가 있다. 

08104, 00000, "this index object %s is being online built or rebuilt"
// *Cause:  the index is being created or rebuild or waited for recovering
//          from the online (re)build
// *Action: wait the online index build or recovery to complete

CREATE TABLE TEST_TAB(A INT, B VARCHAR2(10));
insert into TEST_TAB 
select dbms_random.value(1,1000000), 'A'
  from dual
 connect by level < 1000000;
 
CREATE INDEX IDX_TEST ON TEST_TAB(A)online;
 => cancel 

DROP INDEX IDX_TEST;

 => ORA-08104

08104, 00000, "this index object %s is being online built or rebuilt"
// *Cause:  the index is being created or rebuild or waited for recovering
//          from the online (re)build
// *Action: wait the online index build or recovery to complete

아래처럼 수동으로 상태를 정리해주자.
 
declare
v_result boolean;
begin
v_result := DBMS_REPAIR.ONLINE_INDEX_CLEAN(73252);  -- 인덱스의 object_id
end;
/



반응형
Posted by 돌고래트레이너
생계/Oracle2023. 5. 29. 22:05

 

oracle audit 파일 삭제

show parameter audit 으로 audit 파일 destination 확인 

 

1. os 명령어로 삭제하기 

find . -mtime +20 -type f -name "*.aud" -mtime +1  -exec rm -f {} \;

=> 수정한지 20 일 이상된 .aud 파일을 삭제 

 

2. 오라클 제공 util (DBMS_AUDIT_MGMT) 로 삭제 

-- INIT_CLEANUP ( PURGE JOB 생성 위해 필요)
BEGIN
DBMS_AUDIT_MGMT.INIT_CLEANUP(
AUDIT_TRAIL_TYPE => dbms_audit_mgmt.AUDIT_TRAIL_OS,
default_cleanup_interval => 24*7);  -- 1주일에 1번 실행
END;

-- 주기적으로 삭제하는 JOB 생성 
BEGIN
   DBMS_AUDIT_MGMT.CREATE_PURGE_JOB (
   AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_OS,
   AUDIT_TRAIL_PURGE_INTERVAL => 24*7,
   AUDIT_TRAIL_PURGE_NAME => 'STANDARD_OS_AUDIT_TRAIL_PURGE',
   USE_LAST_ARCH_TIMESTAMP => FALSE );
END;

-- 등록된 PURGE JOB 은 DBA_AUDIT_MGMT_CLEANUP_JOBS 뷰에서 확인가능

SELECT * FROM DBA_AUDIT_MGMT_CLEANUP_JOBS;

-- DBA_SCHEDULER_JOBS 에서도 확인 가능
SELECT *
  FROM DBA_SCHEDULER_JOBS 
 WHERE OWNER='AUDSYS';

-- 기타 AUDIT UTIL 관련 뷰
select * from DBA_AUDIT_MGMT_LAST_ARCH_TS;
select * from DBA_AUDIT_MGMT_CLEAN_EVENTS;

-- 등록된 PURGE JOB 삭제하기 

BEGIN DBMS_AUDIT_MGMT.DROP_PURGE_JOB('STANDARD_OS_AUDIT_TRAIL_PURGE'); END;

-- INIT CLEANUP 삭제하기 

BEGIN
  DBMS_AUDIT_MGMT.DEINIT_CLEANUP(
  AUDIT_TRAIL_TYPE  => DBMS_AUDIT_MGMT.AUDIT_TRAIL_OS);
END;

-- 1회성 AUDIT 삭제 

BEGIN
DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
   AUDIT_TRAIL_TYPE         =>  DBMS_AUDIT_MGMT.AUDIT_TRAIL_OS,
   use_last_arch_timestamp  =>  FALSE);
END;
 

audit 파일 지우는걸 이렇게 힘들게 지워야하나..

반응형
Posted by 돌고래트레이너
생계/OS2023. 5. 23. 17:17

- core 수 확인

cat /proc /cpuinfo | grep processor



- du depth

du -h --max_depth=1



- ftp전송후  command not found

$'\r': command not found 

 sed -i -e 's/\r$//' 대상파일



- file 첫줄 편집 

sed -i "1i\spool test.log" test.sql
echo -e "spool off\next; \n" >> text.sql





반응형
Posted by 돌고래트레이너
생계/튜닝2023. 5. 13. 19:15

 

-- 현재 AWR 설정 확인 (주기, TOPn )

SELECT *
  FROM DBA_HIST_WR_CONTROL
;

-- 각 interval 당 snapshot 확인 
SELECT *
  FROM DBA_HIST_ASH_SNAPSHOT
ORDER BY SNAP_ID DESC
;

-- snapshot 의 sql_id 별 stat 확인 
SELECT *
  FROM DBA_HIST_ACTIVE_SESS_HISTTORY
;
 

 ## 스냅샷 생성 및 삭제 

1. 스냅샷 생성

BEGIN DBNS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT
( [FLUSH_LEVEL => 'FLUSH_LEVEL']);
END;
/


2. 스냅샷 삭제 

BEGIN DBNS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE
( LOW_SNAP_ID => snap_id, HIGH_SNAP_ID => snap_id [DBID => dbid]);
END;
/

3. 스냅샷 설정 변경 

BEGIN DBNS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS
( [RETENTION => retention_time][, INTERVAL => interval_time]
 [, TOPNSQL => topn_sql_number]);
END;
/


4. 베이스라인 설정 

BEGIN DBNS_WORKLOAD_REPOSITORY.CREATE_BASELINE
( START_SNAP_ID => snap_id, END_SNAPID => snap_id,
BASELINE_NAME => 'baseline_name' [,DBID => dbid]
);
END;
/

 
5. 베이스라인 삭제  

BEGIN DBNS_WORKLOAD_REPOSITORY.DROP_BASELINE
( BASELINE_NAME => 'baseline_name' [,CASCADE => true|false][,DBID => dbid]
);
END;
/

반응형
Posted by 돌고래트레이너
정보/리뷰2023. 5. 7. 18:07

쿠팡플레이에 있는 영화 "The founder"  리뷰입니다. 

참고로 쿠팡 멤버쉽을 가입하면 쿠팡플레이를 무료로 사용 가능합니다. 멤버쉽 가입하고도 모르셔서 안보시는 분이 많네요..

가능한 스포는 적게, 그러나 실화 바탕이라 거의 다 아실듯 

 

- 영화제목의 아이러니 

영화 제목은 더 파운더(창립자) 입니다. 극중 주인공은 레이크 룩인데 그러면 레이크 룩이 창립자인가? 

하는 생각이 들 수 있는데, 영화에도 나오지만 그는 실제 창립자는 아니고 맥도날드 형제의 가게의 지분을 인수한 사람입니다. 그렇지만 지방의 그냥 그 동네 터줏대감 수준의 가게를 전국구 수준으로 키운 것은 그의 역할이 큽니다. 

그래서 그를 창립자는 아니지만 창립자로 부르는게 또 말이 안되지는 않는것 같습니다.

 

- 외판원 출신의 야망가 레이 크룩

그는 세일즈맨 출신으로 딱히 성공적인 삶을 살지도 않았습니다.

그가 파는 물건도 딱히 정해진 것이 아닌 이것 저것 되는대로 정해지면 그의 스킬을 이용해 파는 수준입니다.

세일즈를 하면서 돌아다이는 동안 멸시, 하대 받는 데 그 기간이 그의 성공에 대한 욕구를 자극시키게 됩니다.

 

- 맥도날드 형제

 레이크룩을 만나기 전에도 맥도날드는 이미 동네에서 잘나가는 맛집이었는데 주방의 동선을 최적화해서 자동화 시스템을 고안한 것이 그 비결이었다. 그것을 프랜차이즈화 하여 사업을 키워보자는 레이 크룩의 제안을 처음에는 거절했는데 이미 시도를 해봤는데 관리, 퀄리티 유지의 어려움을 겪은 후였던 것이다. 

 

- 맥도날드, 그 이름이 좋았다. 

결국 맥도날드 형제는 레이크룩의 프렌차이즈 제안을 받아들여 동업을 하게 되지만, 순진했던 형제는 레이크룩에게 사업의 주도권을 야금야금 뺏기고 결국엔 상표까지도 뺏기도 만다. 

내이름을 따서 만든 가게를 뺏겨서 내이름을 못쓰게 되는 기분은 어떤것일까? 건법이 있는 미국에서 살아남은 레이크룩이 대단하다.

레이크룩은 맥도날드를 인수하면서 상표변경을 시도하지 않았다. 맥 형제는 이미 사업의 비결을 다 알고있는데 왜 새로운걸 차리지 않았냐고 물어보는데 이에 레이크룩은 '맥도날드 라는 이름이 좋았다고' 말한다. 

그 대사에서 나는 뭔가 신선함을 느꼇다. 

맥도날드는 이름에 '버거' 가 들어가지 않지만 햄버거를 판다는 것을 모두가 알고 있다. 

이것이 노골적이지 않아 세련된 느낌이 있다. 버거킹도 그렇고 프랭크버거 도 그렇고 으례 햄버거 브랜드면 '버거' 를 이름에 넣게 되는데 이것과 차별화가 된다. 

또 하나 이름이 들어간 것에서 주는 신뢰감. 

간혹 사람 이름중에 '봉', '춘' 등 촌스럽다고 생각할수 있는 이름을 가진 사람이 있는데 사실 이부분은 자영업을 하는 사람들에게는 부러운 포인트가 될수도 있다. 이름을 알린다는거 마케팅이라는 거는 돈을 수억을 써야 할수도 있는 작업인데 

타고난 이름자체가 마케팅에 너무 유리한 이름들이 있다. 

여튼 '크룩' 이라는 이름은 요식업에는 않어울리지만 맥도날드는 뭔가 신뢰감이 있었던 모양이다. 

 

- 야망가 레이크룩 

 레이크룩은 성공의 욕망에 사로잡힌 중년의 남자이다. 하지만 그의 아내는 평범한 생활을 꿈꾸고 여가시간에 이웃들과 모임을 가지며 수다 떠는 것을 좋아하는 보통의 여자였다. 사업이 커가면서 둘의 관계는 소원해졌고 그 처럼 야망이 있던 또 다른 여자와는 말이 잘 통해서 결국 이혼을 하게 된다.  

맥 형제의 입장에서 보면 레이크룩은 지방의 귀족이 전쟁으로 세를 키워 쿠데타를 일으킨 격이다. 

그런 야망가를 통제하려면 계약서에 독소조항을 포함하거나 하는 치밀한 면모가 있어야 하는데 맥 형제는 그냥 좋은게 좋은거로 지나갔던것 같다. 

결국 스토리는 동네에서 정직하게 장사잘하고 있는 자영업자를 욕심많은 노인네가 사업을 뺏은 스토리라서 보고나서 기분이 개운치는 않다. 그러나 실화이기도 하고 우리 인간관계에서도 벌어지는 일들이라 생각할 포인트 들이 많다.  

 

반응형
Posted by 돌고래트레이너
생계/Oracle2023. 5. 4. 16:04

오라클 대용량 테이블에서 사용하지 않는 컬럼 DROP 하기 

1. SET UNUSED 구문으로 사용하지 않음으로 MARK 하기

2. DROP UNUSED  구문으로 삭제하기

예제 

UNUSED 가 잘되어있는지 확인해보자

UNUSED 로 MARK 된 컬럼은 테이블을 조회해도 나오지 않고, 딕셔너리에서도 제외된다. 

해당컬럼을 DROP 시 많은양의 UNDO 가 발생되는것을 막기 위해 CHECKPOINT 구문으로 DROP하자.

-- script 

DROP TABLE UNUSED_TEST PURGE;

CREATE TABLE UNUSED_TEST (A INT, B CHAR(1));

INSERT INTO UNUSED_TEST(A,B) VALUES(1,'A');
COMMIT;

ALTER TABLE  UNUSED_TEST SET UNUSED COLUMN B;

SELECT * FROM DBA_UNUSED_COL_TABS;
 
SELECT * FROM UNUSED_TEST; 

SELECT OWNER, TABLE_NAME, COLUMN_NAME 
  FROM DBA_TAB_COLUMNS
 WHERE TABLE_NAME='UNUSED_TEST' AND OWNER='ORAUSER';

ALTER TABLE UNUSED_TEST DROP UNUSED COLUMN CHECKPOINT 100;
 

반응형
Posted by 돌고래트레이너