반응형


클라우드 도입률 30%
빠르다 / 안전하다 / 싸다

DATA + AI + Oracle OCI

Multi Cloud / Public Cloud / Hybrid Cloud / Dedicated Cloud
12개 RAC이면 1개 Region 구성 가능하다.
현재 Region은 서울, 인천에 있다.

Oracle / Google Cloud / AWS / Azure

안전성 / 성능 / 보안
B2B 업무-> Cloud

Uber 95% -> OCI
년간 유지비 3000억

Price / Performance / Flexibility / Security

Data Lake on ADW / OCI

POSCO / Olive Young => 너무 싸게?
행사 시 10배 트래픽

Golden Gate : 복제 / 모니터링

대기유입시스템 -> Cloud

DB CPU 100% -> 20% 내외

온라인만 -> Cloud OK
Legacy -> Cloud 전환 예정

2021 트래블로그 / 하나카드
하나머니앱 / 무료전환
수수료 없이 이용 가능

Exa - CPU / 메모리
온라인에서 자유 자제로 수량 조절 가능

B2B 특화 클라우드 : OCI

Oracle DB version 별 New Feature

LLM -> Vector DB / vector type / RAG

RAG / vector / Partitioning / 샤딩

Autonomous DB

SQL Domain - 데이터 신규 타입
Annotatoins - 데이터 사용 의도 정보

'23년 9월 - Oracle Azure RAC 지원

반응형
반응형

--------------------------------------------------------------------------------------------------------------------------------------------


/***************************
TABLE INITRANS 변경(1->10)
***************************/
SELECT 'ALTER TABLE '||OWNER||'.'||TABLE_NAME||' INITRANS 10;'  FROM DBA_TABLES WHERE OWNER LIKE '%ADM' AND INI_TRANS=1;

ALTER TABLE WKJOBADM.JEP_TB_LAB300_STAT INITRANS 10;

/***************************
INDEX INITRANS 변경(2->20)
***************************/
SELECT 'ALTER INDEX '||OWNER||'.'||INDEX_NAME||' INITRANS 20;'  FROM DBA_INDEXES WHERE OWNER LIKE '%ADM' AND INDEX_NAME NOT LIKE '%$%' AND INI_TRANS=2;

ALTER INDEX DQMADM.PK_JF_QUERY_30 INITRANS 20;

--------------------------------------------------------------------------------------------------------------------------------------------


--1. 변경 전
CREATE INDEX IX_EI_COD_3000NT_15 ON EICODADM.TB_COD_3000NT(CVPL_RCEPT_DE,INSTT_SEQ_NO,CVPL_FORMAT_CD,CVPL_REQST_CNO);


--2. 변경 후
CREATE INDEX IX_EI_COD_3000NT_15 ON EICODADM.TB_COD_3000NT(CVPL_RCEPT_DE,INSTT_SEQ_NO,CVPL_FORMAT_CD,CVPL_REQST_CNO) 
NOLOGGING TABLESPACE TS_IDX_EI LOCAL ONLINE;

​가. NOLOGGING 옵션은 UNDO, REDO를 최소화하기 위한 옵션입니다.
나. LOCAL 옵션은 LOCAL 파티션 인덱스 생성을 위한 옵션입니다.
다. ONLINE 옵션은 DML(INSERT, UPDATE, DELETE 등)이 이뤄져도 LOCK발생을 우회하면서 INDEX를 생성하는 옵션입니다.

--------------------------------------------------------------------------------------------------------------------------------------------

[완료] (MDMIFDB 인덱스 생성검토) EICODADM.TB_COD_3000NT 인덱스 생성 

1. 아래의 구문을 사용한 인덱스 생성 : 45분 내외 소요됨

CREATE INDEX EICODADM.IX_EI_COD_3000NT_15 ON EICODADM.TB_COD_3000NT(CVPL_RCEPT_DE,INSTT_SEQ_NO,CVPL_FORMAT_CD,CVPL_REQST_CNO)
NOLOGGING TABLESPACE TS_IDX_EI LOCAL ONLINE;


2. 생성된 인덱스 10% 샘플링 통계수집

BEGIN
  SYS.DBMS_STATS.GATHER_INDEX_STATS (
     OwnName           => 'EICODADM'
    ,IndName           => 'IX_EI_COD_3000NT_15'
    ,Estimate_Percent  => 10
    ,Degree            => 4
    ,No_Invalidate  => FALSE);
END;
/

반응형
반응형
반응형
반응형



1. 아래의 구문을 사용한 인덱스 생성 : 45분 내외 소요됨

CREATE INDEX EICODADM.IX_EI_COD_3000NT_15 ON EICODADM.TB_COD_3000NT(CVPL_RCEPT_DE,INSTT_SEQ_NO,CVPL_FORMAT_CD,CVPL_REQST_CNO)
NOLOGGING TABLESPACE TS_IDX_EI LOCAL ONLINE;

2. 생성된 인덱스 10% 샘플링 통계수집

BEGIN
  SYS.DBMS_STATS.GATHER_INDEX_STATS (
     OwnName           => 'EICODADM'
    ,IndName           => 'IX_EI_COD_3000NT_15'
    ,Estimate_Percent  => 10
    ,Degree            => 4
    ,No_Invalidate  => FALSE);
END;
/

반응형
반응형

http://www.orafaq.com/forum/t/177160/

MVIEW를 생성하면 자동으로 동일한 이름의 테이블이 생긴다.

MVIEW를 CREATE하기 전에 동일한 이름의 테이블이 기 존재한다면 MVIEW 생성이 안된다.

반드시 Unique한 이름으로 MVIEW 생성이 가능하다. 그리고 동일한 이름의 Physical 테이블이 생긴다.

 

OraFAQ Forum: SQL & PL/SQL » Table and MV of same name. How to select Table/MV seprately

Home » SQL & PL/SQL » SQL & PL/SQL » Table and MV of same name. How to select Table/MV seprately Re: Table and MV of same name. How to select Table/MV seprately [message #535032 is a reply to message #535030] Sun, 11 December 2011 11:58 Barbara Boehm

www.orafaq.com

 

반응형
반응형

SELECT
  TO_CHAR(TO_DATE('20230101', 'YYYYMMDDHH24MISS'), 'YYYY-MM-DD HH24:MI:SS') AS DATE1,
  TO_CHAR(TO_DATE('20230101', 'YYYYMMDDHH24MISS'), 'YYYY/MM/DD HH24:MI:SS') AS DATE2,
  TO_CHAR(TO_DATE('20230101', 'YYYYMMDDHH24MISS'), 'DD/MM/YYYY HH24:MI:SS') AS DATE3
FROM DUAL;

SELECT
  TO_DATE('20230101010001', 'YYYYMMDDHHMISS') AS DATE1,
  TO_DATE('20230101010001', 'YYYYMMDDHH24MISS') AS DATE2,
  TO_DATE('2023-01-01 23:59:59', 'YYYY-MM-DD HH24:MI:SS') AS DATE3,
  TO_TIMESTAMP('20230101010001', 'YYYYMMDDHH24MISS') AS DATE4
FROM DUAL;

SELECT
  SYSDATE,
  SYSDATE - 5/24,        --5시간 빼기
  SYSDATE - 5/(24*60),   --5분 빼기
  SYSDATE - 5/(24*60*60) --5초 빼기
FROM DUAL;

반응형

ORA-01450

개발 및 관리/Oracle 9i, 10g, 11g, 12c, 19c 2022. 12. 27. 12:37 posted by HighLighter
반응형

ORA-01450

인덱스 생성 시 online 옵션 빼고 실행하면 생성되었습니다.

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=kwoncharlie&logNo=10119755651

ORA-01450: maximum key length (string) exceeded tips

https://www.dba-oracle.com/t_ora_01450_maximum_key_length_exceeded.htm

http://oracle-help.com/ora-errors/errors-ora-01450-maximum-key-length-3215-exceeded/

반응형
반응형

Oracle 스케쥴러 관련 명령어
https://pokey.tistory.com/8

Oracle Scheduling Dates and Times
http://www.dba-oracle.com/job_scheduling/dates_times.htm

Oracle Scheduling Dates and Times
http://www.dba-oracle.com/job_scheduling/dates_times.htm


[Oracle] 프로시저(Procedure) 권한 부여 방법

https://gent.tistory.com/538?category=360526 


--등록된 job

SELECT * FROM USER_SCHEDULER_JOBS;

--job의 arguments

SELECT * FROM USER_SCHEDULER_JOB_ARGS; 

--현재 running중인 job들의정보

SELECT * FROM USER_SCHEDULER_RUNNING_JOBS;

--job의 log

SELECT * FROM USER_SCHEDULER_JOB_LOG;

--job의수행된정보및Error 정보 

SELECT * FROM USER_SCHEDULER_JOB_RUN_DETAILS;

-- 등록된 Program

SELECT * FROM USER_SCHEDULER_PROGRAMS; 

-- 프로그램의 매개변수

SELECT * FROM USER_SCHEDULER_PROGRAM_ARGS; 

--등록된 스케쥴러 

SELECT * FROM USER_SCHEDULER_SCHEDULES;

-- 스케쥴 삭제 
BEGIN
        DBMS_SCHEDULER.DROP_JOB(
           JOB_NAME   => 'SCH_PROC_MSG_STATE',
           FORCE      => false);
END ; 

-- 스케쥴 시작
EXECUTE DBMS_SCHEDULER.ENABLE('SCH_PROC_MSG_STATE');

-- 스케쥴 정지
EXECUTE DBMS_SCHEDULER.DISABLE('SCH_PROC_MSG_STATE');

DBMS_JOB.submit : job 등록

DBMS_JOB.remove : 제거

DBMS_JOB.change : 변경

DBMS_JOB.next_date : job의 다음 수행시간 변경

DBMS_JOB.interval : job의 실행 cycle 지정

DBMS_JOB.what : job 수행 으로 등록된 object 를 변경

DBMS_JOB.run : job을 수동으로 실행


DECLARE
  X NUMBER;
BEGIN
  SYS.DBMS_JOB.SUBMIT
    ( job       => X 
     ,what      => '실행할 object'
     ,next_date => to_date('17-11-2007 09:00:00','dd/mm/yyyy hh24:mi:ss')
     ,interval  => 'TRUNC(SYSDATE) + 1 + 9/24'
     ,no_parse  => TRUE
    );
  SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x)); -- 이부분은 job큐의 번호가 됩니다.
END;


BEGIN
DBMS_SCHEDULER.CREATE_JOB (
   job_name             => 'SCH_PROC_MSG_STATE_TO_DAY',
   job_type             => 'PLSQL_BLOCK',
   job_action           => 'BEGIN MEM_NPRO.TEST_PROC (TO_CHAR(SYSDATE , ''YYYYMMDD'')); END;',
   start_date           => TO_DATE('2011-12-14 17:30:00' , 'YYYY-MM-DD HH24:MI:SS'),
   repeat_interval      => 'FREQ=MINUTELY;INTERVAL=30',
   end_date             =>  NULL,
   enabled              =>  TRUE,
   comments             => 'HJ SCH_PROC_MSG_STATE_TO_DAY');
END;

Execute daily          'SYSDATE + 1'
 Execute once per week  'SYSDATE + 7'
 Execute hourly         'SYSDATE + 1/24'
 Execute every 10 min.  'SYSDATE + 10/1440'
 Execute every 30 sec.  'SYSDATE + 30/86400'
 Do not re-execute      NULL

1. 10분간격으로 실행
 
SYSDATE + 1/24/6
 
2. 현재 시간으로 부터 다음 날 현재 시간에 실행 (매일)
 
SYSDATE + 1    -- 지금이 오후3시면 다음날 오후 3시 에 매일매일 실행됩니다.
 
3. 매일 새벽 5시
 
TRUNC(SYSDATE) + 1 + 5 / 24
 
4. 매일 밤 10시
 
TRUNC(SYSDATE)  + 20 / 24

5. 예제

5-1. 매일 오전 6시 

BEGIN
  SYS.DBMS_JOB.INTERVAL(:JOB, 'SYSDATE+30/1440');
  COMMIT;
END;
/

5-2. 매월 1일 밤 12시

BEGIN
  SYS.DBMS_JOB.INTERVAL(:JOB, 'TRUNC(LAST_DAY(SYSDATE)) + 1');
  COMMIT;
END;
/

5-3. 매월 1일 오전 7시 30분

BEGIN
  SYS.DBMS_JOB.INTERVAL(:JOB, 'TRUNC(LAST_DAY(SYSDATE)) + 1 + 8/24 + 30/1440');
  COMMIT;
END;
/


----------------------------------------------------------------------------------------------------------------------------------------------------------------

DECLARE
  user_name varchar2(30);
BEGIN
  select user into user_name from dual;
  execute immediate 'alter session set current_schema = USERDBA';
  BEGIN
    SYS.DBMS_JOB.REMOVE(6);
    execute immediate 'alter session set current_schema = ' || user_name ;
  EXCEPTION
    WHEN OTHERS THEN
      execute immediate 'alter session set current_schema = ' || user_name ;
      RAISE;
  END;
  COMMIT;
END;
/

DECLARE
  X NUMBER;
  user_name varchar2(30);
BEGIN
  select user into user_name from dual;
  execute immediate 'alter session set current_schema = USERDBA';
  BEGIN
    SYS.DBMS_JOB.SUBMIT
    ( job       => X 
     ,what      => 'USERDBA.PR_0001SD_CONTROL;'
     ,next_date => to_date('27/01/2023 17:35:34','dd/mm/yyyy hh24:mi:ss')
     ,interval  => 'ADD_MONTHS(SYSDATE, 3)'
     ,no_parse  => FALSE
    );
    SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
    execute immediate 'alter session set current_schema = ' || user_name ;
  EXCEPTION
    WHEN OTHERS THEN 
      execute immediate 'alter session set current_schema = ' || user_name ;
      RAISE;
  END;
  COMMIT;
END;
/

----------------------------------------------------------------------------------------------------------------------------------------------------------------

DECLARE
  user_name varchar2(30);
BEGIN
  select user into user_name from dual;
  execute immediate 'alter session set current_schema = USERDBA';
  BEGIN
    SYS.DBMS_JOB.REMOVE(6);
    execute immediate 'alter session set current_schema = ' || user_name ;
  EXCEPTION
    WHEN OTHERS THEN
      execute immediate 'alter session set current_schema = ' || user_name ;
      RAISE;
  END;
  COMMIT;
END;
/

DECLARE
  X NUMBER;
  user_name varchar2(30);
BEGIN
  select user into user_name from dual;
  execute immediate 'alter session set current_schema = USERDBA';
  BEGIN
    SYS.DBMS_JOB.SUBMIT
    ( job       => X 
     ,what      => 'USERDBA.PR_0001SD_CONTROL;'
     ,next_date => to_date('27/01/2023 17:35:34','dd/mm/yyyy hh24:mi:ss')
     ,interval  => 'SYSDATE+10/1440'
     ,no_parse  => FALSE
    );
    SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
    execute immediate 'alter session set current_schema = ' || user_name ;
  EXCEPTION
    WHEN OTHERS THEN 
      execute immediate 'alter session set current_schema = ' || user_name ;
      RAISE;
  END;
  COMMIT;

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

DECLARE
  user_name varchar2(30);
BEGIN
  select user into user_name from dual;
  execute immediate 'alter session set current_schema = USERDBA';
  BEGIN
    SYS.DBMS_JOB.REMOVE(6);
    execute immediate 'alter session set current_schema = ' || user_name ;
  EXCEPTION
    WHEN OTHERS THEN
      execute immediate 'alter session set current_schema = ' || user_name ;
      RAISE;
  END;
  COMMIT;
END;
/

DECLARE
  X NUMBER;
  user_name varchar2(30);
BEGIN
  select user into user_name from dual;
  execute immediate 'alter session set current_schema = USERDBA';
  BEGIN
    SYS.DBMS_JOB.SUBMIT
    ( job       => X 
     ,what      => 'USERDBA.PR_0001SD_CONTROL;'
     ,next_date => to_date('27/01/2023 17:35:34','dd/mm/yyyy hh24:mi:ss')
     ,interval  => 'TRUNC(SYSDATE+1) + (3/24)'
     ,no_parse  => FALSE
    );
    SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
    execute immediate 'alter session set current_schema = ' || user_name ;
  EXCEPTION
    WHEN OTHERS THEN 
      execute immediate 'alter session set current_schema = ' || user_name ;
      RAISE;
  END;
  COMMIT;
END;
/

반응형
반응형
반응형
반응형

큰 사이트에서는 맥스게이지와 같은 툴을 사용하여 특정시간 때에 발생한 Lock이나 wait event를 분석하기 좋습니다.

그런데 맥스게이지와 같은 툴이 없다면 아래의 구루비 사이트를 통해서 wait event를 통해서 분석이 가능할 듯 합니다.

http://wiki.gurubee.net/pages/viewpage.action?pageId=22052916 

 

대기 이벤트 기본 정보 - [종료]구루비 DB 스터디 - 개발자, DBA가 함께 만들어가는 구루비 지식창

대기 이벤트 기본 정보 <!-- Root decorator: this is a layer of abstraction that Confluence doesn't need. It will be removed eventually. --> Added by 강정식, edited by 강정식 on 3월 29, 2012 0. 소개 오라클은 특정 세션이 어던 작

wiki.gurubee.net

분석을 잘 해 놓은 사이트입니다.

반응형