@ 오라클 NLS_LANG 에 대한 설명

 

오라클 데이타베이스 설치시 데이타베이스 내에 사용하는 언어셋 설정하게 되어 있으며

오라클 데이타 베이스 내부에서는 설정된 언어셋을 사용하게 된다

 

현재 데이타베이스내에 사용되는 언어셋을 확인하는 방법
=> select * from v$nls_parameters;

 

그렇다면 환경변수로 설정하는 NLS_LANG 은 어떤 역활을 하는 것인지 알아보자

 

만약 NLS_LANG이 AMERICAN_AMERICA.UTF8으로 되어 있고 오라클데이타베이스가 문자/언어셋이
KO16KSC5601 으로 되어 있다면 데이타 삽입시 데이타가 UTF8으로 되어 있다고 간주하고
데이타를 오라클데이타베이스에서 사용하는 KO16KSC5601 형태로 인코딩하여 데이타를 삽입하게 된다

즉 NLS_LANG 은 데이타베이스에 삽입할 데이타의 형태가 무엇인지를 설정하게 되는 것이다.

만약 삽입할 데이타가 KO16KSC5601 형태의 한글 데이타이지만 NLS_LANG 환경 변수가
AMERICAN_AMERICA.UTF8 이라면 데이타베이스 삽입시 데이타가 UTF8 형태로 간주하여
데이타베이스 삽입을 위해 KO16KSC5601 형태로 인코딩하는 과정에서 문제가 발생하여
잘못된 데이타가 들어가거나 에러를 발생하고 삽입이 이루어지지 않게 된다
즉 KO16KSC5601 형태의 데이타를 UTF8으로 인식하여 이를 KO16KSC5601 형태로 인코딩하는
과정에서 문제가 발생하는 것이다.

 

다시 정리하면

NLS_LANG 환경 변수의 역활은 데이타베이스에 삽입할 데이타의 언어셋이 무엇인지를 설정하는데 사용되는 것이다

'Development' 카테고리의 다른 글

gdb로 STL 디버깅하기  (0) 2014.07.11
프로그램 코딩시 사용되는 vi 의 유용한 기능들  (0) 2014.07.11
AND

@ GDB 로 STL 컨테이너들의 내용을 보여주는 gdb macro 파일을 다운 받아 설치합니다.

  • 다운로드 : gdb_stl_view
  • 설치 : 다운로드한 파일을 ~/.gdbinit 파일명으로 복사

 

@ 사용 방법

Data type GDB command
std::vector<T> pvector stl_variable
std::list<T> plist stl_variable T
std::map<T,T> pmap stl_variable
std::multimap<T,T> pmap stl_variable
std::set<T> pset stl_variable T
std::multiset<T> pset stl_variable
std::deque<T> pdequeue stl_variable
std::stack<T> pstack stl_variable
std::queue<T> pqueue stl_variable
std::priority_queue<T> ppqueue stl_variable
std::bitset<n>td> pbitset stl_variable
std::string pstring stl_variable
std::widestring pwstring stl_variable

 

@ 사용 예제

  • 예제 코드
#include 
#include 
#include 
#include 

using namespace std;

int main()
{
    string strSource;
    vector stNumList;
    map mapList;
    map::iterator itr;

    strSource = "SOURCE STRING";

    stNumList.push_back(1);
    stNumList.push_back(3);
    stNumList.push_back(4);

    mapList[2] = "Two";
    mapList[1] = "One";
    mapList[5] = "Five";
    mapList[10] = "Ten";
    mapList[7] = "Seven";

    cout << "Source string : " << strSource << endl;

    itr = mapList.find(7);
    if ( itr != mapList.end() ) {
        cout << "mapList(7) = " << itr->second << endl;
    }

    return 1;
}
  • gdb 실행 예제

# gdb test
(gdb) b 27
Breakpoint 1 at 0x8048cdf: file test.cpp, line 27.
(gdb) run

Breakpoint 1, main () at test.cpp:27
27 cout << "Source string : " << strSource << endl;

 

(gdb) pstring strSource
String = "SOURCE STRING"
String size/length = 13
String capacity = 13
String ref-count = 0

 

(gdb) pvector stNumList
elem[0]: $1 = 1
elem[1]: $2 = 3
elem[2]: $3 = 4
Vector size = 3
Vector capacity = 4
Element type = int *

 

(gdb) pmap mapList
Map type =
std::map<int,std::basic_string<char, std::char_traits<char>, std::allocator<char> >,std::less<int>,std::allocator<std::pair<const int, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >
Use pmap <variable_name> <left_element_type> <right_element_type> to see the elements in the map.
Map size = 5
(gdb) pmap mapList int string
elem[0].left: $4 = 1
elem[0].right: No symbol "string" in current context.
(gdb) pmap mapList int char*
elem[0].left: $5 = 1
elem[0].right: $6 = 0x83980c4 "One"
elem[1].left: $7 = 2
elem[1].right: $8 = 0x839808c "Two"
elem[2].left: $9 = 5
elem[2].right: $10 = 0x83980fc "Five"
elem[3].left: $11 = 7
elem[3].right: $12 = 0x839816c "Seven"
elem[4].left: $13 = 10
elem[4].right: $14 = 0x8398134 "Ten"
Map size = 5

 

  • 사용법 예제

(gdb) pvector
Prints std::vector<T> information.
Syntax: pvector <vector> <idx1> <idx2>
Note: idx, idx1 and idx2 must be in acceptable range [0..<vector>.size()-1].
Examples:
pvector v - Prints vector content, size, capacity and T typedef
pvector v 0 - Prints element[idx] from vector
pvector v 1 2 - Prints elements in range [idx1..idx2] from vector
(gdb) plist
Prints std::list<T> information.
Syntax: plist <list> <T> <idx>: Prints list size, if T defined all elements or just element at idx
Examples:
plist l - prints list size and definition
plist l int - prints all elements and list size
plist l int 2 - prints the third element in the list (if exists) and list size
(gdb) pmap
Prints std::map<TLeft and TRight> or std::multimap<TLeft and TRight> information. Works for std::multimap as well.
Syntax: pmap <map> <TtypeLeft> <TypeRight> <valLeft> <valRight>: Prints map size, if T defined all elements or just element(s) with val(s)
Examples:
pmap m - prints map size and definition
pmap m int int - prints all elements and map size
pmap m int int 20 - prints the element(s) with left-value = 20 (if any) and map size
pmap m int int 20 200 - prints the element(s) with left-value = 20 and right-value = 200 (if any) and map size
(gdb) pdeque
Prints std::dequeue<T> information.
Syntax: pdequeue <dequeue>: Prints dequeue size, if T defined all elements
Deque elements are listed "left to right" (left-most stands for front and right-most stands for back)
Example:
pdequeue d - prints all elements and size of d
(gdb) pstack
Prints std::stack<T> information.
Syntax: pstack <stack>: Prints all elements and size of the stack
Stack elements are listed "top to buttom" (top-most element is the first to come on pop)
Example:
pstack s - prints all elements and the size of s

 

@ map iterator 를 gdb 로 보기 위해 추가한 매크로(.gdbinit 파일에 추가)

#
# std:map iterator
#

define pmapitr
if $argc == 0
help pmapitr
else
set $itr = $arg0
set $node = $itr._M_node
if $argc == 1
printf "map iterator "
whatis $itr
printf "Use pmapitr <variable_name> <TtypeLeft> <TypeRight>.\n"
end
if $argc == 3
set $value = (void *)($node + 1)
printf "elem.left: "
p *($arg1*)$value
set $value = $value + sizeof($arg1)
printf "elem.right: "
p *($arg2*)$value
end
end
end

 

document pmapitr
Prints std::map iterator value
Syntax: pmapitr <map>::iterator <TtypeLeft> <TypeRight>
Examples:
pmap_itr m int int - print iterator's element
end

 

  • gdb 실행 예제

# gdb test
(gdb) b 30
Breakpoint 1 at 0x8048d3d: file test.cpp, line 30.
(gdb) run
Source string : SOURCE STRING

Breakpoint 1, main () at test.cpp:30
30 if ( itr != mapList.end() ) {

(gdb) p itr
$1 = {_M_node = 0x82ad140}
(gdb) pmapitr itr
map iterator type =
std::_Rb_tree_iterator<std::pair<const int, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >
Use pmapitr <variable_name> <TtypeLeft> <TypeRight>.

(gdb) pmapitr itr int char*
elem.left: $2 = 7
elem.right: $3 = 0x82ad16c "Seven"
(gdb)

 

 

@ 참고한 URL

http://www.yolinux.com/TUTORIALS/GDB-Commands.html#STLDEREF

AND

  • set ts
    : set tabstop 의 약자로 Tab의 크기를 설정 (ex) set ts=4

 

  • set autoindent
    : 바로 위 라인의 indent 를 인지하여 그것을 현재의 라인에도 적용한다.

 

  • set smarttab
    : autoindent 기능에 '{' 가 나올 경우 indent 를 한단계 더 낮추고 '}' 가 나올 경우 indent 를 한단계 더 높인다.

 

  • map 에 등록하고 사용하면 개발시 편한 기능
    • map <F1> K

: 선택된 단어를 이용하여 man 페이지 검색 결과를 보여준다

    • map <F2> :wq!<CR>

: 현재 작업 중인 소스코드를 저장하고 vi 에디터를 종료한다.

    • map <F3> [{v]}zf

: 소스 코드를 { } 기준으로 접는다

    • map <F4> zo

: 접힌 소스 코드를 원상태로 푼다

    • map <F5> gf

: include <> 또는 "" 에서 파일 부분을 선택하면 해당 파일을 열어 본다

    • map <F6> <C-O>

: gf 를 통해 이동한 페이지에서 원래의 페이지로 돌아간다.

    • map <f7> [i

: 함수의 프로토타입이나 변수의 선언 부분을 화면의 아래에 보여준다.

    • map <F8> gd

: 함수 내의 지역 변수의 선언문으로 이동

    • map <F9> ''

: 이동 이전의 위치로 돌아감

    • map <F10> :w!<CR>:make clean;make<CR>

: 현재 작업 파일을 저장하고 컴파일함

    • map <F11> :tabnext<CR>

: 다음 탭으로 이동

    • map <F12> :tabnew<CR>:e.<CR>

: 탭을 하나 생성한 후 생성된 탭에 파일 브라우징 창을 띄움

    • imap <F5> <C-N>

: 입력 모드시에 변수나 함수명을 자동으로 완성시켜주는 기능

 

  • syntax highlight 에서 색 변경
    • hi Comment ctermfg=DarkCyan

: putty 사용시 주석 부분이 잘 안 보이므로 주석 부분의 색을 조금 더 밝게 변경시킨다.

 

AND