SQL*Plus에서 '&'가 포함된 문자열을 변수로 인식하지 않게 하기
문자열 자체에 &
가 포함되어 있는 경우 SQL*Plus에서 &
뒤의 단어를 변수로 인식해 그에 대한 값의 입력을 요구한다.
내 이 세상 도처에서 쉴 곳을 찾아보았으나, 마침내 찾아낸, 컴퓨터가 있는 구석방보다 나은 곳은 없더라.
문자열 자체에 &
가 포함되어 있는 경우 SQL*Plus에서 &
뒤의 단어를 변수로 인식해 그에 대한 값의 입력을 요구한다.
테이블을 다른 테이블스페이스로 옮기려면 다음과 같이 한다.
ALTER TABLE t MOVE TABLESPACE ts_name;
그러나 LONG
형 컬럼을 포함하고 있는 테이블에 위 명령을 실행하면 ora-00997
에러가 발생한다. CTAS를 사용해 테이블 복사를 시도해도 같은 에러가 발생한다.
SQL*Plus의 프롬프트를 username@INSTANCE_NAME >
과 같은 식으로 설정하면 현재 로그인한 인스턴스와 사용자 이름을 확인할 수 있어 편하다. logn.sql 스크립트를 만들어 여기에 프롬프트 설정 코드를 넣어두면 된다. Effective Oracle 책(p79)에는 설정 코드가 조금 복잡하게 나와 있다.
테이블 T에 다음과 같은 인덱스가 있다면 ix01
은 삭제해야 한다고 생각했다.
ix01
: a
ix02
: a+b
ix02
을 이용하면 ix01
을 사용해야 하는 경우를 모두 포괄할 수 있으니 ix02
만 남겨놓고 나머지는 삭제하는 것이 맞다고 생각했던 것이다. 그러나 문제가 항상 그렇게 단순하지만은 않은 듯 하다.
불필요한 데이터베이스 링크가 난무하는 것 같아 정리하기로 마음을 먹었다. 일단 개발DB에서 운영DB로의 데이터베이스 링크는 허용할 수 없으므로 이것부터 삭제하기로 했다. 개발DB에 sys
계정으로 로그인한 다음 dba_db_links
테이블을 조회해 개발DB에서 운영DB로 연결되는 데이터베이스 링크를 하나씩 확인했다.
Oracle9i부터는 XML DB가 포함되어 있는데, 이 녀석은 HTTP/WebDAV과 FTP 포트로 각각 8080
과 2100
포트를 사용한다. 데이터베이스 서버에 Oracle만 실행 중이라면 XML DB가 떠있다고 해서 당장 문제될 것이 없으니 그냥 무시할 수도 있다(보안을 생각한다면 내려야 하겠지만). 개발 서버나 테스트 서버의 경우 8080
포트를 쓰는 다른 서버 프로그램(가령 Tomcat 같은)을 띄워야 하는 경우 포트가 충돌해 문제가 발생할 수 있다. Oracle9i에는 그나마 DBCA를 이용해 DB를 생성할 때 XML DB를 제외할 수 있는 옵션이 있었던 것 같은데, 10g에는 그 옵션이 사라져버렸다.
랜덤한 숫자나 문자열을 만들 때 DBMS_RANDOM
패키지를 사용하면 된다.
SQL*Plus에서 실행시킨 SQL 또는 PL/SQL 블록의 실행속도를 보려면 다음과 같이 set timing on
을 사용하면 된다.
일반적으로 range 파티션 테이블을 만들 때는 다음과 같이 한다.