Posts

db_files 개수에 포함되는 파일은?

현재 우리 운영DB는 db_files 파라미터 값이 매우 작게 잡혀있다. 따라서 빨리 값을 늘려줘야 하는데, 당장 운영중인 DB를 내리고 파라미터 값을 바꿀 수는 없다. 그런데 여기서 궁금증 하나 생겼다. db_files는 데이터 파일 개수만 제한하는 것일까, 아니면 temp 파일도 여기에 포함되는 것일까? 혹시 온라인 리두로그는? 혹시 컨트롤 파일도 포함되는 것일까?

Read more...

SELECT 결과를 shell 변수로 가져오기

select한 결과를 shell에서 참조해야 하는 경우 다음과 같이 하면 된다.

Read more...

SQL*Plus에서 '&'가 포함된 문자열을 변수로 인식하지 않게 하기

문자열 자체에 &가 포함되어 있는 경우 SQL*Plus에서 & 뒤의 단어를 변수로 인식해 그에 대한 값의 입력을 요구한다.

Read more...

LONG형 컬럼을 가진 테이블의 테이블스페이스 이동

테이블을 다른 테이블스페이스로 옮기려면 다음과 같이 한다.

ALTER TABLE t MOVE TABLESPACE ts_name;

그러나 LONG형 컬럼을 포함하고 있는 테이블에 위 명령을 실행하면 ora-00997 에러가 발생한다. CTAS를 사용해 테이블 복사를 시도해도 같은 에러가 발생한다.

Read more...

SQL*Plus 프롬프트 설정

SQL*Plus의 프롬프트를 username@INSTANCE_NAME >과 같은 식으로 설정하면 현재 로그인한 인스턴스와 사용자 이름을 확인할 수 있어 편하다. logn.sql 스크립트를 만들어 여기에 프롬프트 설정 코드를 넣어두면 된다. Effective Oracle 책(p79)에는 설정 코드가 조금 복잡하게 나와 있다.

Read more...

인덱스 중복과 클러스터링 팩터

테이블 T에 다음과 같은 인덱스가 있다면 ix01은 삭제해야 한다고 생각했다.

  • ix01: a
  • ix02: a+b

ix02을 이용하면 ix01을 사용해야 하는 경우를 모두 포괄할 수 있으니 ix02만 남겨놓고 나머지는 삭제하는 것이 맞다고 생각했던 것이다. 그러나 문제가 항상 그렇게 단순하지만은 않은 듯 하다.

Read more...

DB 링크 삭제 시 제약사항

불필요한 데이터베이스 링크가 난무하는 것 같아 정리하기로 마음을 먹었다. 일단 개발DB에서 운영DB로의 데이터베이스 링크는 허용할 수 없으므로 이것부터 삭제하기로 했다. 개발DB에 sys 계정으로 로그인한 다음 dba_db_links 테이블을 조회해 개발DB에서 운영DB로 연결되는 데이터베이스 링크를 하나씩 확인했다.

Read more...

Oracle XDB 비활성화 방법

Oracle9i부터는 XML DB가 포함되어 있는데, 이 녀석은 HTTP/WebDAV과 FTP 포트로 각각 80802100 포트를 사용한다. 데이터베이스 서버에 Oracle만 실행 중이라면 XML DB가 떠있다고 해서 당장 문제될 것이 없으니 그냥 무시할 수도 있다(보안을 생각한다면 내려야 하겠지만). 개발 서버나 테스트 서버의 경우 8080 포트를 쓰는 다른 서버 프로그램(가령 Tomcat 같은)을 띄워야 하는 경우 포트가 충돌해 문제가 발생할 수 있다. Oracle9i에는 그나마 DBCA를 이용해 DB를 생성할 때 XML DB를 제외할 수 있는 옵션이 있었던 것 같은데, 10g에는 그 옵션이 사라져버렸다.

Read more...

하지 말 것 목록

  1. 사용자로부터 문자열 리터럴을 입력받아 SQL을 만들지 말 것. (eg: 항상 바인드 변수를 사용할 것)
  2. 데이터가 없는 상태 또는 실제 시스템의 극히 일부 데이터만 있는 상태에서 테스트하지 말 것. 실제 시스템의 통계 정보를 불러들이는 것도 소용 없음. 실제로 어떻게 되는지를 보려면 실제 만큼의 데이터가 필요함.

Read more...

DBMS_RANDOM 패키지 사용법

랜덤한 숫자나 문자열을 만들 때 DBMS_RANDOM 패키지를 사용하면 된다.

Read more...