테이블 크기 계산 방법

1) 총 블럭 헤더 크기를 계산

TOTAL BLOCK HEADER   = BLOCK HEADER, PART A + BLOCK HEADER, PART B
BLOCK HEADER, PART A = (FIXED HEADER + VARIABLE TRANSACTION HEADER)
BLOCK HEADER, PART B = (TABLE DIRECTORY + ROW DIRECTORY)
- FIXED HEADER : 57 BYTE (고정된 블럭 헤드)
- VARIABLE TRANSACTION HEADER : 23 * I (I는 해당 TABLE의 INITRANS의 값)
- TABLE DIRECTORY : 4
- ROW DIRECTORY : 2*R (R : R(AVG.# OF ROWS/BLOCK) 데이터 블록 내의 평균 ROW 수 )
 

2) 데이터 블럭 당 사용 가능한 데이터 영역을 계산

AVAILABLE DATA SPACE = (BLOCK SIZE - TOTAL BLOCK HEADER) - ((BLOCK SIZE - BLOCK HEADER, PART A) * (PCTFREE/100))
- BLOCK SIZE : 데이터베이스의 블럭 크기 (SVRMGRL의 SHOW PARAMETER에서 DB_BLOCK_SIZE를 확인)
 

3) 평균 ROW의 전체 컬럼의 길이를 계산

ROW 길이를 계산하기 위하여 테이블 정의에서 컬럼 수, 각 컬럼의 데이터 타입, 가변 길이 컬럼의 평균 크기 등을 참조한다.
D(DATA SPACE/AVERAGE ROW) : 테이블의 ROW의 평균 길이
 

4) 총 평균 ROW 크기를 계산

BYTE/ROW = ROW HEADER + F + V + D
- ROW HEADER : ROW당 3BYTES (NON-CLUSTERED TABLE)
- F : 250 BYTES 이하를 사용하는 컬럼의 TOTAL LENGTH BYTES (각 컬럼 당 1 BYTE)
- V : 250 BYTES 이상를 사용하는 컬럼의 TOTAL LENGTH BYTES (각 컬럼 당 3 BYTE) 
- D : D(DATA SPACE/AVERAGE ROW 평균 ROW의 전체 컬럼의 길이)
 

5) 데이터 블록 내의 평균 ROW 수를 계산

R(AVG.# OF ROWS/BLOCK) = AVAILABLE SPACE / AVERAGE ROW SIZE
- AVAILABLE SPACE : AVAILABLE DATA SPACE (데이터 블럭 당 사용 가능한 데이터 영역)
- AVERAGE ROW SIZE : BYTE/ROW (총 평균 ROW 크기)
 

6) 테이블에서 요구되는 블럭과 바이트 수를 계산

BLOCKS FOR TABLE = # ROWS / R
# ROWS : 테이블의 ROW 수
R : R(AVG.# OF ROWS/BLOCK) 데이터 블록 내의 평균 ROW 수
BYTES FOR TABLE = # BLOCKS FOR TABLE * BLOCK SIZE

반응형
블로그 이미지

조이풀 라이프

Lift is short, enjoy the life

,

암호화 항목중 일부분인 단방향 SHA256 해시 암호화 함수 생성하기를 설명한다.

1. 메모장을 열어 아래 내용을 붙여넣고 파일명을 SHA256Encryptor.java 로 합니다.


---------------------------------- 단방향(SHA256) -----------------------------------

CREATE OR REPLACE and RESOLVE JAVA SOURCE NAMED "SHA256Encryptor.SHA256" AS /*파일명*/
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
  
public class SHA256Encryptor {
    public static String SHA256(String str){
        String SHA = "";
        try{
            MessageDigest sh = MessageDigest.getInstance("SHA-256");
            sh.update(str.getBytes());
            byte byteData[] = sh.digest();
  
            StringBuffer sb = new StringBuffer();
            for(int i = 0 ; i < byteData.length ; i++){
                sb.append(Integer.toString((byteData[i]&0xff) + 0x100, 16).substring(1));
            }
            SHA = sb.toString();
        }catch(NoSuchAlgorithmException e){
            e.printStackTrace();
            SHA = null;
        }
        return SHA;
    }
     
    public static void main(String[] args) {
        String in_str = args[0];
        String out_str = SHA256(in_str);
         
        System.out.println(">>in["+in_str+ "],out[" + out_str + "]" + out_str.length() );
    }
}
 

2. 콘솔을 열어 아래와 같이 실행하여 JAVA 파일을 오라클에 적재한다.

생성 : C:\>loadjava -u 아이디/암호@계정 -v -resolve C:\SHA256Encryptor.java
원격지에서 실행가능하며 DBA 권한이 필요합니다.
 

3. 오라클접속하여 아래와 같은 함수를 만들고 실행하여 함수를 생성한다.

CREATE OR REPLACE FUNCTION SHA265(NAME VARCHAR2) RETURN VARCHAR2
AS LANGUAGE JAVA
NAME 'SHA256Encryptor.SHA256(java.lang.String) return java.lang.String';

 

4. 테스트를 수행한다.

 SELECT SHA256('1234') FROM DUAL

반응형
블로그 이미지

조이풀 라이프

Lift is short, enjoy the life

,

오라클에서 사용할 수 있는 Simple Name 마스킹 함수


create or replace FUNCTION M2U_MASKING_NAME(in_date IN varchar2)
    return varchar2
IS
    RS VARCHAR2(50) :=null;
BEGIN
    IF LENGTH(in_data) > 2 THEN
        RS := SUBSTR(in_data, 1, 1) || LPAD('*', 1, '*') || SUBSTR(in_data, 3, LENGTH(in_data)-2);
    ELSEIF LENGTH(in_data) = 2 THEN
        RS := SUBSTR(in_data, 1, 1) || LPAD('*', 1, '*');
    ENDIF

    return (RS);
END;

반응형
블로그 이미지

조이풀 라이프

Lift is short, enjoy the life

,