SELECT A.TABLE_NAME
,(SELECT C.COMMENTS FROM DBA_TAB_COMMENTS C WHERE A.OWNER = C.OWNER AND A.TABLE_NAME = C.TABLE_NAME) AS TABLE_COMMENTS
,B.COLUMN_ID AS COLUMN_NO
,B.COLUMN_NAME
,(SELECT D.COMMENTS FROM DBA_COL_COMMENTS D WHERE A.OWNER = D.OWNER AND A.TABLE_NAME = D.TABLE_NAME AND B.COLUMN_NAME = D.COLUMN_NAME) AS COLUMN_COMMENTS
,B.DATA_TYPE
,CASE
WHEN B.DATA_TYPE IN ('VARCHAR', 'VARCHAR2', 'CHAR') THEN
TO_CHAR(B.DATA_LENGTH)
WHEN B.DATA_TYPE = 'NUMBER' THEN
B.DATA_PRECISION || ',' || DECODE(B.DATA_SCALE,0,'0',B.DATA_SCALE)
ELSE ''
END AS DATA_LENGTH
,B.NULLABLE
FROM DBA_TABLES A
JOIN DBA_TAB_COLUMNS B ON A.OWNER = B.OWNER
AND A.TABLE_NAME = B.TABLE_NAME
WHERE A.OWNER = 'EDUIS'
AND (A.TABLE_NAME LIKE 'A______T' OR A.TABLE_NAME LIKE 'Y_BANK_%')
ORDER BY A.TABLE_NAME
,B.COLUMN_ID


/*
※ DB 스키마 조회
1. DBA권한을 가진 스키마로 DB 접속 후
2. OBJECT 관리 스키마 목록을 "(<스키마목록>)"에 열거한 후 SQL을 수행한다.
예) OWNER IN ('AAA', 'BBB', 'CCC')
3. 쿼리 결과를 CSV 파일 또는 Excel 파일로 저장 한다.
저장 파일명은 시스템명_쿼리명.csv
예) 학자금_01_컬럼목록.csv
*/

/*
쿼리명 : 01_컬럼목록
설 명 : Oracle Dictionary에서 컬럼의 Comment 와 Type, Null 여부를 조회.
*/
SELECT
A.OWNER
, A.TABLE_NAME
, A.COLUMN_NAME
, A.COLUMN_ID AS COL_ORDER
, CASE WHEN A.DATA_TYPE IN ('VARCHAR', 'VARCHAR2', 'CHAR') THEN
A.DATA_TYPE || '(' || A.DATA_LENGTH || ')'
WHEN A.DATA_TYPE = 'NUMBER' THEN
A.DATA_TYPE || '(' || A.DATA_PRECISION || ',' || DECODE(A.DATA_SCALE,0,'0',A.DATA_SCALE) || ')'
ELSE A.DATA_TYPE
END AS FULL_DATA_TYPE
, A.DATA_TYPE
, A.DATA_LENGTH
, A.DATA_PRECISION
, A.DATA_SCALE
, A.NULLABLE
, REPLACE(B.COMMENTS, CHR(10), '') AS COMMENTS
FROM DBA_TAB_COLUMNS A
, DBA_COL_COMMENTS B
, DBA_TABLES C
WHERE A.OWNER NOT IN ('SYS','SYSTEM','DBSNMP','OUTLN','WMSYS','TSMSYS')
--A.OWNER IN (<스키마목록>)
AND A.OWNER = C.OWNER
AND A.TABLE_NAME = C.TABLE_NAME
AND A.OWNER = B.OWNER(+)
AND A.TABLE_NAME = B.TABLE_NAME(+)
AND A.COLUMN_NAME = B.COLUMN_NAME(+)
;


/*
쿼리명 : 02_제약사항
설 명 : Oracle Dictionary에서 PK를 포함한 Constraint 컬럼 조회
Constraint Type
P : Primary
U : Unique Index
C : Check
R : Relation Ship (Forgin Key)
*/
SELECT A.OWNER
, A.TABLE_NAME
, A.CONSTRAINT_TYPE
, A.CONSTRAINT_NAME
, DECODE(A.STATUS, 'ENABLED', 'Y', NULL) ENABLED
, B.COLUMN_NAME
, B.POSITION
, A.R_OWNER
, A.R_CONSTRAINT_NAME
FROM DBA_CONSTRAINTS A
, DBA_CONS_COLUMNS B
WHERE A.OWNER NOT IN ('SYS','SYSTEM','DBSNMP','OUTLN','WMSYS','TSMSYS')
--A.OWNER IN (<스키마목록>)
AND A.CONSTRAINT_TYPE IN ('P','U','R')
AND A.OWNER = B.OWNER
AND A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
;


/*
쿼리명 : 03_인덱스
설 명 : Oracle Dictionary에서 INDEX 컬럼을 조회
*/
SELECT A.INDEX_OWNER
, A.INDEX_NAME
, A.TABLE_OWNER
, A.TABLE_NAME
, A.COLUMN_NAME
, A.COLUMN_POSITION
, A.COLUMN_LENGTH
, A.CHAR_LENGTH
, A.DESCEND
, B.CONSTRAINT_TYPE
FROM DBA_IND_COLUMNS A
, DBA_CONSTRAINTS B
WHERE A.INDEX_OWNER NOT IN ('SYS','SYSTEM','DBSNMP','OUTLN','WMSYS','TSMSYS')
--A.INDEX_OWNER IN (<스키마목록>)
AND A.INDEX_OWNER = B.OWNER (+)
AND A.INDEX_NAME = B.CONSTRAINT_NAME (+)
;


/*
쿼리명 : 04_테이블목록
설 명 : Oracle Dictionary에서 테이블 목록 및 테이블 코멘트를 조회
*/
SELECT A.*
,B.*
FROM DBA_TABLES A
,DBA_TAB_COMMENTS B
WHERE A.OWNER NOT IN ('SYS','SYSTEM','DBSNMP','OUTLN','WMSYS','TSMSYS')
--A.OWNER IN (<스키마목록>)
AND A.OWNER = B.OWNER (+)
AND A.TABLE_NAME = B.TABLE_NAME (+)
--AND B.COMMENTS (+) IS NOT NULL
;


/*
쿼리명 : 04-1_Owner별 테이블 수
설 명 : Oracle Dictionary에서 Owner별 테이블 수를 조회
*/
SELECT OWNER, COUNT(*) CNT
FROM DBA_TABLES A
WHERE A.OWNER NOT IN ('SYS','SYSTEM','DBSNMP','OUTLN','WMSYS','TSMSYS')
--A.OWNER IN (<스키마목록>)
GROUP BY OWNER


/*
쿼리명 : 05_FK키
설 명 : Oracle Dictionary에서 FK Constraint 참조 테이블 및 컬럼 조회
*/
SELECT A.CONSTRAINT_NAME
,A.OWNER
,A.TABLE_NAME
,A.PK_OWNER
,A.PK_TABLE
,A.CONSTRAINT_TYPE
,MAX(CASE WHEN B.POSITION IS NULL OR B.POSITION=1 THEN B.COLUMN_NAME END) COLUMN01
,MAX(CASE WHEN B.POSITION= 2 THEN B.COLUMN_NAME END) COLUMN02
,MAX(CASE WHEN B.POSITION= 3 THEN B.COLUMN_NAME END) COLUMN03
,MAX(CASE WHEN B.POSITION= 4 THEN B.COLUMN_NAME END) COLUMN04
,MAX(CASE WHEN B.POSITION= 5 THEN B.COLUMN_NAME END) COLUMN05
,MAX(CASE WHEN B.POSITION= 6 THEN B.COLUMN_NAME END) COLUMN06
,MAX(CASE WHEN B.POSITION= 7 THEN B.COLUMN_NAME END) COLUMN07
,MAX(CASE WHEN B.POSITION= 8 THEN B.COLUMN_NAME END) COLUMN08
,MAX(CASE WHEN B.POSITION= 9 THEN B.COLUMN_NAME END) COLUMN09
,MAX(CASE WHEN B.POSITION=10 THEN B.COLUMN_NAME END) COLUMN10
FROM (
SELECT A.CONSTRAINT_NAME
,A.OWNER AS OWNER
,A.TABLE_NAME AS TABLE_NAME
,A.R_OWNER AS PK_OWNER
,B.TABLE_NAME AS PK_TABLE
,A.CONSTRAINT_TYPE
,DECODE(A.STATUS, 'ENABLED', 'Y', NULL) ENABLED
FROM DBA_CONSTRAINTS A
,DBA_CONSTRAINTS B
WHERE A.OWNER NOT IN ('SYS','SYSTEM','DBSNMP','OUTLN','WMSYS','TSMSYS')
-- A.OWNER IN (<스키마목록>)
AND A.CONSTRAINT_TYPE IN ('P','R')
AND A.R_OWNER = B.OWNER(+)
AND A.R_CONSTRAINT_NAME = B.CONSTRAINT_NAME(+)
) A
, ALL_CONS_COLUMNS B
WHERE A.OWNER = B.OWNER
AND A.TABLE_NAME = B.TABLE_NAME
GROUP BY A.OWNER, A.TABLE_NAME, A.PK_OWNER, A.PK_TABLE, A.CONSTRAINT_NAME, A.CONSTRAINT_TYPE
;

/*
쿼리명 : 06_레코드건수
설 명 : 테이블별 레코드건수 및 사이즈를 조회
※ ANALYZE 를 수행한 테이블만 용량산정이 가능함
*/
WITH
TM_TB_SIZE AS (
SELECT SEGMENT_NAME AS TABLE_NAME
, BYTES
, (BYTES/1024)/1024 AS TABLE_SIZE
FROM DBA_SEGMENTS
WHERE SEGMENT_TYPE = 'TABLE'
AND OWNER NOT IN ('SYS','SYSTEM','DBSNMP','OUTLN','WMSYS','TSMSYS')
-- OWNER IN (<스키마목록>)
)
SELECT A.OWNER
, A.TABLE_NAME
, A.TABLESPACE_NAME
, A.NUM_ROWS
, A.BLOCKS
, A.LAST_ANALYZED
, A.PARTITIONED
, B.BYTES AS "TABLE_SIZE(BYTE)"
, B.TABLE_SIZE AS "TABLE_SIZE(MB)"
FROM DBA_TABLES A
, TM_TB_SIZE B
WHERE A.OWNER NOT IN ('SYS','SYSTEM','DBSNMP','OUTLN','WMSYS','TSMSYS')
--A.OWNER IN (<스키마목록>)
AND A.TABLE_NAME = B.TABLE_NAME (+)
;


/*
쿼리명 : 07_테이블스페이스용량
설 명 : 대략적인 테이블스페이스별 할당량, 사용량을 조회 한다.
*/
SELECT A.TABLESPACE_NAME
, ROUND(A.BYTES / 1024 / 1024) AS "MB ALLOCATED"
, ROUND((A.BYTES-NVL(B.BYTES, 0)) / 1024 / 1024) AS "MB USED"
, NVL(ROUND(B.BYTES / 1024 / 1024), 0) AS "MB FREE"
, ROUND(((A.BYTES-NVL(B.BYTES, 0))/A.BYTES)*100,2) AS "PCT USED"
, ROUND((1-((A.BYTES-NVL(B.BYTES,0))/A.BYTES))*100,2) AS "PCT FREE"
FROM ( SELECT TABLESPACE_NAME
, SUM(BYTES) BYTES
FROM SYS.DBA_DATA_FILES
GROUP BY TABLESPACE_NAME
) A,
( SELECT TABLESPACE_NAME
, SUM(BYTES) BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME
) B
WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME (+)
;


/*
쿼리명 : 08_오브젝트용량
설 명 : 대략적인 테이블스페이스내 오브젝트의 사용량을 조회 한다.
*/
SELECT S.OWNER
, SUBSTR(S.SEGMENT_NAME, 1, 30) AS "TABLE NAME"
, ROUND(SUM(S.BYTES) / 1024 / 1024, 2) AS "MB ALLOCATED"
, CASE WHEN T.BLOCKS > 0 THEN
ROUND(SUM(S.BYTES) / 1024 / 1024 * TO_NUMBER(DECODE(T.BLOCKS, NULL, NULL, (T.BLOCKS / (T.BLOCKS + T.EMPTY_BLOCKS)))), 2)
ELSE 0
END AS "MB USED"
, CASE WHEN T.BLOCKS > 0 THEN
TO_NUMBER(DECODE(T.BLOCKS,NULL, NULL, ROUND(100 *(T.BLOCKS / (T.BLOCKS + T.EMPTY_BLOCKS)), 2)))
ELSE 0
END AS "PCT FULL"
, S.TABLESPACE_NAME
FROM SYS.DBA_SEGMENTS S
, SYS.DBA_TABLES T
WHERE T.OWNER = S.OWNER
AND T.TABLE_NAME = S.SEGMENT_NAME
AND T.TABLESPACE_NAME = S.TABLESPACE_NAME
AND S.OWNER NOT IN ('SYS','SYSTEM','DBSNMP','OUTLN','WMSYS','TSMSYS')
-- S.OWNER IN (<스키마목록>)
GROUP BY S.TABLESPACE_NAME, S.OWNER, S.SEGMENT_NAME, S.SEGMENT_TYPE, T.BLOCKS, T.EMPTY_BLOCKS

[mysql backup(백업) 방법]
mysqldump -u (uid) -p(password) dbname > backupfilename

[restore(복구) 방법]
mysql -u (uid) -p(password) dbname < backupfilename

오라클에서 테이블 복사하는 쿼리문

1. 생성과 동시에 데이터 카피하기(복사)
CREATE TABLE COPY_TB AS SELECT * FROM ORI_TB

2. 기존 테이블에 데이터만 가져오기
INSERT INTO COPY_TB SELECT * FROM ORI_TB


약간 응용해서 들어가면~

테이블을 생성했는데 다른 테이블스페이스로 옮기고 싶을때.

테이블을 다른 테이블스페이스로 지정하고 미리 생성해 둡니다.
CREATE TABLE COPY_TB
(A NUMBER,
B VARCHAR2(10))
TABLESPACE COPY_TBS

그리고 기존 테이블의 내용을 새로 생성한 테이블에 쑤셔 넣습니다.
INSERT INTO COPY_TB SELECT * FROM ORI

이게 이상해 보이지만... exp/imp로 하는 방법도 있습니다.
요기에 대해서는.. 패스 ㅡㅡ;

9i 이상에서는 단 한줄로 테이블이 속한 테이블스페이스를 옮길 수 있습니다.
요렇게

ALTER TABLE copy_tb MOVE TABLESPACE users;

인덱스도 옮길 수 있다. 테스트용 scott꺼를 옮겨 보기로 하자.

alter index PK_EMP rebuild tablespace users;

출처 : http://keizwer.tistory.com/147?srchid=BR1http%3A%2F%2Fkeizwer.tistory.com%2F147

'DataBase' 카테고리의 다른 글

[Oracle] 스키마 조회 쿼리 모음  (0) 2011.09.26
[MySQl] 백업 및 복구  (0) 2011.03.03
[Oracle] 월간 날짜, 요일 리스트 받기  (0) 2009.03.13
[Oracle] 데이터 옮기기  (0) 2009.03.12
[Oracle] 테이블스페이스 늘리기  (0) 2009.03.12

SELECT TO_CHAR(SECURITY_DATE,'YYYY-MM-DD') AS SEC_DAY
,TO_CHAR(SECURITY_DATE,'DY') AS WEEK_DAY
FROM (SELECT TO_DATE('200901'||LPAD(RNUM,2,'0'),'YYYYMMDD') AS SECURITY_DATE
FROM (SELECT TO_CHAR(ROWNUM) AS RNUM
FROM TAB WHERE ROWNUM <= (SELECT TO_NUMBER(TO_CHAR(LAST_DAY('200901'||'01'),'DD')) FROM DUAL)))

오라클 TAB 테이블의 ROWNUM을 이용하므로 테이블스페이스 내에

테이블, SYNONYM, VIEW등이 최소 31개 이상 존재해야 한다.

뭔말인지 모르면...

SELECT COUNT(*) FROM TAB;

의 결과값이 31보다 큰 숫자가 나오면 사용가능하다.

아니면 다른 테이블을 사용하면 된다.

'DataBase' 카테고리의 다른 글

[MySQl] 백업 및 복구  (0) 2011.03.03
테이블 복사  (0) 2009.03.24
[Oracle] 데이터 옮기기  (0) 2009.03.12
[Oracle] 테이블스페이스 늘리기  (0) 2009.03.12
[Oracle 10g] Oracle - drop table, truncate table  (0) 2008.11.20

C:\Documents and Settings\Administrator>exp kj_portal/kj_portal@gjportal file=gjportal.dmp

..... 생략

경고와 함께... 블라블라~

C:\Documents and Settings\Administrator>imp userid=kj_portal/kj_portal@DEV_KJPOTAL file=gjpotal.dmp

C:\Documents and Settings\Administrator>sqlplus "/as sysdba"

SQL*Plus: Release 9.2.0.1.0 - Production on 목 Mar 12 15:40:45 2009

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.


다음에 접속됨:
Oracle9i Release 9.2.0.1.0 - Production
JServer Release 9.2.0.1.0 - Production

SQL> select file_name, tablespace_name, bytes
2 from dba_data_files
3 where tablespace_name = 'KJ_PORTAL_DATA';

FILE_NAME TABLESPACE_NAME BYTES
-------------------------------------------------------------------------------- ------------------------------ ----------
D:\ORACLE\ORADATA\KJPORTAL\KJ_PORTAL_DATA.ORA KJ_PORTAL_DATA 104857600


SQL> alter database datafile 'D:\ORACLE\ORADATA\KJPORTAL\KJ_PORTAL_DATA.ORA' resize 4096M;

데이타베이스가 변경되었습니다.

SQL>

DROP TABLE 스키마.테이블명 [CASCADE CONSTRAINTS] [PURGE]
- 테이블 내의 데이터 삭제
- 테이블 구조 삭제
- 트리거 삭제
- 연관된 인덱스 삭제
- 연관된 오브젝트 권한 삭제

드랍된 테이블은 RECYCLEBIN 으로 이동. FLASHBACK TABLE 로 복구할 수 있다.
PURGE 옵션을 써서 지우면 RECYCLEBIN으로 이동하지 않기 때문에 복구 불가.
PURGE RECYCLEBIN은 RECYCLEBIN의 내용을 비운다.

TRUNCATE TABLE 스키마.테이블명
- 하이워터마크를 테이블 시작 지점으로 설정
- 인덱스도 함께 TRUNCATE됨
- 외래키에 의해 참조되는 테이블은 TRUNCATE할 수 없다.
- UNDO 데이터 생성되지 않음, 내부적으로 COMMIT이 수행됨(DDL커맨드라서).

※ 각 행에 DELETE 명령을 수행하지 않고, 언두 데이터를 작성하지 않기 때문에 TRUNCATE는 일반적으로 DROP보다 빠르다.

출처 : http://devideby0.egloos.com/2095870

새로 생성한 데이터베이스에 여러명의 개발자가 달라붙어서 작업을 하다보니...

어느새 이상한 찌꺼기로 보이는것들이 생기곤 한다.

sql> select * from tab;

...

...

BIN$+JhRwRSHQRm8CPHbIPcAhg==$0
BIN$+dyK/iSeSm2xC63JjCCnWQ==$0
BIN$+iZrUVW+QK6GJf6AU54nDQ==$0
...

이런 정상적이지 않은 놈들이 보인다.

토드 스키마브라우져에서 뒤져보니

My Schema > Constrants 에 들어있는 놈들이다.

자세히 보니 이미 드랍된 테이블의 인덱스들 인듯

drop를 시도하면...

ORA-38301: 휴지통에 있는 객체에 대해 DDL/DML을 수행할 수 없음

이라고 나온다... 웬 휴지통 -.,ㅡa 이거 뭥미...

결국 ORA-38301로 검색을 해보니

오라클 10g에서는 휴지통(recyclebin) 이라는 것이 존재하는데

drop명령으로 삭제한 객체들이 바로 삭제되지 않고 여기에 담겨있다고 한다.

휴지통에 들어있는 객체들은 아래의 상황 전까지 휴지통에 보관된다고 한다.

- purse 명령으로 영구히 삭제

-undrop명령으로 drop객체 복구

- 테이블스페이스 (휴지통)공간이 부족할때.

- 테이블스페이스가 extend될때

휴지통에 들어있는 객체들 보기

- user_recyclebin

- dba_recyclebin

휴지통 비우기

purge recyclebin; 사용자의 휴지통 비우기
purge dba_recyclebin; 휴지통내의 모든 놈들 비우기
purge tablespace users; users테이블스페이스의 휴지통 비우기
*purge table "휴지통내의 이름"휴지통의 하나의 객체만 제거시


휴지통의 객체 복구
flashback table 휴지통내의 이름 to before drop;

휴지통에 넣지 않고 drop
drop table 테이블명 purge;

출처 : http://cafe.daum.net/oddtip/FbCl/187?docid=1CBe5|FbCl|187|20080808184442&q=ORA-38301&srchid=CCB1CBe5|FbCl|187|20080808184442

얼마전 데이터를 입력하다가...

INSERT INTO ... VALUES (... 'Black&Decker'...);

명령을 실행했더니 '&' 문자 때문에 변수를 입력하라고 나온다.

오라클에서 '&'문자는 변수를 입력받는데 쓰이는 특수 문자라고 하더라

해결 방법은...

이걸 실행해주면 된다.

SQL>set define on

이걸 실행해주면 된다.



그림처럼 괄호가 변하는게 보기 싫이서...

찾아보니

editor 화면 -> 오른쪽마우스 ->Editing Options -> Languages 항목에서 PL/SQL 선택 확인 -> Edit 버튼 클릭 -> Highlighting tab -> Styles 항목에 "()" 목록을 찾으셔서 원하시는 셋팅으로 바꿔 주시면 됩니다

() 표시가 커져보이는 것은 Click 시에 Bold 가 적용되는것이 default 이어서 그렇습니다. 이 부분을 해제해 주시면 됩니다

내가 원한것은 볼드로 변하는건 그냥 두고

배경까지 변해서 글씨를 알아 볼 수 없게 하는걸 제거하는것

그부분에 대한 답변도 있었다.

외곽선 관련 사항이므로 BORDER 부분에서 효과를 없애시면 됩니다

네이버 토드정복하기 카페에서...

+ Recent posts