2015년 2월 25일 수요일

Oracle logon trigger 에서 로그온 제한이 실패할때 ::: Oracle logon trigger not work.

오라클에서 logon 트리거를 이용해 계정 접근제한을 구현할 때 에러를 출력했음으도 불구하고 로그온이 되버리는 계정들이 있다.

이러한 현상은 해당 계정에 ADMINISTER DATABASE TRIGGER 권한이 있을 경우에 발생한다. (해당 권한을 가진 유저는 로그온트리거 접근 제어가 안된다.)

-- 권한 제거
REVOKE ADMINISTER DATABASE TRIGGER TO UserName;

-- 권한 생성
GRANT ADMINISTER DATABASE TRIGGER TO UserName;

2015년 2월 24일 화요일

C# NativeMethods Class 활용 (C,C++ structure, function 사용하기)

C#을 이용해 프로그래밍을 하다보면 기존에 C, C++로 만들어둔 DLL을 사용해야 할 경우가 빈번하게 발생한다.   C#의 가장 강력한 기능중 하나는 C, C++ 라이브러리를 포괄적으로 지원해 준다는 점이다.   사용법은 다음과 같다.

C, C++ (Structure, Function)


#define JK_API __declspec(dllexport)

#ifdef  __cplusplus
extern "C" {
#endif

typedef struct _JK_test_struct{
    int count;
    char name[32];
}JK_test_struct;

JK_API int JK_test_function(JK_test_struct* jkStruct)
{
    // ...
}


#ifdef  __cplusplus
}
#endif



C# NativeMethods Class



namespace JK_space
{
    internal struct JK_test_struct {
        [MarshalAs(UnmanagedType.I4)] 
        public int count;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst=32)] 
        public string name;
    };

    internal static class JKNativeMethods
    {
        [DllImport("FSB.dll")]
        [return: MarshalAs(UnmanagedType.I4)]
        internal static extern int JK_test_function(ref JK_test_struct jkStruct);
    }
}



C# Main

namespace JK_space
{
    public class JKTestClass
    {
        public static void Main(string[] args)
        {
            // member variables already memory allocated.
            JK_test_struct jkStruct = new JK_test_struct();

            JKNativeMethods.JK_test_function(ref jkStruct);

            System.Console.WriteLine("count is " + jkStruct.count);
            System.Console.WriteLine("name  is " + jkStruct.name);
        }
    }
}

2013년 10월 27일 일요일

Importing .CSV file to database table ( oracle, oracle sql loader )

  • 테스트 환경
    • Oracle 11g, Ubuntu, sqlplus
  •  오라클에 터미널로 접속시 CSV 파일을 통해 손쉽게 DB 테이블을 생성할 수 있다.
  • ctl 파일을 통해 파일 형식을 지정하고 csv 파일을 로딩한다.


  1. 테이블 생성
  2. CREATE TABLE T_CONTACTS
    (
        CONTACT_ID          NUMBER,
        CONTACT_FIRST_NAME  VARCHAR2(30),
        CONTACT_LAST_NAME   VARCHAR2(30),
        CONTACT_PHONE       VARCHAR2(30),
        CONTACT_EMAIL       VARCHAR2(100),
        CONTACT_UPDATE      DATE
    );
    
  3. ctl 파일 생성(contacts.ctl)
  4. OPTIONS (SKIP=1)
    LOAD DATA
    BADFILE 'import_error.bad'
    APPEND
    INTO TABLE T_CONTACTS
    FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
    (
        CONTACT_ID          INTEGER EXTERNAL               NULLIF CONTACT_ID        = BLANKS,
        CONTACT_FIRST_NAME  CHAR(30)                       NULLIF CONTACT_FIRST_NAME= BLANKS,
        CONTACT_LAST_NAME   CHAR(30)                       NULLIF CONTACT_LAST_NAME = BLANKS,
        CONTACT_PHONE       CHAR(30)                       NULLIF CONTACT_PHONE     = BLANKS,
        CONTACT_EMAIL       CHAR(100)                      NULLIF CONTACT_EMAIL     = BLANKS,
        CONTACT_UPDATE      DATE "DD/MM/YYYY HH24:MI:SS"   NULLIF CONTACT_UPDATE    = BLANKS
    )
    
  5. csv 파일 준비(contacts.csv)
  6. ID,LAST_NAME,FIRST_NAME,PHONE,EMAIL,UPDATE
    000,Yohan,Lee,0101231234,youhan@mail.com,28/10/2013 13:43"
    001,Taehee,Kim,0101231234,tahee@mail.com,22/10/2013 13:30"
    002,Sarang,Kim,0101231234,sarang@mail.com,23/10/2013 13:56"
    003,Chayah,Han,0101231234,chay-ah@mail.com,24/10/2013 13:13"
    004,EunHye,Yoon,0101231234,yoon@mail.com,25/10/2013 13:40"
    
  7. sqlldr을 통해 테이블에 csv테이터 삽입(terminal).
  8. sqlldr userid=user/password@DB_INSTANCE_NAME control=contacts.ctl log=contacts.log data=contacts.csv
    

2013년 10월 24일 목요일

오라클 한글 깨짐 해결법

  • 오라클 한글 깨짐 해결법

오라클 서버의 언어 설정값과 클라이언트(터미널)의 언어 설정이 달라서 깨지는 경우가 발생한다.

  • 클라이언트가 리눅스일 경우

.bashrc 파일에 export NLS_LANG=KOREAN_KOREA.AL32UTF8
마지막  AL32UTF8 부분을 오라클 CharacterSet 설정과 동일하게 맞춰주면 된다.


  • 클라이언트가 윈도우즈일 경우

[내컴퓨터] - [속성] - [고급 시스템 설정] - [고급탭] - [환경 변수] 이동
시스템 환경변수에 NLS_LANG(값 KOREAN_KOREA.AL32UTF8) 추가


[실행] - [regedit 입력] - [HKEY_LOCAL_MACHINE] - [SOFTWARE] - [Oracle] - [KEY_OraDB12Home1] 이동
NLS_LANG 수정 (KOREAN_KOREA.AL32UTF8)



  • 참고 

윈도우즈 환경에서 AL32UTF8로 설정시 CMD창에서 오라클 출력이 깨지는 현상이 발생한다. (CMD창의 언어 설정이 UTF8로 되어있지 않기 때문)
cmd창에서 chcp 65001 입력으로 해결됨.
> chcp 655001
chcp 949 입력시 기존 설정으로 돌아간다.(ASCII)
> chcp 949

  • 참고
Windows 환경에서 Oracle OCI를 이용해 쿼리를 보낼시에도 쿼리에 한글이 포함된 경우 NLS_LANG 설정이 제대로 되어 있지 않으면 정상적으로 쿼리가 작동하지 않는다. (이걸로 한동안 삽질 ㅜㅜ)

  • 오라클 언어 설정 보는법

SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_LANGUAGE';
SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_TERRITORY';
SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';