[오라클] 테이블 백업본으로 복구하기

심심이·2024년 2월 24일

oracle

목록 보기
13/40

1. 상관서브쿼리(== 서브상관쿼리)를 사용한 UPDATE 처리하기


/*
   delete 또는 update 를 할 때 먼저 반드시 해당 테이블을 백업해 둘 것.
   실수하면 복구하기 위한 것이다.
*/

create table tbl_employees_backup_20240223_1135
as
select *
from employees;
-- Table TBL_EMPLOYEES_BACKUP_20240223_1135이(가) 생성되었습니다. [백업본 생성] 

select *
from tbl_employees_backup_20240223_1135;
-- employees 테이블의 모든 데이터가 들어옴

2. 상관서브쿼리(서브상관쿼리)를 사용한 UPDATE 처리하기

--실수로 원래 테이블의 데이터를 잘못 업데이트 한 상황 --

update employees set first_name = '순신', last_name = '이'; 
-- employees 테이블의 데이터를 잘못 입력함

commit; -- 커밋 완료, 커밋된 상태이기에 롤백 불가

select * from employees;



---==== 상관서브쿼리(== 서브상관쿼리)를 사용한 UPDATE 처리하기 ==== --


/*

UPDATE [테이블 이름]
SET [열1] = '변경할 값1', [열2] = '변경할 값2' ...
WHERE [조건] ** 조건절 미지정시 모든 레코드가 업데이트될 수 있음.

*/

update employees E set first_name = ( select first_name
                                     from tbl_employees_backup_20240223_1135
                                     where employee_id = E.employee_id )
                                 --  where employee_id = 162 
                                 --  where employee_id = 168
                                 --  즉 tbl_employees_backup_20240223_1135 에 있는 
                                 --  employee_id와 employees에있는 employee_id와 같을때
                  , last_name = ( select last_name
                                  from tbl_employees_backup_20240223_1135
                                  where employee_id = E.employee_id );
-- 107개 행 이(가) 업데이트되었습니다.

select *
from employees; -- 백업본에 있는 데이터를 업데이트 했기에 다시 원복 됨. 

commit;

3. 상관서브쿼리(서브상관쿼리)를 사용한 insert 처리



create database link teacher_oracle_server 
connect to hr identified by gclass -- 이때 hr 과 암호 gclass 는 연결하고자 하는 원격지 오라클서버(192.168.0.220)의 계정명과 암호이다.  (내 암호 아님!!)
using 'TEACHER';  -- TEACHER 은 Net Service Name 네트서비스네임(넷서비스명) 이다. 


SELECT *
FROM employees@teacher_oracle_server ;    -- 원격지 오라클 서버


select * from employees;

insert into employees(employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary, commission_pct, manager_id, department_id, jubun) -- 테이블 컬럼명을 넣어주면 맞게 넣어준다. 차례대로!!
select employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary, commission_pct, manager_id, department_id, jubun
from employees@teacher_oracle_server O
where O.employee_id = 178;
profile
개발하는 심심이

0개의 댓글