트랜잭션(Transaction), 치환변수, save명령어, 리소스부족에러발생시
💡 핵심 요약 (TL;DR)
* sql develoepr는 save 명령어가 없다. why? 걍 저장버튼을 누르면 되기때문 원인을 파악했다. 관련 환경 설정과 코드를 알맞게 수정하여 정상적으로 동작하도록 해결할 수 있다.
트랜잭션(Transaction)
- 아주 중요한 개념
- 하나의 논리적인 작업단위
- 논리적이다보니 언제 트랜잭션이 시작되고 끝나는지 눈에 보이지않는 작업이다.
- 여러 DML이 모여서 하나의 트랜잭션으로 구성되기도 함 : insert, update, delete
- DML 작업 후 commit, rollback으로 트랜잭션 종료해야함
- 하나의 DDL 구문이 하나의 트랜잭션으로 구성되기도 함 : create, alter, drop, truncate
- 하나의 DCL 구문이 하나의 트랜잭션으로 구성되기도 함 : grant, revoke
트랜잭션 시작 및 종료
- 트랜잭션 시작 : 첫번째 DML구문이 실행 시
- 트랜잭션 종료 :
- commit, rollback실행 시
- DDL 또는 DCL구문 실행 시 (autocommit)
- SQL PLUS 정상 종료 시 (autocommit)
- 터미널창 X를 닫는 건 비정상적인 종료
- 터미널창에서 EXIT() 명령어를 통한 종료는 정상적인 종료
- SQL Developer 정상 종료 시 (autocommit)
- SQL Developer의 X를 누르면 저장하시겠습니까 팝업이 뜨는데 저장 안하고 종료하면 비정상적인 종료
- SQL Developer의 X를 누르면 저장하시겠습니까 팝업이 뜨는데 저장하고 종료하면 정상적인 종료
- 시스템 장애 시 (autorollback)
- savepoint
- 트랜잭션안에서만 사용가능
1 | $ savepoint 세이브포인트명 |
치환변수
아래 쿼리에서 모든 건 다 똑같고 employee_id만 100,101,102,… 변화시키고싶다.
이때 치환변수를 이용하면 훨씬 용이하다
1 | $ select employee_id, last_name, salary |
- 치환변수사용법 : &변수명
- 변수명은 항상 의미있게 작성해야한다.
- 문자, 날짜가 들어와야하는 데이터인 경우는 ‘&변수명’로 입력하면 된다.
- 문자는 대소문자를 구분하므로 lower()나 upper()를 양쪽변에 같이 써서 맞춰주면 된다.
1 | //데이터가 숫자 |
쿼리구문을 작성하면 자동으로 변수를 물어봐준다. 이에 응답하면 데이터를 출력해준다.
save명령어 : 자주 실행되는 쿼리구문 저장하기
만약 회사가 department를 자주 생성하는 회사이다.
이럴경우 치환변수를 넣어 쿼리구문을 저장하고 필요할때마다 편하게꺼내서 실행할 수 있다.
자주 실행되는 쿼리구문은 save 명령어로 저장한다
save명령어로 쿼리구문을 저장하는 방법
- sql plus에서만 있는 명령어.
- sql develoepr는 save 명령어가 없다. why? 걍 저장버튼을 누르면 되기때문
1 | //1. SQL구문입력 |
save명령어 저장된 쿼리구문 사용하는 방법
- sql plus에서만 있는 명령어.
- sql develoepr는 @명령어가 없다. why? 걍 열기버튼을 누르면 되기때문
1 | $ @/저장한경로/저장한이름.sql |
- 예시
1 | $ @/home/oracle/new_dept.sql |
터미널창에서 리소스부족에러 발생시
보통은 유저가 많이 접속된 경우에 리소스부족에러가 자주 발생한다.
따라서 제일 먼저 의심해봐야하는 건 유저가 동시접속되어있지않은가이다.
터미널창에서 exit 명령어를 이용해서 접속되어있는 유저 한명씩 종료시켜준다. 마지막 한 유저만 남을 때까지.
트랜잭션(Transaction), 치환변수, save명령어, 리소스부족에러발생시