본문 바로가기

728x90
반응형

Database

(6)
[Oracle] TIMESTAMP를 활용한 데이터 복구 TIMESTAMP 데이터베이스를 이용하다 보면 실수로 데이터를 삭제하거나 잘못 업데이트하는 경우가 있다. 물론 COMMIT을 하기 전이라면 상관이 없다. ROLLBACK을 하면 그만. 하지만 COMMIT을 한 이후에 문제를 확인하여 데이터를 복구해야 하는 경우가 있다. 이럴 때 ORACLE의 TIMESTAMP를 이용하면 데이터를 복구할 수 있다.    TIMESTAMP의 사용 조건 1) oracle 9i 이상부터 지원2) DB 설정된 시간에 따라 오래 지난 데이터는 TIMESTAMP로 복구가 불가능함    TIMESTAMP 사용법 단위는 SECOND, MINUTE, HOUR, DAY로 지정해서 사용할 수 있다. 기준은 현재 시점이고 조건문을 함께 사용하는 것이 좋다. -- 10초 전의 데이터 조회SELE..
[Oracle] ORA-12899: 열에 대한 값이 너무 큼 ORA-12899: 열에 대한 값이 너무 큼 데이터를 INSERT 또는 UPDATE 시 많이 마주치는 오류다.이 오류는 해당 컬럼에 설정된 데이터 허용치보다 더 큰 값을 삽입/수정하는 경우 발생한다. CREATE TABLE USER_TABLE( USER_ID VARCHAR2(10) NOT NULL, USER_NAME VARCHAR2(10) NOT NULL, ADDRESS VARCHAR2(10));INSERT INTO USER_TABLE(USER_ID, USER_NAME, ADDRESS)VALUES('100', '홍길동', '대한민국 서울특별시 강남구');-- ORA-12899: 열에 대한 값이 너무 큼 위 예시에서는 ADDRESS 컬럼은 VARCHAR2(10)인데 실제 입력된 값의 크기는 ..
[Oracle] ORA-00904: invalid identifier, 부적합한 식별자 ORA-00904: invalid identifier, 부적합한 식별자 오라클에서 'ORA-00904: 부적합한 식별자' 에러는 컬럼명을 찾을 수 없을 때 발생한다.  원인1) 존재하지 않는 열 이름을 지정함2) 정의된 열 이름과 대소문자가 일치하지 않음3) 작은 따옴표(')와 큰 따옴표(") 사용 오류4) 열 이름에 특수문자 사용5) 열 이름에 예약어 사용  해결 방안1) 해당 열이 테이블에 존재하는지 확인2) 큰 따옴표로 묶인 열 이름은 대소문자로 구분하므로 확인  cf) 따옴표로 묶지 않은 식별자는 항상 대문자로 변환되어 관리됨3) 작은 따옴표(')로 값을 묶으면 값으로 취급되지만 큰 따옴표(")로 값을 묶으면 객체 이름으로 처리되므로 확인 필요4) 열 이름 앞에 숫자나 기호를 사용하고 있지 않은지..
[Oracle] ORA-01849: 시간은 1에서 12 사이어야 합니다 ▶ ORA-01849: 시간은 1에서 12 사이어야 합니다(hour must be between 1 and 12)  SELECT TO_DATE('2020-01-01 00:00:00', 'YYYY-MM-DD HH:mi:ss') FROM DUAL;  위와 같은 쿼리 작성 시 해당 에러에 직면할 수 있다.  원인  Oracle의 세팅이 12시간으로 되어 있는데 24시간대의 시간을 입력하여 발생하는 에러.   해결SELECT TO_DATE('2020-01-01 00:00:00', 'YYYY-MM-DD HH24:mi:ss') FROM DUAL;  시간 포맷이 HH인 경우 시간은 1~12까지밖에 지원하지 않기 때문에 HH를 HH24로 변경시켜 줘야 함.
[Oracle] ORA-01810: 형식 코드가 두 번 나타났습니다 ▶ ORA-01810: 형식 코드가 두 번 나타났습니다(format code appears twice)  원인SELECT TO_DATE('2020-01-01', 'YYYY-MM-DD HH:mm:ss') FROM DUAL;  Query상에서 month의 MM과 minute의 mm을 구분하지 못하고 동일하게 인식하여 발생하는 에러.   해결SELECT TO_DATE('2020-01-01', 'YYYY-MM-DD HH:mi:ss') FROM DUAL;  minute의 mm을 mi로 변경시켜 month와 구분시켜 줘야 함.
[Oracle] ORA-01861: 리터럴이 형식 문자열과 일치하지 않음 ▶ ORA-01861: 리터럴이 형식 문자열과 일치하지 않음(literal does not match format string)  원인  DATE 타입에 String형의 문자열을 넣으려 하거나 DATE형과 String형을 비교하려 할 때 발생하는 에러.   해결  String형을 DATE형으로 변환시켜 주거나 DATE형을 String 형으로 변환시켜 줘야 함. - TO_DATE(DATE형으로 변경)-- 사용 방법SELECT TO_DATE([컬럼명],[포맷형식])FROM [테이블명]-- 예SELECT TO_DATE('2020-08-19','YYYY-MM-DD') FROM DUAL   - TO_CHAR(문자형으로 변경)-- 사용 방법SELECT TO_CHAR([컬럼명]) FROM [테이블명]-- 예SELEC..

728x90
반응형