:: 제약조건 확인
SELECT * FROM ALL_CONSTRAINTS WHERE TABLE_NAME = '테이블명';

SELECT A.UNIQUENESS, B.* FROM ALL_INDEXES A, ALL_IND_COLUMNS B WHERE A.INDEX_NAME = B.INDEX_NAME AND A.TABLE_NAME='테이블명';

::제약조건 삭제
ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명 CASCADE;

::인덱스 생성
CREATE UNIQUE INDEX PK명 ON 테이블명 (컬럼명1, 컬럼명2....);

:: PK 생성
ALTER TABLE 테이블명 ADD (CONSTRAINT PK명 PRIMARY KEY (컬럼명1, 컬럼명2....));
출처 : http://lockdown.tistory.com/127

네이밍 수정을 하지 않으면 R6-(엔티티) 등의 임의의 constraint 네임이 생성된다.
이것은 확인도 어렵고, 불분명하기에 적절한 네이밍을 설정해주는 것이 좋다.

:: 규칙정의
PK : PK_테이블_컬럼
RelationsShips : FK__자식테이블_자식컬럼__부모테이블_부모컬럼 ( '__'은 명확한 구분을 위해 )

Tools -> Names -> Model Naming Options..

:: RelastionShips 항목에 다음의 코드를 입력
FK__%Child_%ChildFK()__%Parent_%ParentPK()

:: Key Group to Index 항목에 다음의 코드 입력
%KeyType_%TableName_%PK()

좀더 자세한 erwin 스크립트는 Macro Toolbox 버튼을 클릭하면 참고할 수 있음.

테스트용 테이블 만들때 유용하게 쓸수 있죠..

CREATE TABLE TEST_MEMBER AS SELECT * FROM MEMBER

 

검색을 걸어서 필요한 데이타만 복사할수도 있죠.

CREATE TABLE TEST_MEMBER AS SELECT * FROM MEMBER WHERE IDX<10000

 

테이블 구조만 복사하고 싶다면..

CREATE TABLE TEST_MEMBER AS SELECT * FROM MEMBER WHERE 1=2

검색조건을 이렇게 한다면 테이타는 복사가 안되겠죠..

 

테이블이 이미 만들어진 경우는

INSERT INTO TEST_MEMBER SELECT * FROM MEMBER


주의할점은 테이블구조만 복사된다는 것이다.

프라이머리키나 인덱스등은 복사가 안돼니 따로 설정해 주어야 한다.


-- 추가


테이블을 다른 테이블스페이스로 지정하고 미리 생성해 둡니다.
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://ilovehsk.tistory.com/109
:: 해당하는 PK 삭제
ALTER TABLE "테이블명" DROP CONSTRAINT "PK명";

:: 변경하고자 하는 COLUMN으로 Unique Index를 생성
CREATE UNIQUE INDEX "PK명" ON "테이블명"(칼럼1, 칼럼2, 칼럼3, 칼럼4);

:: PK에 속성 추가
ALTER TABLE "테이블명" ADD ( CONSTRAINT "PK명" PRIMARY KEY (칼럼1, 칼럼2, 칼럼3, 칼럼4) );

[출처] 오라클 pk 변경하기|작성자 리트머스
Database -> Pre & Post Script -> Model-Level

Code 탭 -> New 버튼클릭 -> 스크립트 입력

:: Oracle
%ForEachTable() {
    COMMENT ON TABLE %TableName IS '%EntityName';

    %ForEachColumn() {
    COMMENT ON COLUMN %TableName.%ColName IS '%AttName';
    }
}

:: MySQL
%ForEachTable() {
    ALTER TABLE %TableName COMMENT = '%EntityName';

    %ForEachColumn() {
    ALTER TABLE %TableName CHANGE COLUMN %ColName %ColName %AttDatatype %AttNullOption COMMENT '%AttName';
    }
}

Forward Engineer Schema Generation -> Option 탭 -> Schema -> Post-Script 선택하여 체크

출처 : http://koreantramp.tistory.com/198
SQL 2000 Server 서비스 팩 설치시 오류 대처방법

스크립트 실행 중 오류 발생 '80sp1-tools.sql (1)'



1. 쿼리분석기로 SQL Server 에 접속한다.

2. DBCC CHECKDB('dbname', NOINDEX) 로 지정한 데이터베이스에서 모든 개체의 할당과 구조적 무결성을 검사한다.

NOINDEX - 시스템 테이블이 아닌 테이블의 클러스터되지 않은 인덱스를 검사하지 않도록 지정한다. NOINDEX는 사용자 정의 테이블의 클러스터되지 않은 인덱스를 검사하지 않으므로 전체 실행 시간이 줄어든다. DBCC CHECKDB에서 모든 시스템 테이블 인덱스를 검사하므로 NOINDEX는 시스템 테이블에 어떤 영향도 주지 않는다.

-------------------------------------
NOINDEX 에 쓰일 수 있는 다른 옵션들 ↓

REPAIR_ALLOW_DATA_LOSS - REPAIR_REBUILD에서 수행하는 모든 복구 작업을 수행하며 할당 오류, 구조적 행 오류나 페이지 오류, 손상된 텍스트 개체 삭제를 수정하기 위한 행과 페이지의 할당 및 할당 취소가 포함된다. 이러한 복구를 할 경우 일부 데이터가 손실될 수 있다. 복구 작업은 사용자가 변경 사항을 롤백할 수 있도록 사용자 트랜잭션 내에서 수행된다. 복구가 롤백되어도 데이터베이스에는 오류가 그대로 포함되므로 백업에서 데이터베이스를 복원해야 한다. 제공된 복구 수준 때문에 오류 복구를 생략한 경우 해당 복구에 종속적인 모든 복구도 생략된다. 복구를 완료한 후 데이터베이스를 백업한다.

REPAIR_FAST - 클러스터되지 않은 인덱스의 별도 키를 복구하는 것과 같이 사소하고 시간이 소요되지 않는 복구 작업을 수행한다. 이러한 복구는 데이터 손실의 위험 없이 빨리 실행할 수 있다.

REPAIR_REBUILD - REPAIR_FAST에서 이루어지는 모든 복구 작업을 수행하고 인덱스 다시 작성과 같이 시간이 소요되는 복구를 포함한다. 이러한 복구는 데이터 손실의 위험 없이 실행할 수 있다.
-------------------------------------

3. 검사하여 오류가 발생하는 데이터베이스를 위의 옵션으로 적절히 사용하여 복구한다.
이때 단일사용자 모드로 설정해야 한다.
sp_dboption dbname, single, true

4. 복구되면 단일사용자 모드 해제한다.
sp_dboption dbname, single, false

5. 서비스 팩을 다시 설치한다.


Oracle 10g 에서 Recycle Bin 기능이 생겼다.

9i 까지는 DROP TABLE 명령으로 잘못지운 테이블이 복구가 불가능 했었다.

10g 에서는 DROP TABLE 명령으로 지운 후 테이블을 검색해보면

BIN$........... 라는 새로운 테이블이 생성되는 것을 볼 수 있다.

이것을

SQL> SHOW RECYCLEBIN;

해보면,

ORIGINAL_NAME 을 알 수 있도록 표시된다.

이 테이블들은 FLASHBACK 기능으로 되살릴 수 있다.

만약 DROP시킨 테이블명이 TB_USER 라고 한다면, SHOW RECYCLEBIN; 으로 검색한 결과에

ORIGINAL_NAME 에 TB_USER라고 표시될 것이다.

되살리기 위해선

SQL> FLASHBACK TABLE TB_USER TO BEFORE DROP;

위와 같이 명령하면 된다.


또한, RECYCLEBIN 을 비우기 위해선,

SQL> PURGE RECYCLEBIN;


테이블을 DROP 할때 RECYCLEBIN 에 넣지 않고 바로 삭제하는 명령은,

SQL> DROP TABLE TB_USER PURGE;

위와 같이 해주면 된다.


오라클의 XDB listener 의 포트와 Apache Tomcat 의 포트가 기본적으로 8080으로 동일하다.

Apache Tomcat 의 포트를 변경하는 방법도 있겠지만,

외국사이트를 검색결과 XDB listener 의 포트를 변경하는 방법이 있드라~

명령프롬프트에서 lsnrctl status 를 입력하거나 아래의 쿼리를 사용하면,

ftp 와 http 이 각각 2100 과 8080 으로 설정된 것을 볼 수 있다.

SELECT dbms_xdb.cfg_get "xdbconfig.xsd" FROM dual;

이 설정을 바꿔보겠다.

아래의 스크립트 문장으로 각각 6010 와 6020 으로 변경할 수 있다.

이 스크립트는 auto commit 이다.

declare
newconfig XMLType;
begin
    --ftp port setting
    select updatexml(
    dbms_xdb.cfg_get(),'/xdbconfig/sysconfig/protocolconfig/ftpconfig/ftp-port/text()',6010) into newconfig from dual;
    dbms_xdb.cfg_update(newconfig);
    --http port setting
    select updatexml(
    dbms_xdb.cfg_get(),'/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text()',6020) into newconfig from dual;
    dbms_xdb.cfg_update(newconfig);
end;
/
리스너를 재시작한다.

lsnrctl status 로 확인하면, 변경된 것을 확인해 볼 수 있다.