CREATE SCHEMA

DB/Common 2012. 4. 12. 10:00

 CREATE SCHEMA 구문 사용

  * 모든 테이블과 뷰 생성에 대해 하나의 연산으로 가능하게 할 때 쓴다.

  * 하나의 구문으로 처리하므로 관련 테이블과 뷰 중 하나라도 생성 실패하면, 트랜잭션 전체가 Rollback 된다.

    이것은 몇몇 테이블과 뷰의 생성 실패로 인해 관련 오브젝트들을 개별적으로 DROP 하는 부담을 없애준다.

  * 관련 구문에 이상이 없으면 생성을 완료하고 트랜잭션을 Commit 한다. 

  * Object인 테이블과 뷰 이외에 권한 부여(Grant) 또한 넣을 수 있다.

  * 실제 이 구문이 스키마(Schema)를 만드는 구문 같이 보이나, 실제 스키마를 만드는 것이 아니다.

    사용자가 생성되면서 사용자와 동일한 이름의 스키마가 생성되며, 이 구문은 단지 단일 연산이 가능하게만 한다.

  * 생성 시 사용되는 TABLESPACE 위치 지정 또한 가능하다.

 

- CREATE SCHEMA 제약사항

  * 반드시 현재 로그인 된 사용자 이름(스키마)과 동일한 스키마 명을 지정해야 한다. 그렇지 않으면 ORA-02421 에러를 반환한다.

  * 이 작업은 sys 유저 같이 DBA 권한이 있는 유저라 할 지라도 다른 이름의 스키마를 생성하는 것은 에러를 반환한다.

  * CREATE TABLE, CREATE VIEW, GRANT 이외의 구문 삽입 시, 전체적인 문장 해석 오류가 발생한다.

 

- CREATE SCHEMA 문법

 

 

  * 문법에서 보듯이 테이블, 뷰, 권한부여만 넣을 수 있다. 컬럼 추가나 인덱스 추가를 위한 구문들은 사용할 수 없다.

 

- CREATE SCHEMA 예제

  * 성공 예제( 로그인 세션 유저: a1 )

 CREATE SCHEMA AUTHORIZATION a1
  CREATE TABLE dept (
   deptno NUMBER(3,0) NOT NULL,
   dname VARCHAR2(15),
    CONSTRAINT pk_dept PRIMARY KEY(deptno)
    USING INDEX TABLESPACE a1_idx) TABLESPACE a1

  CREATE TABLE emp (
   empno NUMBER(5,0) NOT NULL,
   ename VARCHAR2(15) NOT NULL,
   deptno NUMBER(3,0),
    CONSTRAINT pk_emp PRIMARY KEY(empno)
    USING INDEX TABLESPACE a1_idx,
    CONSTRAINT fk_dept_emp FOREIGN KEY(deptno) REFERENCES dept(deptno) ) TABLESPACE a1

  CREATE VIEW emp_sal AS
   SELECT * FROM emp WHERE empno <= 3000

  GRANT select ON emp TO scott

/

  * 실패 예제(로그인 세션 유저: sys, 그러나 생성 스키마 이름은 a1 인 경우)

 SQL> connect / as sysdba
연결되었습니다.
SQL> CREATE SCHEMA AUTHORIZATION a1
  2   CREATE TABLE dept (
  3    deptno NUMBER(3,0) NOT NULL,
  4    dname VARCHAR2(15),
   ... (중략) ...
 14   CREATE VIEW emp_sal AS
 15    SELECT * FROM emp WHERE empno <= 3000
 16   GRANT select ON emp TO scott
 17  /
CREATE SCHEMA AUTHORIZATION a1
*
1행에 오류:
ORA-02421: 누락 혹은 부당한 스키마 권한 식별자

  로그인 유저와 생성할 스키마 권한 식별자는 반드시 동일해야 한다.


Posted by linuxism
,

'Development > Common' 카테고리의 다른 글

변수와 메서드 명명 규칙  (0) 2012.04.27
Alpha, Beta 버전  (0) 2012.04.27
Base64 원리 2  (0) 2012.04.11
unreachable code  (0) 2012.03.12
main 함수  (0) 2012.03.07
Posted by linuxism
,

SHA1 해쉬 구하는 클래스

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SHA1Utils {
    
    private static final String ALGORITHM = "SHA1";

	

    public static byte[] getHash(byte[] input) {
        try {
			MessageDigest md = MessageDigest.getInstance(ALGORITHM);
			return md.digest(input);
		} catch (NoSuchAlgorithmException e) {
			
			e.printStackTrace();
			return null;
		}
    }
    
 
    public static byte[] getHash(InputStream input) throws IOException {
        try {
			MessageDigest md = MessageDigest.getInstance(ALGORITHM);
			int read = -1;
			byte[] buffer = new byte[1024];
			while ((read = input.read(buffer)) != -1) {
				md.update(buffer, 0, read);
			}
			return md.digest();
		} catch (NoSuchAlgorithmException e) {
		
			e.printStackTrace();
			return null;
		}
    }
    
 
    public static byte[] getHash(File file) throws IOException {
		byte[] hash = null;
    	BufferedInputStream bis = null;
		try {
			bis = new BufferedInputStream(new FileInputStream(file));
			hash = getHash(bis);
		} finally {
			if (bis != null) try { bis.close(); } catch(IOException ie) {}
		}
		return hash;
    }


    public static String getHashHexString(byte[] input) {
		byte[] hash = getHash(input);
		StringBuffer sb = new StringBuffer(); 
		for (int i = 0; i < hash.length; i++) { 
			 sb.append(Integer.toString((hash[i] & 0xf0) >> 4, 16)); 
			 sb.append(Integer.toString(hash[i] & 0x0f, 16));
		} 
		return sb.toString();
    }
    
 
    public static String getHashHexString(String input) {
		return getHashHexString(input.getBytes());
    }
    
 
    public static String getHashHexString(String input, String charsetName) throws UnsupportedEncodingException {
		return getHashHexString(input.getBytes(charsetName));
    }
    
 
    public static String getHashHexString(InputStream input) throws IOException {
        byte[] hash = getHash(input);
        StringBuffer sb = new StringBuffer(hash.length * 2); 
        for (int i = 0; i < hash.length; i++) { 
			 sb.append(Integer.toString((hash[i] & 0xf0) >> 4, 16)); 
			 sb.append(Integer.toString(hash[i] & 0x0f, 16));
		} 
    	return sb.toString();
    }
    
    
 
    public static String getHashHexString(File file) throws IOException {
		byte[] hash = getHash(file);
		StringBuffer sb = new StringBuffer(hash.length * 2);
		for (int i = 0; i < hash.length; i++) { 
			 sb.append(Integer.toString((hash[i] & 0xf0) >> 4, 16)); 
			 sb.append(Integer.toString(hash[i] & 0x0f, 16));
		}
    	return sb.toString();
    }

}


출처 - http://jonelove.tistory.com/133

'Development > Java' 카테고리의 다른 글

Dead code  (0) 2012.04.19
Javadoc 이클립스에서 한글 출력  (0) 2012.04.19
SpringMVC에서 log4j 사용  (0) 2012.04.01
java - slf4j  (0) 2012.03.24
서블릿 load-on-startup  (0) 2012.03.21
Posted by linuxism
,