Oracle
-
[Oracle] 계정 잠금 해체개발/Database 2019. 7. 20. 10:20
JDBC 드라이버 통해서 쿼리를 날렸는데 갑자기 "the account is locked" 라는 메시지가 뜨면서 프로그램이 안 돌아간다는 제보를 받았다. 원인은 패스워드 유효기간 만료일수도 있고, 관리자가 직접 계정 lock을 걸어서 계정이 잠겼을 수도 있다는데 나도 DB 무식자다보니 정확한 원인은 모르겠다. 아마도 다시 DBA를 만나게 되면 여쭤볼 수는 있겠다만 언제 오실지 모르니... 우선 아래 쿼리를 날려서 잠긴 계정을 확인 1 2 3 4 5 6 SELECT * FROM DBA_USERS WHERE ACCOUNT_STATUS LIKE 'LOCKED%'; cs 전달받은 대로 계정 하나가 잠겨있는 상태였다. 잠긴 계정을 푸는 쿼리도 날려본다. 1 2 3 ALTER USER [USER_NAME] ACCO..
-
[Oracle] 시퀀스의 현재값 변경하기개발/Database 2019. 5. 8. 22:17
운영 서버에 있던 DB 오브젝트들을 개발 서버에 옮겨서 테스트하던 중 에러가 났다. 에러 로그를 보니 대체 왜 이렇게 된건지 정확히 파악은 안되지만 시퀀스의 현재 값이 실제 데이터의 Max 값보다 한참 작은 상태라 인서트 쿼리를 실행하면 중복 값이 들어가면서 에러가 나는 상황..... 무식하게 계속 .nextval 로 맞춰주기엔 값이 좀 많이 차이나서 부득이하게 머리를 써서 시퀀스의 현재값을 변경해줘야 했다. 가장 편리한건 역시 그냥 시퀀스 자체를 드롭한 후에 실제 데이터에 맞춰서 다시 생성해주는 것이겠지만 이미 운영 중인 서비스라면 그냥 드롭시키기 무서울 수도 있기에..... 아래처럼 약간의 꼼수(?)를 써서 바꿔주면 해결 1 2 3 4 5 6 7 8 9 --예) 현재 시퀀스값은 20인데 데이터값을 9..
-
TABLE Function 이라는 것도 있다개발/Database 2019. 1. 9. 14:20
DB 담당 수석님께서 짜서 던져주신 쿼리를 보다가 난생 처음 보는 신택스를 만나서 검색오늘도 출처는 구루비 (http://www.gurubee.net/lecture/2238) 아직 내용을 완벽하게 이해한 것이 아니라 간단하게 요약만 남기고 끝낸다...흐흑 Table Function - Result Set 전체를 인자 값으로 받아서 결과를 Return 하고자 할 경우 유용하게 사용 가능 - Table Function / Pipelined Table Function - SELECT * FROM TABLE( Row 출력 Function ) 형태로 사용 가능
-
PL/SQL 실행 블럭에서 동적 쿼리 작성하기개발/Database 2018. 8. 8. 15:44
PL/SQL 내부에서 동적으로 스키마명과 테이블명을 받아 전체 데이터 건수를 뽑아내는 쿼리 결론부터 말하자면 쿼리 스트링을 만들어 준 다음에'EXECUTE IMMEDIATE 쿼리' 명령어를 추가해주면 된다. CREATE OR REPLACE FUNCTION F_TEST(P_S_NAME VARCHAR2, P_T_NAME VARCHAR2) --스키마명과 테이블명을 파라미터로 받음RETURN NUMBERISV_TMP NUMBER; --데이터 건수를 담아 리턴할 변수V_TMP_QUERY VARCHAR2(4000); --쿼리문을 담을 변수 BEGIN V_TMP_QUERY := 'SELECT COUNT(*) FROM ' || P_S_NAME || '.' || P_T_NAME ; --동적 쿼리 작성EXECUTE IMM..
-
PL/SQL 에서의 FUNCTION vs PROCEDURE개발/Database 2018. 8. 8. 15:19
FUNCTION 은 리턴값이 있는 서브프로그램이고,PROCEDURE 는 리턴값이 없는 서브프로그램이다. 사실 와꾸만 써놓고 정리를 안해서 안 올리고 있지만 VBA에서나 PL/SQL에서나 FUNCTION과 PROCEDURE 의 차이점은 거의 비슷하다....(내가 잘 몰라서 똑같다고는 말 못함) 직접 짜다보니 왜 프로그램이라는 명칭을 붙여줬는지 이해가 간다. 잘 써먹으면 정말 쪼그마한 프로그램 하나를 붙여서 쓰는 효과가 나기에...ㅎ 뭔소리야 아무튼 거의 2년간 PL/SQL을 만질 일이 없어서 까먹고 있다가 오랜만에 구문 보면서 짜려니 다른 분들의 설명이 잘 눈에 안 들어와서 내 맘대로 다시 정리한다.오늘도 출처는 훌륭한 구루비 선생님http://www.gurubee.net/lecture/1342http:/..
-
PL/SQL로 테이블 접근 시 ORA-00942 에러 원인개발/문제 해결 2018. 8. 8. 09:26
쿼리를 짜다보니 필요해서 어쩔 수 없이 DBA 계정에서 PL/SQL을 써서 새 함수를 짜넣고 테스트를 해보는데 계속 에러가 떴다. 더 이상 꼴도 보기 싫은 ORA-00942 ㅠㅠㅠㅠDBA 계정인데다가 SELECT * FROM 스키마.테이블; 하면 결과가 잘 나오기 때문에 설마 권한 문제라고는 생각 안했는데 권한 문제였음^.^ 찾아보니 PL/SQL 을 실행하게 되면 DBMS_SQL 패키지를 이용하게 되는데, 이때 명시적 접근 권한을 요구하기 때문에 DBA 계정일지라도 오류가 발생하는 것이라고 한다.바로 GRANT SELECT ON 스키마.테이블; 을 실행하고 나니 이상 없다. 즉. PL/SQL을 실행하려면 ROLE을 사용하여 부여된 권한이 아니라 직접 부여된 권한이 필요하다ㅠㅠ 출처 : http://juh..
-
오라클 DB 테이블스페이스 용량 늘리기개발/Database 2018. 8. 2. 16:21
휴가철을 맞아 팔자에도 없는 DBA 노릇을 갑자기 하느라 쩜 마니 당황했다ㅎ.....한번 해보면 별거 아닌데 한번도 안 해봐서 진짜 쌩난리를 치면서 했다. 담부터는 그러지 말자ㅠ 1. 테이블스페이스의 이름 확인 SELECT TABLESPACE_NAME, DATAFILE_COUNT, BLOCK_SIZE FROM DBA_TABLESPACES ; 2. 데이터 파일의 이름 확인 1에서 확인한 테이블스페이스의 이름을 가지고 아래 쿼리를 실행 FILE_NAME 컬럼의 값이 바로 데이터 파일의 이름임 SELECT FILE_NAME, FILE_ID, TABLESPACE_NAME, STATUS FROM DBA_DATA_FILES WHERE TABLESPACE_NAME = '' ; 3. 테이블스페이스의 용량을 늘려주기 -..
-
DECODE 와 CASE : 과연 그놈이 그놈일까개발/Database 2018. 7. 18. 15:05
DECODE와 CASE를 잘 쓰면 소스 코드 짤 때의 삽질을 엄청나게 줄일 수 있기 때문에 쿼리 짤 때 요놈들을 자주 쓰게 된다.이걸 배울 때는 DECODE와 CASE는 비슷하게 쓰일 수 있다~ 정도로만 이해하고 넘어갔는데오늘 쿼리를 짜면서 문득 이게 별 차이가 없다면 굳이 두개가 다 있을 필요가 없다는 생각이 들었다.그래서 좀 더 파보는 시간을 가져보도록 한다. 1. DECODE DECODE(값, IF1, THEN1, IF2, THEN2, .... ) 2. CASE CASE 값 WHEN IF조건1 THEN1 WHEN IF조건2 THEN2 ....ELSE END 3. 차이점 물론 신택스가 다르므로 쿼리도 달라진다. 예) NUM 컬럼의 값이 1이면 첫번째, 2면 두번째, 3이면 세번째, 다른 값이면 기타를..