반응형

"ORA-30006: resource busy; acquire with WAIT timeout expired" 에러 해결 방법

ORA-30006 Cause: 

  • The requested resource is busy.

ORA-30006 원인: 

  • 요청한 리소스가 사용 중입니다.

ORA-30006 Action: 

  • Retry the operation later.

ORA-30006 조치: 

  • 나중에 작업을 다시 시도하십시오.

ORA-30006 해결:

1. 업무 로직 필요해서 

SELECT * FROM TB_ FOR UPDATE WAIT 1 --1초

 

2. 락 해제 

	------------------------------------------------------------------------------------------------------
	-- 사용자 계정 삭제
	-- status 값 : 	active 오라클서버에 session을 맺은후 dml, ddl, dcl, 트랜잭션 컨트롤등 구문 실행중 상태
	-- 				inactive 오라클서버에 session을 맺은후 어떤 실행 구문도 없이 연결만 되어 있는 상태
	------------------------------------------------------------------------------------------------------
	select a.sid,a.serial#,a.username,a.status ,a.* from v$session a where a.schemaname = 'S_WCS';--session조회 
	------------------------------------------------------------------------------------------------------
	-- 락 테이블 조회
	-- locked_mode 값 : ROW SHARE  공유
	-- 				    ROW EXCLUSIVE 독점
	------------------------------------------------------------------------------------------------------
	SELECT B.OWNER
	     , B.OBJECT_NAME
	    -- , A.SESSION_ID
	     , A.LOCKED_MODE
	     , DECODE(LOCKED_MODE, 2, 'ROW SHARE', 3, 'ROW EXCLUSIVE',  4, 'SHARE', 5, 'SHARE ROW EXCLUSIVE', 6, 'EXCLUSIVE', 'UNKNOWN') LOCK_MODE_NM 
	     , A.OS_USER_NAME 
	     , C.USERNAME,C.SID,C.SERIAL#,C.SID||','||C.SERIAL# AS kill_VAL,C.LOGON_TIME,C.MACHINE,C.TERMINAL,C.PROGRAM,C.STATUS AS SESSION_STATUS ,C.OSUSER
	FROM V$LOCKED_OBJECT A, DBA_OBJECTS B, V$SESSION C
	WHERE B.OBJECT_ID = A.OBJECT_ID
	  AND A.SESSION_ID = C.SID 
	ORDER BY A.SESSION_ID
	;
	--session삭제 'SID,SERIAL#'; 
	alter system kill session '1603,38249';
반응형
반응형

"ORA-01787: 질의 블록당 1개의 구만 허용됩니다" 에러 해결 방법

ORA-01787 Cause :

  • only one clause allowed per query block

ORA-01787 원인 :

  • GROUP BY  절을 2 번 사용 

ORA-01787: 질의 블록당 1개의 구만 허용됩니다

SELECT A
FROM DUAL
WHERE 1=1
GROUP BY C
GROUP BY C

ORA-01787 Action :
ORA-01787 해결 :

  • Group by  한게를 삭제
반응형
반응형

"ORA-06550: 줄 1, 열7:PLS-00306: 'SP_LIST' 호출 시 인수의 갯수나 유형이 잘못되었습니다 " 에러 해결 방법

ORA-06550 Cause:

  • Usually a PL/SQL compilation error.

ORA-06550:원인

  • DB 프로시저 인수 와  프로그램 호출 인수가 같니 안음 

ORA-06550 Action :

ORA-06550 해결 : 

  • 파라메트 개수 같게 처리 
  • DB 파라메트  DEFAULT값 설정 
  • BindByName     = true;
반응형
반응형

create or replace NONEDITIONABLE PACKAGE BODY 를 create or replace PACKAGE BODY 로 변경 

 

ALTER PACKAGE 패키지명 NONEDITIONABLE; 

SELECT * FROM ALL_OBJECTS WHERE OWNER = '사용자명' AND OBJECT_NAME  = '패키지명'  AND EDITIONABLE = 'Y';
반응형
반응형

"ORA-01403: no data found" 에러 해결 방법

ORA-01403 Cause:

  • No data was found from the objects.

ORA-01403 원인:

  • 개체에서 데이터를 찾을 수 없습니다.

ORA-01403 Action:

  • There was no data from the objects which may be due to end of fetch.

ORA-01403 조치:

  • 가져오기 종료로 인해 개체에 데이터가 없습니다.

ORA-01403 해결:

보통 DB에서 설정 값 혹은 공통코드값을 가지올때 많이 발행 합니다. 

ORA-01403: 데이터를 찾을 수 없습니다.

DECLARE
 V_SORT NVARCHAR2(100);
begin
    SELECT 1 INTO V_SORT FROM 
    (
        SELECT 1 SORT FROM DUAL UNION ALL
        SELECT 1 SORT FROM DUAL UNION ALL
        SELECT 2 SORT FROM DUAL     
    )X
    WHERE X.SORT =3
    ;
    dbms_output.put_line('V_SORT : ' || TO_CHAR( V_SORT));
EXCEPTION WHEN OTHERS THEN
    dbms_output.put_line( 'SQLERRM :' || SQLERRM ||CHR(13) || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
end;

수정후 

ORA-01403: 데이터를 찾을 수 없습니다.

DECLARE
 V_SORT NVARCHAR2(100);
begin
    BEGIN
        SELECT 1 INTO V_SORT FROM 
        (
            SELECT 1 SORT FROM DUAL UNION ALL
            SELECT 1 SORT FROM DUAL UNION ALL
            SELECT 2 SORT FROM DUAL     
        )X
        WHERE X.SORT =3
        ;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            --데이터를 찾을 수 없습니다
            V_SORT :='0';
        WHEN OTHERS THEN
            -- NULL 값으로 설정 
            V_SORT :=NULL;
    END;    
    dbms_output.put_line('V_SORT : ' || TO_CHAR( V_SORT));
EXCEPTION WHEN OTHERS THEN
    dbms_output.put_line( 'SQLERRM :' || SQLERRM ||CHR(13) || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
end;
반응형
반응형

"ORA-12899: value too large for column string (actual: string, maximum: string)
" 에러 해결 방법

ORA-12899Cause: 

  • An attempt was made to insert or update a column with a value which is too wide for the width of the destination column. The name of the column is given, along with the actual width of the value, and the maximum allowed width of the column. Note that widths are reported in characters if character length semantics are in effect for the column, otherwise widths are reported in bytes.

ORA-12899 원인: 

  • 대상 열의 너비에 비해 너무 넓은 값을 가진 열을 삽입하거나 업데이트하려고 했습니다. 열의 이름은 값의 실제 너비 및 열의 최대 허용 너비와 함께 제공됩니다. 문자 길이 의미가 열에 적용되는 경우 너비는 문자로 보고되고, 그렇지 않은 경우 너비는 바이트로 보고됩니다.

ORA-12899 Action:

  • Examine the SQL statement for correctness. Check source and destination column data types. Either make the destination column wider, or use a subset of the source column (i.e. use substring).

ORA-12899 조치: 

  • SQL문이 올바른지 조사하십시오. 소스 및 대상 열의 데이터 유형을 확인하세요. 대상 열을 더 넓게 만들거나 소스 열의 하위 집합을 사용하십시오(예: 하위 문자열 사용).

ORA-12899 해결 :

  • 컬럼 사이즈 30에서60으로 변경 

ORA-12899  컬럼 크기 변경

  • SUBSTR

ORA-12899 해결

 

반응형
반응형

"ORA-30926: unable to get a stable set of rows in the source tables" 에러 해결 방법

ORA-30926 Cause: 

  • A stable set of rows could not be got because of large dml activity or a non-deterministic where clause.

ORA-30926 원인: 

  • 대규모 dml 활동 또는 비결정적 where 절로 인해 안정적인 행 세트를 가져올 수 없습니다.

ORA-30926 Action: 

  • Remove any non-deterministic where clauses and reissue the dml.

ORA-30926 조치: 

  • 비결정적 where 절을 제거하고 dml을 다시 발행하십시오.

ORA-30926 해결 : 

DISTINCT로 해결 

 

--MERGE INTO를 하는 중 다음과 같은 오류 메세지가 발생하였다.
--MERGE INTO 구문 중 INSERT와 UPDATE는 하나의 레코드를 대상으로 작업을 수행할 수 있는데, 2개 이상의 SELECT 결과가 나와서 발생하는 오류였다.
--USING ( ) ON ( ) 조건에 의해 SELECT 된 결과가 2건이상 발생하는 경우 동일한 레코드가 중복 삽입되는 될 수 있으며, 이때 PK 무결성 오류가 발생하기도 한다.
--또는 update되는 로우가 1건 이상이 발생한다.

 

 

 

반응형
반응형

ORA-06504: PL/SQL: Return types of Result Set variables or query do not match 에러 해결 방법

ORA-06504 : 원인   

쿼리의 열 수 및/또는 유형이 결과 집합 변수의 선언된 반환 유형과 일치하지 않거나 두 결과 집합 변수의 선언된 유형이 일치하지 않습니다.

 

 

ORA-06504 : Action 

Change the program statement or declaration. Verify what query the variable actually refers to during execution.

 

ORA-06504 : 조치

프로그램 명령문이나 선언을 변경하십시오. 실행 중에 변수가 실제로 참조하는 쿼리가 무엇인지 확인합니다.

반응형
반응형

"ORA-01779: cannot modify a column which maps to a non key-preserved table" 에러 해결 방법

ORA-01779 Cause: 

  • An attempt was made to insert or update columns of a join view which map to a non-key-preserved table.

ORA-01779 원인: 

  • 키가 보존되지 않은 테이블에 매핑되는 조인 뷰의 열을 삽입하거나 업데이트하려고 했습니다.

ORA-01779 Action: 

  • Modify the underlying base tables directly.

ORA-01779 조치: 

  • 기본 테이블을 직접 수정하십시오.

ORA-01779 해결: 

  • 머지문으로 해결 

 

반응형
반응형

"ORA-01422: 실제 인출은 요구된 것보다 많은 수의 행을 추출합니다"에러 해결 방법

ORA-01422: 발생원인

Cause: The number specified in exact fetch is less than the rows returned.

원인: 정확한 가져오기에 지정된 숫자가 반환된 행보다 적습니다.

ORA-01422 원인

원인:INTO에 여러건 부여할수 없음

DECLARE
 V_SORT NVARCHAR2(100);
begin
    SELECT 1 INTO V_SORT FROM 
    (
        SELECT 1 SORT FROM DUAL UNION ALL
        SELECT 1 SORT FROM DUAL UNION ALL
        SELECT 2 SORT FROM DUAL     
    ) 
    ;
    dbms_output.put_line('V_SORT : ' || TO_CHAR( V_SORT));
EXCEPTION WHEN OTHERS THEN
    dbms_output.put_line( 'SQLERRM :' || SQLERRM ||CHR(13) || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
end;

ORA-01422: 조치방법

Action: Rewrite the query or change number of rows requested

조치: 쿼리를 다시 작성하거나 요청된 행 수를 변경하십시오.

ORA-01422 조치

DECLARE
 V_SORT NVARCHAR2(100);
begin
    SELECT 1 INTO V_SORT FROM 
    (
        SELECT 1 SORT FROM DUAL UNION ALL
        SELECT 1 SORT FROM DUAL UNION ALL
        SELECT 2 SORT FROM DUAL     
    )X
    WHERE X.SORT =2
    ;
    dbms_output.put_line('V_SORT : ' || TO_CHAR( V_SORT));
EXCEPTION WHEN OTHERS THEN
    dbms_output.put_line( 'SQLERRM :' || SQLERRM ||CHR(13) || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
end;
반응형

+ Recent posts