▶ 원인
PK가 2개인 테이블의 UPDATE문에 WHERE절을 1개만 지정했다
문제는 이걸 커밋하고 1시간 후에나 알게 된 것..... 내가 의도했던 것보다 많은 데이터가 바뀌었다.
검색해보니 대부분 UPDATE 복구는 10분 이내에 하는 방법이라 나와는 맞지않았다.
해서 다음을 위해 특정 시간대로 복구하는 쿼리를 기록한다.
-- 복구할 데이터 확인 ( 오늘 오전 8시 기준 )
SELECT *
FROM 테이블명 AS OF TIMESTAMP(TO_DATE('2022-09-14 08:00', 'YYYY-MM-DD HH24:MI:SS'))
ORDER BY 컬럼명
;
-- 현재 테이터 확인
SELECT *
FROM 테이블명
ORDER BY 컬럼명
;
ORDER BY는 없어도 되지만 데이터 확인을 위해 넣었다.
-- 복구할 데이터로 백업테이블 생성
CREATE TABLE 백업테이블명 AS
SELECT * FROM 테이블명 AS OF TIMESTAMP(TO_DATE('2022-09-14 08:00', 'YYYY-MM-DD HH24:MI:SS'))
;
-- 특정 시간대로 데이터 복구 ( SELECT 결과 UPDATE)
UPDATE 테이블명 A
SET (컬럼명1, 컬럼명2) = (SELECT 컬럼명1, 컬럼명2
FROM 백업테이블명 B
WHERE A.PK컬럼명1 = B.PK컬럼명1
AND A.PK컬럼명2 = B.PK컬럼명2)
;
--백업용테이블 제거
DROP TABLE 백업테이블명;
백업용 테이블을 생성하지 않고 UPDATE문 FROM절에 복구할 데이터를 넣는 방법도 있던데,
회사 오라클 버전이랑 맞지 않는지 오류가 떠서 백업용 테이블을 생성했다.
그리고 백업용 테이블의 SELECT 결과를 UPDATE 하는 방법으로 해결했다.
UPDATE, DELETE 쿼리 치기 전에는 꼭 WHERE절을 두 번 세번 체크하자ㅠㅠ
'SQL' 카테고리의 다른 글
[PostgresSQL] 컬럼명, 컬럼 코멘트로 테이블 검색 (0) | 2024.06.05 |
---|---|
[mysql] Enum 타입 사용의 장단점 및 대안 (0) | 2024.04.12 |
[오라클] 테이블 백업 / 복사하기 (0) | 2022.08.26 |
[Oracle] 특정 컬럼이 존재하는 테이블, 뷰, 코멘트 찾기 (2) | 2022.05.12 |
[PostgresSQL] B테이블 조회 결과 A테이블에 UPDATE 하기 (0) | 2022.01.24 |