[ORACLE]ALTER COLUMN

Database 2017.10.17 08:34 Posted by 애플자라

-- 일반 컬럼수정
ALTER TABLE EM_MMT_TRAN
MODIFY RECIPIENT_NUM VARCHAR2(16 BYTE)

 

-------------------------------------------------------------------------------------


-- 일반 컬럼수정(NOT NULL)
-- ORA-01442: column to be modified to NOT NULL is already NOT NULL
ALTER TABLE EM_MMT_TRAN
MODIFY CALLBACK VARCHAR2(16 BYTE) NOT NULL

 

-- DISABLE
ALTER TABLE EM_MMT_TRAN DISABLE CONSTRAINT SYS_C0037363 CASCADE

 

--> 일반 컬럼 수정문 실행

 

-- ENABLE
ALTER TABLE EM_MMT_TRAN ENABLE CONSTRAINT SYS_C0037363 

 

SYS_C0037363 Check    Enabled        Not Deferrable    Immediate    Validated            1    "CALLBACK" IS NOT NULL

 

[ORACLE]SELECT INSERT 속도개선, nologging

Database 2012.09.05 10:19 Posted by 애플자라

alter table "해당 테이블" nologging -> 넣을 테이블

alter session set db_file_multiblock_read_count = 128; -> 옵션

insert /*+append*/ into "해당테이블"

옵션 주면 일반 full에 16배 더 빨라져
천 만건이면..어지간한 데이터도 30분 안 쪽으로 끝남


INSERT /*+APPEND/ INTO APLUSORA.NEW_ADDRESS_20120823
(
      BUPJUNG_CODE, SIDO, SIGUNGU,
   DONG, LI, SAN,
   BUNJI_NO1, BUNJI_NO2, DORO_CODE,
   DORO_NAME, JIHA, GUNMUL_NO1,
   GUNMUL_NO2, GUNMUL_NAME, GUNMUL_NAME_DTL,
   GUNMUL_GWANRI_NO, DONG_SEQ, HANGJUNG_CODE,
   HANGJUNG_NAME, ZIP_CODE, ZIP_CODE_SEQ,
   DELIVER_NAME, UPDATE_CODE, UPDATE_DAY,
   DORO_NAME_BEFORE, SIGUNGU_GUNMUL_NAME, APARTMENT
)
SELECT /*+FULL(APLUSORA.NEW_ADDRESS_20120823@APLUS_TEST_LINK) PARALLEL(APLUSORA.NEW_ADDRESS_20120823@APLUS_TEST_LINK, 4)/
   BUPJUNG_CODE, SIDO, SIGUNGU,
   DONG, LI, SAN,
   BUNJI_NO1, BUNJI_NO2, DORO_CODE,
   DORO_NAME, JIHA, GUNMUL_NO1,
   GUNMUL_NO2, GUNMUL_NAME, GUNMUL_NAME_DTL,
   GUNMUL_GWANRI_NO, DONG_SEQ, HANGJUNG_CODE,
   HANGJUNG_NAME, ZIP_CODE, ZIP_CODE_SEQ,
   DELIVER_NAME, UPDATE_CODE, UPDATE_DAY,
   DORO_NAME_BEFORE, SIGUNGU_GUNMUL_NAME, APARTMENT
FROM APLUSORA.NEW_ADDRESS_20120823@APLUS_TEST_LINK;

이렇게 Full 태우고 parallel 옵션주면 더 빨라짐

맨 처음 alter -> alter session set -> insert /append/ select /full....이런 순서로

출처 - 하정민 님

[ORACLE]테이블명,인덱스명 변경

Database 2012.03.30 14:08 Posted by 애플자라

테이블명 변경: RENAME {변경전이름} TO {변경후이름};
인덱스명 변경: ALTER INDEX {변경전이름} RENAME TO {변경후이름};

1.변경하고자 하는 COLUMN으로 Unique Index를 생성한다.

쿼리 -
CREATE UNIQUE INDEX PK명 ON TABLE명(COLUMN명) TABLESPACE TABLESPACE명;
예제(테이블스페이스는 사용 안함) -
CREATE UNIQUE INDEX PK_FTA_PO_LEDGER ON FTA_PO_LEDGER(COMPANY_CODE, PROJECT_CODE, FTA_CODE, ITEM_CODE);


2.해당하는 PK를 삭제한다

ALTER TABLE RECRUIT_APP DROP PRIMARY KEY


쿼리 -
ALTER TABLE TABLE명 DROP CONSTRAINT PK명;
예제(테이블스페이스는 사용 안함) -
ALTER TABLE FTA_PO_LEDGER DROP CONSTRAINT FTA_PO_LEDGER_PK;


3.PK에 속성을 추가한다.
쿼리 -
ALTER TABLE TABLE명 ADD CONSTRAINT PK명 PRIMARY KEY(COLUMN명);
예제 -
ALTER TABLE FTA_PO_LEDGER ADD CONSTRAINT PK_FTA_PO_LEDGER PRIMARY KEY(COMPANY_CODE, PROJECT_CODE, FTA_CODE, ITEM_CODE);

select * from USER_IND_EXPRESSIONS where table_name = 'COUNSELLING'; -- 인덱스검색

[출처] 테이블의 PK 변경하기 (개발자로 살아남기) |작성자 정우아빠

[ORACLE] 자동 증가 컬럼(Sequence) 사용하기

Database 2008.05.07 11:32 Posted by 애플자라

Unique Key를 생성하는 방법은 DBMS마다 차이가 있다.
MS-SQL은 IDENTITY를, MySQL은 auto_increment와 같이 쉽게 사용할 수 있는 방법이 있는데 오라클에서는 Sequence를 사용하여 다음과 같이 유사하게 구현할 수 있다


1. 자동증가컬럼을 사용하고자 하는 MYTABLE테이블을 생성한다.


       CREATE TABLE MYTABLE
               (ID NUMBER, NAME VARCHAR2(20));


2. CREATE SEQUENCE 라는 문장을 사용하여 SEQ_ID라는 이름의 시퀀스를 만든다.


       CREATE SEQUENCE SEQ_ID INCREMENT BY 1 START WITH 10000;

      -- INCREMENT BY 1 : 증가값은 1
      -- START WITH 10000 :  10000부터 증가


3.  테이블에 데이터 입력시에는 NEXTVAL이라는 슈도 칼럼(Pseudo-column)을 이용하여 시퀸스를 사용한다.


       INSERT INTO MYTABLE VALUES( SEQ_ID.NEXTVAL, '홍길동');

       -- CURRVAL : 현재 값을 반환 합니다. .
       -- NEXTVAL : 현재 시퀀스값의 다음 값을 반환 합니다.

----------------------------------------------------------------------------------------------------------


* Sequence 구문


CREATE SEQUENCE sequence_name
       [START WITH n]
       [INCREMENT BY n]
       [MAXVALUE n | NOMAXVALUE]
       [MINVALUE n | NOMINVALUE]
       [CYCLE | NOCYCLE]


* START WITH
시퀀스의 시작 값을 지정합니다. n을 1로 지정하면 1부터 순차적으로 시퀀스번호가 증가 합니다.


* INCREMENT BY
시퀀스의 증가 값을 말합니다. n을 2로 하면 2씩 증가합니다.
START WITH를 1로 하고 INCREMENT BY를 2으로 하면 1, 3, 5,7,..
이렇게 시퀀스  번호가 증가하게 됩니다.


* MAXVALUE n | NOMAXVALUE
MAXVALUE는 시퀀스가 증가할수 있는 최대값을 말합니다.
NOMAXVALUE는 시퀀스의 값을 무한대로 지정합니다.


* MINVALUE n  | NOMINVALUE
MINVALUE는 시퀀스의 최소값을 지정 합니다.
기본값은 1이며, NOMINVALUE를 지정할 경우 최소값은 무한대가 됩니다


[사용규칙]


* NEXTVAL, CURRVAL을 사용할 수 있는 경우
   - subquery가 아닌 select문
   - insert문의 select절
   - insert문의 value절
   - update문의 set절


* NEXTVAL, CURRVAL을 사용할 수 없는 경우
   - view의 select절
   - distinct 키워드가 있는 select문
   - group by, having, order by절이 있는 select문
   - select, delete, update의 subquery
   - create table, alter table 명령의 default값


[수정과 삭제]


ALTER SEQUENCE sequence_name
       [INCREMENT BY n]
       [MAXVALUE n | NOMAXVALUE]
       [MINVALUE n | NOMINVALUE]
       [CYCLE | NOCYCLE]


START WITH는 수정할수 없습니다.
START WITH 절이 없다는 점을 빼고는 CREATE SEQUENCE와 같습니다.


DROP SEQUENCE sequence_name


자료참고 : http://www.oracleclub.com/

[ORACLE] 오라클 죽이고 살리고 @_@;;

Database 2007.08.30 00:05 Posted by 애플자라

오라클시작과종료 ::

① 오라클 데이터베이스 시작하기
Database 의 시작과 종료는 반드시!! Oracle 계정으로 수행해야 합니다.
[root@ora9 /]# su oracle
[oracle@ora9 /]$ source $HOME/.bash_profile
oracle 계정으로 로그인 후 oracle 계정의 환경설정을 reload 합니다.
(처음부터 오라클 계정으로 로그인 하였다면 이 과정은 불필요합니다.)
[oracle@ora9 /]$ sqlplus /nolog
SQL>connect / as sysdba
SQL> startup
오라클 데이터베이스를 시작하고 종료하기 위해서는 OS에서의 인증과 암호 파일을 생성하는
툴인 orapwd를 통해야 한다. 그리고 sys 스키마의 권한인 sysdba 권한과 public 스키마
권한인 sysoper 권한의 특별한 시스템 권한을 소유한 사용자이어야 한다.
· sysdba : 데이터베이스 시작/종료, 아카이브 및 복구 작업, ALTER DATABASE OPEN,
MOUNT, BACKUP, CHANGE, CHARACHER SET 절의 명령어 실행
· sysoper : 데이터베이스 시작/종료, 아카이브 및 복구 작업, ALTER DATABASE OPEN,
MOUNT, BACKUP 절의 명령어 실행
SQL> SELECT * FROM v$version;
현재의 오라클 데이터베이스 인스턴스의 버전 확인하기
② 오라클 데이터베이스 종료하기
[oracle@ora9 /]$ sqlplus /nolog
SQL> connect / as sysdba
SQL> shutdown immediate
③ oratab 파일 편집하기
오라클 데이터베이스를 /etc/rc.d/ini.d에 스크립트로 설정하여 자동으로 실행하게 하여봅시다.
[root@ora9 /]# vi /etc/oratab
다음 부분을 수정 ([SID], [ORACLE_HOME], [자동실행/종료 플래그]로 구성되어 있습니다.)
ora9:/opt/oracle/product/9.2.0.1.0:N e ora9:/opt/oracle/product/9.2.0.1.0:Y
④ Parameter 파일 링크 (xxxxxxxxxxxx은 일정치 않은 숫자 입니다.)
[root @ora9 /]# cp /opt/oracle/admin/ora9/pfile/initora9.ora.xxxxxxxxxxxx \r
/opt/oracle/product/9.2.0.1.0/dbs/initora9.ora
⑤ /etc/rc.d/init.d 에 등록하기
oracle9i 스크립트를 /etc/rc.d/init.d 에 복사합니다.
[root@ora9 /]# cp /usr/local/src/oracle9i /etc/rc.d/ini.t/
oracle9i에 실행권한을 부여합니다.
[root@ora9 /]# chmod 755 /etc/rc.d/init.d/oracle9i
실행수준 2,3,4에 해당하는 데이테베이스를 실행시키기 위하여 심볼릭 링크를 한다.
[root@ora9 /]# ln -s /etc/rc.d/init.d/oracle9i /etc/rc.d/rc2.d/S99oracle9i
[root@ora9 /]# ln -s /etc/rc.d/init.d/oracle9i /etc/rc.d/rc3.d/S99oracle9i
[root@ora9 /]# ln -s /etc/rc.d/init.d/oracle9i /etc/rc.d/rc4.d/S99oracle9i
시스템을 재부팅하거나, 재실행 할 때에 데이터베이스를 중지하기 위하여 심볼릭 링크를 한다.
[root@ora9 /]# ln -s /etc/rc.d/init.d/oracle9i /etc/rc.d/rc0.d/K01oracle9i
[root@ora9 /]# ln -s /etc/rc.d/init.d/oracle9i /etc/rc.d/rc6.d/K01oracle9i
Oracle Database를 재시작 시켜본 후, LISTENER 데몬이 띄워져 잇는지 확인합니다.
[root@ora9 /]# /etc/rc.d/init.d/oracle9i restart
[root@ora9 /]# ps ax | grep LISTENER

리스너 간략정리

오라클 클라이언트에서 서버에 접속하기 위해서는 오라클 서버에 리스너(LISTENER)가 실행되어 있어야 됩니다.

◈ 리스너(Listener)란?
- 오라클 리스너는 네트워크를 이용하여 클라이언트에서 오라클 서버로 연결하기 위한
오라클 네트워크 관리자 입니다.
- 오라클에서 네트워크를 통한 연결은 모두 리스너가 담당하며 리스너와 연결되기
위해서는 클라이언트에 오라클 NET8이 설치되어 있고 이를 통해 오라클 서비스명이라는 것을
만들어 접속해야 합니다.
- 오라클 서버에서 리스너를 시작시켜줘야 클라이언트들이 접속할 수 있습니다.
- lsnrctl명령어로 리스너를 관리 할 수 있습니다.

-- 리스너 시작하기
C:>lsnrctl
LSNRCTL for 32-bit Windows: Version 8.1.6.0.0 - Production on 01-MAY-2002 23:34:57
(c) Copyright 1998, 1999, Oracle Corporation. All rights reserved.
LSNRCTL에 오신 것을 환영합니다. 정보를 보시려면 "help" 를 입력하십시오.
-- start를 입력하면 리스너가 시작됩니다.
LSNRCTL>start

-- 리스너 관련 명령어들
시작시 : LSNRCTL> start
멈출 때 : LSNRCTL> stop
재시작시 : LSNRCTL> reload
서비스 상태보기 : LSNRCTL> status
명령어 보기 : LSNRCTL> help


오라클 서버/클라이언트간의 네트워크 설정을 하기위해서는 서버에서는 listener.ora파일을 그리고
클라이언트에서는 tnsnames.ora파일을 설정해 주어야 합니다.

◈ listener.ora
- 오라클 서버에서 클라이언트의 요청을 듣고, 클라이언트와의 통신을 환경을 설정하는 파일입니다.
- 오라클 서버에 존재하며, 오라클 클라이언트에서 서버로 접속할 때 필요한 프로토콜 및 포트정보등을 설정하는 파일 입니다.
- 프로토콜은 주로 TCP/IP가 많이 사용됩니다.

◈ tnsnames.ora
- 오라클 Client측에서 오라클 서버로 접속할때 필요한 프로토콜 및 포트번호, 서버주소, 인스턴스등을 설정해주는 파일로서 클라이언트에 위치 합니다.

* 참고
- listener.ora와 tnsnames.ora파일의 위치는 ORACLE_HOME/network/ADMIN/에 존재 합니다.
- linstener.ora와 tnsnames.ora는 둘다 오라클 설치시 Net8 configuration 작업을 해주면 생성이 됩니다.




개인적의견:DB죽일때 abort로 죽이지마시고 immiate로 죽이세욤.. 무슨일이 일어날찌 모름 --
그리고 안죽으면 물려있는 프로세스와 세션 다 죽이고 하삼...




출쳐+_+:http://cafe.naver.com/foryouweb.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=1207

 

오라클 DB의 리스너 포트 변경하는 법

근데 오라클 메뉴얼에 있다는게 함정....


먼저 lsnrctl stop 으로 리스너를 중지합니다
그리고 listener.ora에서 1521 포트를 변경하고자하는 포트로 변경합니다.


LISTENER =
   (DESCRIPTION_LIST =
      (DESCRIPTION =
         (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
         (ADDRESS = (PROTOCOL = TCP)(HOST = DB서버호스트네임 or ip)(PORT = 1523))
      )
   )


이렇게 설정해주고 나서 lsnrctl start 명령으로 재시작 합니다.


오라클로 접속한 다음에


$ sqlplus / as sysdba

SQL> ALTER SYSTEM SET LOCAL_LISTENER = "(ADDRESS=(PROTOCOL=TCP)(HOST=DB서버호스트네임 or ip)(PORT=1523))";

SQL> ALTER SYSTEM REGISTER;


lsnrctl status 명령과 netstat -nlp | grep 1523 으로 확인해보면 정상 변경이 확인 될 겁니다.

 

출처 - http://db.necoaki.net/87