728x90
반응형

DB (데이터베이스) 108

[Oracle] oracle PLS-00201 : identifier must be declared 원인, 해결

PLS-00201 : identifier 'A' must be declared 라는 애러메시지 해결방안에 대해 알아보자. 1. 원인  pl/sql에서 변수에 데이터타입에 맞지 않는 데이터를 대입했을 경우에 애러가 발생한다.  DECLARE A VARCHAR2(100);BEGIN A := TEST;END;위와 같은 구문에서 애러가 발생한다. 이유는 A := TEST; 가 아니라 A := 'TEST'; 라고 작성해야 하기 때문이다.하지만 sqlplus 에서 이 pl/sql파일을 .sql파일로 저장하고 실행을 할 때 문제가 생긴다. DECLARE A VARCHAR2(100);BEGIN A := &1;END;만약 .sql파일로 저장을 하고 파라미터를 받아야 할 경우 대부분 위와 같이 작성하여 실수를 저지른다.이..

[Oracle] oracle error Warning : too many parse errors 원인, 해결

oracle alert.log에서 WARNING : too many parse error발생한 경우 원인과 해결방안에 대해 알아보자.   1. 원인 oracle 구문 에러가 많이 발생 insert into INFRA.test values ('1', '2');이런식의 정상적인 쿼리가 아닌  insert innt INFRA.test values ('1', '2');위 처럼 오타를 내면 parsing과정에서 애러가 발생한다. 이 애러가 굉장히 많은 횟수의 경우 alter log에 "WARNING : too many parse error" 메시지가 뜬다 2. 테스트 리눅스 환경에서 test.sh라는 쉘 스크립트를 만들어 준다. test.sh#!/bin/bashfor ((i=1; i @test.sql &donew..

[Oracle] oracle에서 lock object를 조회하는 방법

oracle에서 object가 lock이 걸렸을 떄 조회하는 sql문을 알아보자.우선 lock에 걸리는 이유에 대해 간단하게 알아보겠습니다. DB에 A라는 사용자가 연결되었고, 동시에 B라는 사용자도 연결했습니다. A라는 사용자는 'test_a' 라는 테이블에 데이터를 삭제하는 delete문을 삭제하고 commit을 하지 않았습니다. 즉 DB에 반영이 되지 않았죠 그 상태에서 B사용자가 'test_a'라는 테이블에 데이터를 update를 했을 경우 B사용자는 A사용자가 DB에 작업을 반영할 때 까지 기다리는 일이 발생합니다. 이때 A가 'test_a'라는 테이블의 row resource를 사용하기위해 row lock을 걸었습니다. 이것을 그림으로 보면 아래와 같습니다. 이것은 매우 간단한 경우고 수많은 ..

[Oracle] oracle datafile rename방법

Oracle database에서 테이블스페이스의 datafile이름을 변경하려면 데이터베이스가 '마운트'(mount) 상태 여야한다. 1. 데이터베이스 마운트 데이터베이스를 마운트 상태로 시작한다.데이터베이스가 이미 실행중이면 데이터베이스를 close하고 마운트 상태로 전환해야 한다. shutdown immediate;startup mount;2. 데이터파일 이름 변경파일시스템 레벨 즉 OS에서 데이터파일의 이름을 변경한다. ## 리눅스일경우mv /data/a.dbf /data/b.dbf## 윈도우일 경우파일명 변경3. 데이터파일 경로 업데이트데이터베이스에서 데이터파일의 새 경로를 알려준다.  아래 SQL문을 사용하여 데이터파일 경로를 업데이트 할 수 있다. alter database rename fil..

[Oracle] oracle 실행계획 조회방법

oracle의 실행계획을 보는 방법은 다양하지만 툴 상관없이 실행계획을 보는 방법에 대해 알아보자 실행계획을 수집할 때 사용하는 oracle 키워드는  'EXPLAIN PLAN FOR' 키워드이다 'EXPLAIN PLAN FOR'을 사용하면 실행계획을 수집할 수 있다. 이 후  SELECT *FROM TABLE(DBMS_XPLAN.DISPLAY);를 통해 수집한 실행계획을 볼 수 있다. 사용 예제를 보면 위와 같이 EXPLAIN PLAN FORDELETEFROM TEST_AWHERE NAME = 'aa';의 실행계획을 수집한다.delete문을 사용했다고 해서 실제로 delete가 되는 것은 아니니 안심해도 된다.  이런식으로 실행계획을 볼 수 있다. 실행계획은 SELECT 뿐만 아니라 INSERT, DE..

[Oracle] ORA-24247 네트워크 엑세스가 ACL(엑세스 제어 목록)에 의해 거부되었습니다.

라는 애러는 UTL_SMTP의 UTL_SMTP.OPEN_CONNECTION을 사용할 떄 애러메시지가 떨어진다. 이유는 외부 네티워크 서비스에 대한 엑세스가 허용되지 않았을 때 발생한다.이를 해결하려면 UTL_SMTP를 사용하는 유저가 네트워크 서비스에 엑세스할 수 있도록 데이터베이스 제어 목록(ACL)을 설정해야 한다. 1. ACL설정새로운 ACL을 설정하고 이를 유저에게 할당한다. BEGIN DBMS_NETWORK_ACL_ADMIN.create_acl( acl => 'smtp_permission.xml', descriptions => 'ACL for SMTP Access', principal => '데이터베이스 유저 명', is_grant => TRUE, privilege => 'connect..

[Oracle] Oracle UTL_SMTP페키지로 메일 전송하기

oracle에서는 UTL_SMTP 패키지에서 메일을 전송할 수 있는 기능을 제공한다. 샘플 procedure를 작성해보자 CREATE OR REPLACE PROCEDURE SP_SEND_MAIL_TESTIS -- 받는사람, 제목, 메시지 V_TO VARCHAR2(100) := '받는사람 이메일 주소'; V_SUBJECT VARCHAR2(100) := '제목 명'; V_MESSAGE VARCHAR2(100) := '메시지'; -- 연결변수, 메일서버 호스트명, 메일서버 포트번호, 보내는 사람 L_CONNECTION UTL_SMTP.CONNECTION; L_SMTP_HOSTNAME VARCHAR2(40) := '메일서버 호스트명'; L_SMTP_PORTNUM NUMBER := 25; L_FROM VAR..

[Oracle] oracle patition의 high_value기준으로 조회하기

DBA_TAB_PARTITIONS 뷰의 HIGH_VALUE는 LONG데이터 타입이기 때문에 ORACLE에서 WHERE절을 사용해 비교할 수 없다.아래 포스트는 HIGH_VALUE를 비교하기 위해 XML로 변환 후 다시 TABLE로 변환하여 비교하는 SQL문이다. DBMS_XMLGEN.GETXMLTYPE 은 조회결과를 XML파입으로 반환하는 함수이며 SELECT DBMS_XMLGEN.GETXMLTYPE( 'SELECT * FROM TEST) AS XFROM DUAL 의 형태로 쓸 수 있다. 아래의 with절을 xml형태로 조회한다면 TEST TEST .. .. .. .. .. .. .. ..  과 같은 형태를 띄고 있다. 그리고 XMLTABLE을 통해 XML데이터를 테이블 형..

[MS-SQL] ms-sql 유지관리 계획 백업 스케쥴 조정

ms-sql에서 유지관리계획 마법사를 통해 백업 스케쥴을 정할 수 있습니다. 관리 -> 유지 관리 계획 -> 유지 관리 계획 마법사다음을 누릅니다유지 관리 계획의 이름을 지정하고 일정을 지정하기 위해서 '변경'을 누릅니다.일정을 디테일하게 정할 수 있습니다.다음은 해당 시간에 어떤 작업을 할지 정할 수 있습니다. 필자는 '데이터베이스 백업(전체)', '유지 관리 정리 태스크' 두개를 지정했습니다. '유지 관리 정리 태스크'는 일정 기간이 지난 백업 파일을 지울 때 사용합니다.생성할 유지 관리 태스크의 실행 순서를 지정합니다.우선 '유지 관리 정리 태스크'가 먼저 실행 될 것이기 때문에 어떤 작업을 진행 할지 지정합니다. 필자는 생성된 bak파일을 삭제하는데 7일이 경과된 파일을 삭제하도록 지정하였습니다...

[MS-SQL] ms-sql job(작업) 생성

ms-sql에서 jobs(작업)생성하는 방법 개체탐색기에서 SQL Server 에이전트 -> '작업'마우스 우클릭 -> 새 작업 일반 탭에서 작업의 이름을 지정한다. 나는 '테이블 목록 확인' 이라는 작업 이름을 지정하였다. 단계 탭에서 '새로 만들기'를 누른다. 단계이름과 진행할 database명, sql구문을 입력한다. 필자는 지정한 DB에서 table을 조회해서 current_table에 저장하는 sql을 작성한다. 일정 탭에서 '새로 만들기'를 누른다. 새 작업일정의 정보를 입력한다. 마지막으로 확인을 누르면 jobs생성이 완료된다. SQL Server 에이전트 -> 작업 에서 방금 추가한 작업이 생성된걸 확인 할 수 있다. 작업의 모니터링을 위해서는 SQL Server 에이전트 -> '작업 확동..

728x90
반응형