2018년 3월 28일 수요일

ANSI LEFT JOIN

** 참고
http://ultteky.egloos.com/10411192

**
테이블 EMP(사원), DEPT(부서) 가 있다고 하자.
사원 중 DEPT_CD 가 A01, A02 인 사원 중에
부서와 연결하여 EMP.EMP_NM(사원명), DEPT.DEPT_NM(부서명)을 가져오고 싶다.
단 부서 중에 유효한(VALID_YN = 'Y') 것만 연결을 하고 싶다.
부서와 연결 안된 사원도 모두 가져오고 싶다.

이럴때 아래와 같이 사용해야 한다.

SELECT EMP.EMP_NM, DEPT.DEPT_NM
FROM EMP
     LEFT JOIN DEPT
     ON(1=1
      AND DEPT.DEPT_CD = EMP.DEPT_CD
      AND DEPT.VALID_YN = 'Y'
     )
WHERE 1=1
  AND EMP.DEPT_CD IN ('A01', 'A02')

간단히 말하면
중요 테이블을 EMP 라고 하고 안중요 테이블은 DEPT 이라 했을 때
(DEPT 와 연결 안된 EMP 도 가져와야 하므로)

중요 테이블의 FILTER 는 WHERE 에 걸고(ON 에 걸면 안됨)
->
WHERE 1=1
  AND EMP.DEPT_CD IN ('A01', 'A02')

안중요 테이블의 FILTER 는 ON 에 걸어야 된다.(WHERE 에 걸면 안됨)
->
AND DEPT.VALID_YN = 'Y'

당연히 JOIN 조건(연결 조건)은 ON 에 걸어야 한다.(WHERE 에 걸면 안됨)
->
AND DEPT.DEPT_CD = EMP.DEPT_CD

**
OUTER 조인 말고 INNER JOIN 은
연결조건, 필터조건 모두 ON 에 걸든 WHERE 에 걸든 상관없다.

**
테스트 해봐야지...

2018년 3월 12일 월요일

오라클 sqlplus

** SQLPLUS 실행

오라클 설치 머신에서 sqlplus 할 경우 아래 같이 하면 되네...
비밀번호 아무렇게나 넣어도 되네...

# sqlplus "sys/비밀번호아무거나@서비스이름 as sysdba"

또는

# sqlplus "sys@서비스이름 as sysdba"
하고 비밀번호 입력하라고 나오면 그냥 엔터 해도 되네...

비밀번호에 특수문자 있는 경우 비밀번호를 \"\" 로 감싸고
각 특수문자마다 역슬래시 붙여야 한다.

# sqlplus abcdef/\"abcdef\_plus123456\!1\"@ORCL

# sqlplus <계정>/<비밀번호>@<IP>/<SID>

** 파일 실행하기. @ 사용. " 사용

(utf-8 파일을 sqlplus 에서 실행할 경우 아래 넣고 sqlplus 실행)
CMD> SET NLS_LANG=.AL32UTF8

(NLS_LANG 확인)
SQL> @.[%NLS_LANG%]

(파일 실행)
SQL> @"실행할 파일 경로"
SQL> @"/xxx/yyy/execute.sql"
(파일명만 넣을 경우 현재 경로에 있는 파일 실행)

** 실행 결과 파일로 저장하기

SQL> SPOOL /xxx/yyy/result_001.txt
...sql 실행
SQL> SPOOL OFF

** 종료

SQL> exit

** SQL 문 실행하기

맨 끝에 ;(세미콜론) 넣고 엔터. DML 실행 후에는 commit; 실행
SQL>실행할 sql 문;

** 테이블 스키마 조회

SQL>desc 테이블명;

** 시스템 권한 부여.

PUBLIC 은 모든 사용자.
WITH ADMIN OPTION 은 부여받은 SYSTEM 권한을 다른 사용쟈에게 양도 가능.
GRANT 시스템권한 TO 사용자또는PUBLIC;
GRANT 시스템권한 TO 사용자또는PUBLIC WITH ADMIN OPTION;


** 시스템 권한 회수

REVOKE 시스템권한, ... FROM 사용자또는PUBLIC;

** 객체 권한 부여

GRANT 객체권한(컬럼명, 컬럼명, ...) ON 객체명 TO 사용자또는PUBLIC WITH ADMIN OPTION;

객체권한종류

  • SELECT
  • UPDATE
  • INSERT
  • ALTER
  • DELETE
  • EXECUTE
  • INDEX : CREATE INDEX ON 테이블... 실행할 수 있는 권한
  • REFERENCES : 외래 키 정의할 수 있는 권한

** 객체 권한 취소

REVOKE 객체권한 ON 객체명 FROM 사용자또는PUBLIC CASCADE CONSTRAINTS;
CASCADE CONSTRAINTS 는 REFERENCES 권한으로 정의된 제약 조건 함께 삭제해준다.

** 슬래시

SQLPLUS 에서 슬래시는 이전 문장을 재실행한다.

슬래시는 주로 PL/SQL 블럭 같은 embedded ; 된 명령문을 실행하기 위해 필요하다.
슬래시는 type, procedure, a package or a package body 정의할 때 사용한다.
BEGIN .. END 또는 CREATE OR REPLACE 사용할 수있는 곳에서 슬래시를 사용한다고 생각하면 된다.

오라클 datapump (expdp impdp) 사용법

http://dinggur.tistory.com/167

http://gyh214.tistory.com/110

http://hayleyfish.tistory.com/99

** 특징

  • 10g 이상
  • 시간 예측 가능
  • 고속
  • exp 호환 안됨
  • 일시 정지 가능
  • 명령어 expdp impdp
  • full 모드, shema 모드, tablespace 모드, table 모드
  • ddl 문장만 추출가능


** 사전작업

  • datapump 쓰기 위한 디렉토리 생성
    • (만들기)
      • create directory datapump1 as '/home/oracle';
    • (권한주기)
      • grant read, write on directory datapump1 to public(또는 특정스키마);
    • (디렉토리확인)
      • select * from dba_directories;
    • (작업확인)
      • select owner_name, job_name, operation, job_mode, state from dba_datapump_jobs ;

** expdp 예제

(export 하는 디비 서버에서 실행. by sysdba)
# expdp \"SYS/XXX@ORCL AS SYSDBA\" schemas=AAAA \
directory=DATA_PUMP_DIR \
dumpfile=dp_AAAA_20180313.dmp \
logfile=dp_AAAA_20180313.log


(export 하는 디비 서버에서 실행. export 하는 계정으로 ...)
SQL> grant read, write on directory DATA_PUMP_DIR to BBBB_PLUS;

# expdp \"BBBB/비밀번호@PGMIS\" schemas=BBBB \
directory=DATA_PUMP_DIR \
dumpfile=140_dp_BBBB_20180313.dmp \
logfile=140_dp_BBBB_20180313.log

-- schemas: 덤프 받을 계정
-- directory: 덤프 받을 디렉토리명. 실제 디렉토리 경로 아님. create directory 으로 생성함
-- dumpfile: directory 에 exp 받을 파일
-- logfile: directory 에 로그

** impdp 예제

(import 하는 디비에서 실행. by sysdba)
# impdp \"/ as sysdba\" schemas=AAAA \
directory=DATA_PUMP_DIR \
dumpfile=DP_AAAA_20180313.DMP logfile=140_DP_AAAA_20180313.DMP.log \
remap_tablespace=TSD_AAAA_01:TSD_AAAA_PLUS_01,TSI_CMIS_01:TSI_AAAA_PLUS_01 \
remap_schema=AAAA:AAAA_PLUS


(import 하는 디비에서 실행. by import 받을 계정)
SQL> grant read, write on directory DATA_PUMP_DIR to BBBB_PLUS;

# impdp BBBB_PLUS/비밀번호@ORCL schemas=BBBB \
directory=DATA_PUMP_DIR \
dumpfile=140_DP_BBBB_20180313.DMP logfile=140_DP_BBBB_20180313.DMP.log \
remap_tablespace=TSD_BBBB_01:TSD_BBBB_PLUS_01,TSI_BBBB_01:TSI_BBBB_PLUS_01 \
remap_schema=PGMIS:PGMIS_PLUS

-- schemas: 덤프 받을 계정
-- directory: dump 파일 디렉토리명. 실제 경로 아님.
-- dumpfile: directory 내에 있는 import 할 파일
-- logfile: import 로그
-- remap_tablespace: 테이블스페이스 변경. OLD_A:NEW_A,OLD_B:NEW_B 형식
-- remap_schema: 계정 변경. OLD_A:NEW_A,OLD_B:NEW_B 형식



2018년 3월 7일 수요일

리눅스 centos7 DNS 서버 구축

일단 centos7 을 dns 서버로 설치하였다.
dns 서버로 설치하였으므로 이미 bind* 패키지가 설치되어 있다.

** 가정
dns서버는 ns1.aaaa.com 111.111.111.111 이라하고
이 dns서버에서 처리할 도메인(zone)은 aaaa.com bbbb.co.kr 이라고 가정한다.

** bind 패키지 설치

** hostname 영구 설정
hostnamectl set-hostname ns1.aaaa.com

이 파일 수정하면 /etc/resolv.conf 가 바뀌더라.

hostname ns1.aaaa.com 이렇게만 해버리면 다음 부팅 때 원복된다 그랬나?


** /etc/named.conf 수정

listen-on port 53 { any; };
allow-query { any; };

자세한 내용은 인터넷에서

** /etc/named.rfc1912.zones 수정. 도메인(zone) 설정
이 파일은 /etc/named.conf 하단에 보면 include 설정이 되어 있다.
이 파일의 맨 마지막에 설정하고자 하는 zone 을 설정한다.

zone 파일(forward. 도메인으로 ip 찾아가기)만 설정하고
rev 파일(reverse. ip 로 도메인 찾아가기)은 설정할 필요가 없단다.

zone "aaaa.com" IN {
     type master;
     file "aaaa.com.zone";
     allow-update { none; };
};

zone "bbbb.co.kr" IN {
     type master;
     file "bbbb.co.kr.zone";
     allow-update { none; };
};


** vi /var/named/aaaa.com.zone
$TTL 값을 짧게 설정해서 당분간은 변경내용이 바로바로 등록되도록 한다.
$TTL 10M; default 1D
한국통신 dns 보관 기간. 너무 작으면 dns 서버 과부하 나므로 주의하란다.

https://www.linux.co.kr/home/lecture/?leccode=374

@       IN SOA  ns1.aaaa.com.        webmaster.mailserver1.com. (
                                        2018030801       ; serial
                                        10M     ; refresh
                                        1H      ; retry (default 1D)
                                        1W      ; expire
                                        3H )    ; minimum
                IN NS ns1.aaaa.com.
                IN MX 10 mail.mailserver1.com.
                IN A 222.222.222.111
        mail    IN A 222.222.222.111
        blog    IN A 222.222.222.111
        music   IN A 222.222.222.333
        www     IN A 222.222.222.333
        ftp     IN A 222.222.222.333

** vi /var/named/bbbb.co.kr.zone

@       IN SOA  ns1.aaaa.com.        webmaster.mailserver1.com. (
                                        2018030801       ; serial
                                        10M     ; refresh
                                        1H      ; retry (default 1D)
                                        1W      ; expire
                                        3H )    ; minimum
        IN NS ns1.aaaa.com.
        IN NS ns2.aaaa.com.
        IN MX 10 mail.mailserver1.com.
        IN A 333.333.333.111
ftp     IN A 444.444.444.333
aaa     IN A 444.444.444.333
bbb     IN A 444.444.444.333


** zone 파일 설명
소유자.그룹이 root.named 이어야 한다.
chown root.named /var/named/aaaa.com.zone
;(세미콜론은 주석)
@ 은 /etc/named.rfc1912.zones 파일에서 설정했던
zone "aaaa.com" IN {
 "aaaa.com" 요부분이다. 실제로는 aaaa.com. 이다. 마지막 .(점) 주의

예를 들어

** zone 파일 설명(SOA 파트)
@       IN SOA  ns1.aaaa.com.        webmaster.mailserver1.com. (
에서
@ 는 도메인명(zone) 이고 
SOA 는 이 zone 의 시작 소유권이며
ns1.aaaa.com. (마지막 점 주의)는 primary nameserver 를 적고
webmaster.mailserver1.com. 는 관리자 이메일이다. webmaster@mailserver1.com 이지만 @ 는 다른 용도로 쓰이므로 . 으로 데체

SOA 나머지 부분은 인터넷에서 찾아보세요

** zone 파일 설명(NS 파트)
        IN NS ns1.aaaa.com.
        IN NS ns2.aaaa.com.

이 zone(도메인, bbbb.co.kr)의 1차 2차 nameserver 설정

** zone 파일 설명(MX 파트)
        IN MX 10 mail.mailserver1.com.
인터넷에서 찾아보세요

** zone 파일 설명(A 파트)
        IN A 333.333.333.111 ;bbbb.co.kr 로 접속하면 333.333.333.111 로 가라
ftp     IN A 444.444.444.333 ;ftp.bbbb.co.kr 로 접속하면 444.444.444.333 로 가라
aaa     IN A 444.444.444.333 ;aaa.bbbb.co.kr 로 접속하면 444.444.444.333 로 가라
bbb     IN A 444.444.444.333 ;bbb.bbbb.co.kr 로 접속하면 444.444.444.333 로 가라



** zone 파일 자세한 설명

https://www.linux.co.kr/home/lecture/?leccode=374



** 파일 검증
named-checkconf /etc/named.conf
named-checkconf -z /etc/named.conf
named-checkzone aaa.bbbb.co.kr /var/named/bbbb.co.kr.zone

** named (dns 데몬) 재시작
service named restart
service named start
service named stop
service named status -l


** dns 서버는 53 포트를 사용하므로 아래와 같이 53 포트를 tcp udp 모두 열어주어야 한다.
# firewall-cmd --permanent --zone=public --add-port=53/tcp
# firewall-cmd --permanent --zone=public --add-port=53/udp
또는
# firewall-cmd --permanent --zone=public --add-service=dns


# firewall-cmd --reload

** 내 로컬 윈도우에서 테스트하기
제어판 network 설정 ip4 속성에서 dns 를 111.111.111.111(예제) 로 바꾸고
브라우저 새로 열어 http://aaa.bbbb.co.kr 접속해보기

nlslookup - 111.111.111.111


2018년 3월 5일 월요일

centos oracle 설치

http://cubenuri.tistory.com/190

http://puttico.tistory.com/121?category=601216






  • centos 7 설치
    • centos7 minimal iso 파일을 rufus 프로그램을 이용하여 usb 에 설치
    • usb 부트로 설치
    • 파티션 세부 설치

  • 필요 라이브러리 설치
    • yum -y install compat-libgcc-296 compat-libstdc++-29 compat-libstdc++-33 gcc gcc-c++ glibc-deve ...
  • 시스템 파라미터 수정
    • sudo vi /usr/lib/sysctl.d/00-system.conf
    • # Disable netfilter on bridges.
    • #net.bridge.bridge-nf-call-ip6tables = 0
    • #net.bridge.bridge-nf-call-iptables = 0
    • #net.bridge.bridge-nf-call-arptables = 0
    • vi /etc/sysctl.conf
  • 시스템 파라미터 적용
    • sysctl -p
  • 파일 핸들러 수 조정
    • vi /etc/security/limits.conf
  • 64bit 리눅스 설정
    • vi /etc/pam.d/login
  • GUI 라이브러리 설치
    • yum install tigervnc-server.x86_64
    • yum install pixman pixman-devel libXfont
    • (???) yum -y groupinstall "Server with GUI"
  • java 설치
    • (설치가능 확인)yum list java*jdk-devel
    • (설치)yum install java-1.8.0-openjdk-devel.x86_64
    • (설치 확인)rpm -qa java*jdk-devel
    • vi /etc/profile...export JAVA_HOME=...
  • dba 그룹 oracle 유저 생성

    • visudo -f /etc/sudoers
    • oracle ALL=(ALL:ALL) NOPASSWD:ALL
  • .bash_profile 설정
    • ...
    • export LANG=C

  • 기타
    • vi .../product/11.2.0/db_1/ctx/lib/ins_ctx.mk
      •     -static $(LINK_CTXHX) $(CTXHXOBJ) $(INSO_LINK) /usr/lib64/stdc.a
    • vi .../product/11.2.0/db_1/sysman/lib/ins_emagent.mk
      •     $(MK_EMAGENT_NMECTL) -lnnz11
  • xming putty, putty registry 변경하여 cp949
  • unzip
    • unzip ./linux.x64_11gR2_database_1of2.zip
    • unzip ./linux.x64_11gR2_database_2of2.zip
  • .../runInstaller
    • Install database software only
    • product languages 는 english 만 하자
    • installation location 은 product/11.2.0/db_1
    • (root 로 실행).../orainventory/orainstRoot.sh
    • (root 로 실행).../db_1/root.sh
  • (리스너 설정)
    • netca
  • (데이터베이스 설정)
    • dbca
  • (자동실행 설정)
    • vi /etc/oratab
    • ...

----------------------------------------------
(현재 locale 확인)

  • echo $LANG
(설정 가능한 locale 확인)
  • locale -a
(locale 변경)
  • vi /etc/sysconfig/i18n
  • export LANG="ko_KR.euckr"
(한국어 로케일 설정 서버에서 콘솔 작업시 한글 출력 깨지면
  • export LANG=C
(기타)
  • vi /usr/share/locale/locale.alias
  • 그러므로 export LANG="ko_KR" 해도 됨...

인기글

추천 게시물

윈도우에서 오라클 11g 삭제하기

* 참조 및 출처 https://wickedmagic.tistory.com/407 https://wookoa.tistory.com/304 * 윈도우에서 오라클 11g 삭제하기 > 서비스에서 오라클 관련 서비스 모두 종료 > Un...