-- 시스템상의 데이터베이스 목록 출력하기

exec sp_MsForEachDB 'print ?'


-- 모든 데이터베이스 체크하기

exec sp_MsForEachDB 'DBCC CHECKDB (?)'


-- 모든 데이터베이스 삭제하기

exec sp_MsForEachDB 'DROP DATABASE [?]'


"모든 데이터베이스를 삭제" 한다고 말했다. 

절대!!! 조심해서 사용할 것!!!



이 글의 주제.. "전체 테이블 삭제하기"는 아래와 같다.


-- 해당 데이터베이스의 모든 테이블 삭제하기

exec sp_MsForEachTable 'DROP TABLE ?'


다시한번 말하지만...

"모든 테이블을 삭제" 한다고 말했다. 

절대!!! 조심해서 사용할 것!!!







참고로 모든 객체 삭제용 스크립트를 만들때는 아래와 같은 방법을 이용하자!!!!


--Table

SELECT 'DROP TABLE ' + SCHEMA_NAME(schema_id)+'.'+name AS TableToDrop FROM sys.objects WHERE type='U'


--VIEW

SELECT 'DROP VIEW ' + SCHEMA_NAME(schema_id)+'.'+name AS ViewToDrop FROM sys.objects WHERE type='V'


--PROCEDURE

SELECT 'DROP PROCEDURE ' + SCHEMA_NAME(schema_id)+'.'+name AS procedureToDrop FROM sys.objects WHERE type='P'


--FUNCTION

SELECT 'DROP FUNCTION ' + SCHEMA_NAME(schema_id)+'.'+name AS functionToDrop FROM sys.objects WHERE type='FN'



여기서 나오는 결과값 쿼리를 복사해서 일괄 실행하면 끝!!!




Table에 데이터가 들어가 있는 경우 사이즈를 축소하는 것은 안된다.

여기까지는 다 아는 사실..



그런데.. 에를 들어서

Number(13,3)의 경우 소수점 3자리를 5자리로 늘이려면..

ORA-001440 정도 또는 자리수를 축소할 열은 비어 있어야 합니다. 라는 오류가 발생한다.


축소??


검새을 해보니..

13+3의 길이를 잡고 있다가 3을 5로 변경을 하면..

13+5가 되는 것이 아니라 11+5가 되기 때문에 축소로 본단다..



그래서 3을 5로 변경을 하려면..


Number(15,5)로 앞자리도 변경을 해주어야 정상적으로 변경이 된다.


SELECT * FROM user_constraints
WHERE owner = 'DB User' AND constraint_name = '제약조건 명'


이상!!

잘되던 오라클이 갑자기 접속이 안됐다.


AD전환 하고 나서 오라클을 지우고 다시 설치하였는데..



어라..

"ORA-12154 TNS : 서비스 명을 해석할 수 없습니다." 라는 오류가 발생한다. ???


인터넷 검색 시작..


Oracle 설치 폴더에 Network에 Admin 폴더 안에 있는 sqlnet.ora 파일이 서버와 틀려서 발생하는 오류란다.



열어서 확인해 보니..

AD관련해서 NAMES.DEFAULT_DOMAIN = ***.NET이부분이 추가가 되었다.


앞에 #을 붙여서 주석처리..



그리고 다시 시도 했더니..


젠장.. 또 안된다.



"ORA-12638: 신용검색에 실패했습니다.".... 란다.


젠장..



아무리 내 신용도가 바닥이라..


회사에서 내말을 아무도 안믿기는 하지만.. 쩝..


이건 너무 하잖어..




다시 검색..


결과도 잘 안나온다.


TNS셋팅 다시 해봤다.

TNS명에 보니 이전에는 안붙던 도메인이 붙는다.


TNS명.***.NET 이라고..



다시 시도..


역시나 같은 결과..




쩝..




인터넷 다시 검색..

다행히 결과가 나왔다.



sqlnet.ora 파일에 SQLNET.AUTHENTICATION_SERVICES= (NTS) 이부분을 주석처리.. 하란다.


역시나 앞에 #을 붙이고 시도..



다행히 정상적으로 로그인이 된다.



하튼.. 지랄이다.. 지랄.. 쩝..

1.Windows 계열일 경우
이경우 레지스트리에 등록된 SID를 지우셔야 할겁니다.
제가 찾아본것으로는 아래 레지스트리를 지우시고
다시 DB를 생성하시면 될듯합니다.
\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMEID\SID
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OracleServiceSID
이두가지를 지우시면 될듯합니다.
여기서 SID는 예전에 설치하셨을때 사용하신 SID겠죠..
이게 남아있으면 같은 SID로 다시 DB를 만들수 없습니다.


2.Unix계열(리눅스도 포함)
보통 SID는 oratab이란 파일에 저장되는데
이파일은 시스템마다 조금씩 틀리지만
/etc, /var/opt/oracle 밑에 존재합니다.
그냥 이파일을 지우시던지...아니면
편집하셔서 기존에 설치하셨던 SID 리스트를
지우시면 됩니다.



출처 : http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10110&eid=d1ATOYd7LSPSDdaPp6zGw8j1Ej4NbTI6&qb=v8C288WsIHNpZA
ADO

MDAC (Microsoft Data Access Components)

UDA(Universal Data Access)는 여러 기업 환경의 정보에 접근하는 방법을 제공하기 위한 마이크로소프트의 전략이다. UDA는 다양한 정보 소스에 빠르게 접근할 수 있으며, 관계형 또는 비 관계형 데이터베이스를 모두 접근할 수 있다. 그리고 개발 툴과 개발 언어에 비 독립적이면서도 쉽게 인터페이스를 프로그래밍할 수 있도록 지원한다. 이 기술은 다양한 데이터 소스에 접근할 수 있으며, 쉽게 유지보수할 수 있는 솔루션을 제공하며, 개발 툴, 어플리케이션, 플랫폼 모두에 최상의 선택이 될 것이다.

UDA는 데이터 소스간의 이동에 소요되었던 많은 비용과 시간을 줄여주며, ODBC, RDO, DAO를 포함하는 차기 표준 인터페이스로 예상되고 있다.

MDAC(Microsoft Data Access Components)는 UDA를 지원하며, ADO(ActiveX Data Objects), Remote Data Service(RDS), OLE DB, ODBC(Open Database Connectivity) 그리고 OLE DB for OLAP을 포함하고 있다.

MDAC은 버전 1.0에서 시작하여 1.5, 2.0, 2.1 그리고 2.5 버전까지 발전되어 왔다. MDAC 1.0은 ODBC 3.0, ADO 1.0, ADC(Advanced Data Connector) 1.0 그리고 OLE DB 1.0을 포함하고 있었으며, 1996년에 발표되었다.

MDAC 1.5는 ODBC 3.5, ADO 1.0, OLE DB 1.5 그리고 RDS(Remote Data Service) 1.5를 포함하고 있었으며, 97년에 발표되었으며, 여러 번의 Minor 업그레이드(MDAC 1.5, MDAC 1.5a, MDAC 1.5b, MDAC 1.5c, MDAC 1.5d)를 거쳐왔다.

MDAC 2.0은 ODBC 3.51, OLE DB 2.0, ADO 2.0, RDS 2.0 그리고 OLE DB for OLAP을 포함하고 있었으며, 98년 말에 발표되었다. MDAC 2.0은 비주얼 스튜디오 6의 2번 CD에 포함되어져 있다. MDAC 2.1은 MDAC 2.0의 기능을 보안하여서 발표되었으며, MS SQL 서버 7.0에 포함되어져 있다.

MDAC을 사용할 때 주의해야 될 점은 MDAC을 포함하고 있는 프로그램을 설치하고 나면 MDAC의 버전이 변경되기 때문에 최신 버전의 MDAC으로 환경을 보전해 주어야 한다. 예를 들어, 비주얼 스튜디오 6.0을 설치했다면 MDAC은 2.0으로 변경된다. 그렇기 때문에 비주얼 스튜디오 6.0을 설치한 후에 다시 MDAC 2.1을 설치해 주어야 최신 버전의 MDAC을 사용할 수 있다.

Windows NT 4.0에서 옵션 팩을 다시 설치했다면 MDAC은 1.5로 변경된다. 이럴 경우에도 역시 MDAC 2.1을 다시 설치해야 한다.

MDAC 2.5는 99년 말에 Windows 2000과 함께 발표될 예정이며, MDAC 2.5는 Windows 2000의 시스템 레벨의 구성요소로 만들어졌다. 그렇기 때문에 Windows 2000에서는 MDAC을 별도로 설치할 필요 없이 Windows 2000 운영체제를 설치할 때 함께 설치하면 된다. 그리고 현재 MDAC 2.5에 대한 모습을 보려면 Windows 2000 베타 3를 설치해서 사용하면 된다.

그러면 MDAC에 포함된 5가지 구성요소에 대해서 간략하게 살펴본다.

  1. ODBC - Open Database Connectivity의 약어로서, MS SQL 서버, 오라클(Oracle),인포믹스(Informix), 사이베이스(Sybase), DB2 등의 관계형 데이터베이스에 접속하기 위한 인터페이스 규격이다. ODBC는 마이크로소프트에 의해서 제안되었으며, 현재로서는 대부분의 관계형 데이터베이스의 표준  인터페이스로 사용되고 있다. ODBC에 대응하는 것으로 IBM, 노벨(Novell), 워드 퍼펙 등과 같은 회사들이 연합하여 정의한 데이터베이스 인터페이스로는 IDAPI(Integrated Database Application Programming Interface)가 있다.
     
  2. ADO - ActiveX Data Object의 약어로서, 기존의 DAO(Data Access Object)와 RDO(Remote Data Object)를 대체하는 데이터 접속 개체이다. ADO에 대한 자세한 내용은 이 장의 2절에서 다루고 있다.
     
  3. OLE DB - Object Linking & Embedding Database의 약어로서, ODBC를 대체하는 기술로 부각되고 있는 마이크로소프트의 기술이다. OLE DB에 대한 자세한 내용은 이 장의 3절에서 다루고 있다.
     
  4. RDS - Remote Data Service의 약어로서, 웹 환경에서 데이터베이스를 조작하기 위한 마이크로소프트의 기술인 ADC(Advanced Database Connector)의 다음 버전이다. RDS에 대한 자세한 내용은 제 6부 User Interface 프로그래밍에서 다루고 있다.
     
  5. OLEDB for OLAP - Object Linking & Embedding Database for On Line Analytic Processing의 약어로서, MS SQL 서버의 일부인 Decision Support Service(코드명 Plato, OLAP Server)의 데이터를 조작하기 위한 기술이다.

ActiveX Data Object




출처 : http://tong.nate.com/tjkim

오라클 쿼리를 돌리는데 "ORA-00972: 식별자의 길이가 너무 깁니다" 이런 오류가 난다면..


Alias의 길이를 체크해봐야 한다.


Oracle 8 버전대에서는 상관없지만

9버전 이상으로 가면서...

Alias가 20바이트(영문20자 한글10자)가 초과하면 상기와 같은 오류가 난다.


참고참고...

테스트 환경 : Oracle 9i

아래와 같은 쿼리가 있다.

SELECT * FROM TMP1
WHERE PAT_NO NOT IN (SELECT PAT_NO FROM TMP2)
;



결과가 안나온다.

분명히 TMP1에는 있고 TMP2에는 없는 PAT_NO가 있는데...


쿼리를 바꿔보았다.



SELECT A.* FROM TMP1 A
WHERE NOT EXISTS (SELECT 1 FROM TMP2 WHERE PAT_NO = A.PAT_NO)
;


PAT_NO가 NULL인것 까지 몽땅 나온다. 췟..

SELECT A.* FROM TMP1 A
WHERE NOT EXISTS (SELECT 1 FROM TMP2 WHERE PAT_NO = A.PAT_NO)
    AND A.PAT_NO IS NOT NULL
;


원하는 결과가 나왔다.


혹시나 하는 맘에 첫번재 쿼리를 바꿔보았다.



SELECT A.* FROM TMP1 A
WHERE NOT EXISTS (SELECT 1 FROM TMP2 WHERE PAT_NO = A.PAT_NO WHERE PAT_NO IS NOT NULL)
;


결과가 나온다... 젠장...


뭐가 다른지 잘 모르겠다. 쩝...

오라클에서는 Update 할때..

UPDATE INSA1 A SET
(A.JUMIN_NO1,A.EMP_CNAME)
=(SELECT JUMON_NO1,EMP_CNAME FROM INSA2 WHERE EMP_NO = A.EMP_NO)
WHERE A.EMP_NO = '000000'

이런 쿼리가 먹었었는데...

SQL은 안먹는듯..

다음과 같이 수정..

UPDATE INSA1 SET
JUMIN_NO1 = A.JUMIN_NO1,
EMP_CNAME = A.EMP_CNAME
FROM INSA2 A INNER JOIN INSA1 B ON A.EMP_NO = B.EMP_NO
WHERE A.EMP_NO = '000000'

간만에 SQL만지려니.. 기억이 가물... 가물...

http://dbblack.sogang.ac.kr/erwin/

+ Recent posts