또 한번의 삽질 추가.


임시 DB를 설치 한 이후 외부에서 접속을 진행 하였더니,

접속이 안되어서 확인.


처음에는 쉽게 port로 생각하여 Open 하였지만 연결 실패..


유저도 제대로 생각했다고 했지만 여기서 함정..

역시...난 멍청한 것인가...




1. Linux Port Open

vi /etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

-A RH-Firewall-1-OUTPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT


또는 아래와 같이 명령어 입력

[root@localhost sysconfig]# iptables -I INPUT 1 -p tcp --dport 3306 -j ACCEPT

[root@localhost sysconfig]# iptables -I OUTPUT 1 -p tcp --dport 3306 -j ACCEPT


하지만...failed...

>> ERROR 1130 오류 코드


ERROR 1130 (00000): Host 'x.x.x.x' is not allowed to connect to this MySQL server


2. User 생성 확인

확인을 했더니 IP가 제대로 입력이 안되었음...OTL...단순히 local host로만 생성을 한 것임...



아래와 같이 추가로 생성하여 해결



참조 : http://imdsoho.tistory.com/entry/mysql-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%B6%94%EA%B0%80-%EB%B0%8F-error-1130-%EC%B2%98%EB%A6%AC

반응형

OS 재기동이 필요한 시점에 문제가 발생할 소지가 있기 때문에

이럴 때를 대비해서 백업용 DB가 필요하다.


문서로 정리 하였지만, 

작성한 것을 복-붙 이다.




임시 MySQL DB 구축

작성일 : 2016.02.18

작성자 : Louis.Kim

mysql> select version();

+-------------+

| version()   |

+-------------+

| 3.23.58-log |

+-------------+

1 row in set (0.00 sec)

 

1. zip 파일을 임시 DB에 복사 및 압축해제

          

ex) tar -xvzf 파일명

 

2. 압축 해제한 mysql 서버 폴더에 install.sh 파일을 생성 및 아래내용 복사 (make 파일생성)

  

참고로 본 서버 참고하여 생성

useradd -M -s /sbin/nologin mysql

./configure \

--prefix=/usr/local/mysql \

--with-charset=euc_kr \

--without-innodb \

--with-unix-socket-path=/tmp/mysql.sock \

--without-comment \

--without-debug \

--with-mysqld-user=mysql \

--without-bench \

--without-docs \

--localstatedir=/usr/local/mysql/var  \

--sysconfdir=/etc \

--disable-shard \

--enable-assembler && make -j 6 && make install

 

echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf && ldconfig

cf) localstatedir 의 경우 기본적으로 설치되는 경로이기에, 경로가 변경된다면 해당 경로 수정

   혹여나 변경을 못했다면 my.cnf 에서 수정 가능


 

3. .bashsrc 수정

 

vi ~/.bashrc 한 후 아래 alias 추가

vi = '/usr/bin/vim'

. ~/.bashrc 또는 source ~/.bashrc 로 설정을 다시 로딩

 

4. .bash_profile 수정

 

/usr/local/mysql/bin path에 추가 (vi ~/.bash_profile)

PATH=$PATH:$HOME/bin:/usr/local/mysql/bin

 

-개인을 위해서 아래 추가

mysql_base=/usr/local/mysql/

mysql_home=$mysql_base/var/

. ~/.bash_profile 또는 source ~/.bash_profile 로 설정을 다시 로딩

 

5. install.sh 파일 실행

 

$root > sh install.sh

 

오류 발생 시 하단에 오류 발생 찾아서 확인

 

6. 설치가 완료 되면 my.cnf 생성

 

root$> vi /etc/my.cnf

[client]

#password       = your_password

port            = 3306

socket          = /tmp/mysql.sock

 

[mysqld]

port            = 3306

socket          = /tmp/mysql.sock

skip-locking

skip-innodb

 

set-variable    = key_buffer=512M

set-variable    = max_allowed_packet=16M

set-variable    = table_cache=512

set-variable    = sort_buffer=4M

set-variable    = record_buffer=2M

set-variable    = thread_cache=512

set-variable    = thread_concurrency=16

set-variable    = myisam_sort_buffer_size=64M

set-variable    = max_connections=300

set-variable    = max_heap_table_size = 2000M

set-variable    = tmp_table_size=1000M

set-variable    = max_tmp_tables=256

set-variable    = max_binlog_size =300M

set-variable    = long_query_time = 1

 

server-id       = 1

log-bin=/db_log/LOG

binlog-do-db=DARKEDEN

log-slow-queries= /db_log/slow-query.log

 

log=/backup/ALOG/mysql.log

 

[mysqldump]

quick

set-variable    = max_allowed_packet=16M

 

[mysql]

no-auto-rehash

 

[isamchk]

set-variable    = key_buffer=256M

set-variable    = sort_buffer=256M

set-variable    = read_buffer=2M

set-variable    = write_buffer=2M

 

[myisamchk]

set-variable    = key_buffer=256M

set-variable    = sort_buffer=256M

set-variable    = read_buffer=2M

set-variable    = write_buffer=2M

 

[mysqlhotcopy]

interactive-timeout

Port 는 기본 포트 3306

 

Log-bin log-slow-queries , log 등의 해당 Directory가 없을 경우 생성해 줘야 함.

 

[root@localhost /]# mkdir /db_log

[root@localhost /]# chown -R mysql:mysql /db_log

 

[root@localhost /]# mkdir -p /backup/ALOG

[root@localhost /]# chown -R mysql:mysql /backup

 

datadir 의 경우 해당 데이터가 쌓이는 장소이므로 없으면 default에 쌓이지만 변경이 원하고자 한다면 datadir 항목을 추가 (ef- datadir=/my_data1/datfile/ )

 

이 모든 항목들은 mysqld를 중지한 후 진행해야 함

 

 

 

7. Python 설치 (MySQL 에서 사용하기 위한 라이브러리 설치

   - README 보면서 진행)

 

  $ tar xfz MySQL-python-1.2.1.tar.gz

  $ cd MySQL-python-1.2.1

  $ chmod 700 setup.py   --권한이 없을 경우 권한 부여

  $ # edit site.cfg if necessary

  $ python setup.py build

  $ sudo python setup.py install # or su first

 

확인방법

  - Python 접속

  $phthon

  $ import MySQLdb  후 에러가 발생 안되면 완료

 

8. DB 설치

 

필히 설치할 필요 없으나, 아래 폴더에서 설치가 가능

$ cd /usr/local/bin

$ ./mysql_install_db

/usr/local/mysql/var 에 설치가 되었는지 확인이 가능

 

9. 해당 데이터 및 권한 가져오기

 

- 데이터는 일간 백업에서 가져오면 가능(FTP 서버 내 Daily_BK) -> 데이터

 - $ tar -cvzf mysql_back1.tgz /usr/local/mysql/var/mysql  -> 권한

   해당 압축 파일을 FTP서버로 전송 후 다시 임시 DB로 전송

 

10. 임시 DB에서 권한 및 데이터 복구

 

- 권한의 경우 기존 mysql 해 놓은곳에 덮어 쓸것 (기존은 백업)

- 일간 백업한 것은 DARKEDEN 에 생성 (권한 확인 / 소유자 확인)

- 각각의 폴더의 유저 소유 권한을 확인(/usr/local/mysql/var 의 경우 아래로 mysql으로 해야함)

 

11. MySQL open

 - $>safe_mysqld&  로 실행 후 $>ps -ef | grep mysql 확인


 



오류 발생 시

1. sh install.sh 를 돌렸는데 발생하는 오류

...

checking for atomic operations... no

checking for int8... no

checking "LinuxThreads"... "Not found"

configure: error: This is a linux system and Linuxthreads was not

found. On linux Linuxthreads should be used.  Please install Linuxthreads

(or a new glibc) and try again.  See the Installation chapter in the

Reference Manual for more information.

해결방법

mysql 설치중 아래와 같은 error 메세지 발생시에는 간단히 아래 방법대로 진행

 

checking "LinuxThreads"... "Not found"

configure: error: This is a linux system and Linuxthreads was not

found. On linux Linuxthreads should be used.  Please install Linuxthreads

(or a new glibc) and try again.  See the Installation chapter in the

Reference Manual for more information.

 

방법:

/usr/include/pthread.h 화일을 열어 맨위 부분쯤에 아래 내용을 추가 하고 저장

 

/* Linuxthreads */

 

mysql configure 과정에서 pthread.h 파일을 찾아 위 내용이 있는지 확인하는 것으로

glibc에서 없는 경우 에러 메세지가 발생


참고 : http://faq.hostway.co.kr/Linux_DB/1303

 

반응형

오랜만에 CentOS 를 설치 후 몇번의 네트워크 삽질 후 

Local host 에서 putty 로 접속을 마쳤다.


FTP도 필요해서 ftp 설치를 했더니 정리가 필요해서 아래와 같이 정리해 본다.


FTP 설치

yum -y install vsftp ftp




FTP 설정

vi /etc/vsftpd/vsftpd.conf


...
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=YES
...

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES


방화벽 허용(20, 21 포트 허용)

맨아래에 추가

...

-A INPUT -m state --state NEW -m udp -p udp --dport 20 -j ACCEPT

-A INPUT -m state --state NEW -m udp -p udp --dport 21 -j ACCEPT




FTP 를 항상 시작 하도록 설정

[root@localhost ~]# chkconfig --level 2345 vsftpd on


root 로 접속 하기 위해서 아래 파일들에서 root 삭제

[root@localhost ~]# ls /etc/vsftpd/

ftpusers                user_list               vsftpd.conf             vsftpd_conf_migrate.sh


아래 2개의 파일에서 vi로 열어 root 삭제


[root@localhost ~]# vi /etc/vsftpd/ftpusers

[root@localhost ~]# vi /etc/vsftpd/user_list


서비스 재시작

방화벽 설정 

[root@localhost ~]# vi /etc/sysconfig/iptables


ftp 재시작

[root@localhost ~]# service vsftpd restart





500 OOPS 대처 방안

>root 로 FTP 접속 시 아래와 같이 접속 오류가 발생


응답: 331 Please specify the password.

명령: PASS ******

응답: 500 OOPS: cannot change directory:/root

오류: Critical error: 서버에 연결하지 못함


위와 같이 뜨면 아래와 같이 확인 후 설정 변경

[root@localhost ~]# getsebool -a | grep ftp

allow_ftpd_anon_write --> off

allow_ftpd_full_access --> off

allow_ftpd_use_cifs --> off

allow_ftpd_use_nfs --> off

ftp_home_dir --> off

ftpd_connect_db --> off

ftpd_use_fusefs --> off

ftpd_use_passive_mode --> off

httpd_enable_ftp_server --> off

tftp_anon_write --> off

tftp_use_cifs --> off

tftp_use_nfs --> off


[root@localhost ~]# setsebool allow_ftpd_full_access on

[root@localhost ~]# service vsftpd restart



[참고]

http://matthew.kr/centos-%EC%9D%98-vsftpd-%EC%A0%91%EC%86%8D%EC%8B%9C-500-oops-cannot-change-directoryroot-%EC%97%90%EB%9F%AC/


반응형

'OS > LINUX' 카테고리의 다른 글

[펌]PuTTY 한글 깨짐 문제 해결하기  (1) 2016.02.23
mkfs 로 생성 시 오류  (0) 2015.10.15

MYSQL 을 linux 상에서 접속을 할줄 몰라 열심히 삽질 하다가 겨우 찾아냈다.


사실 말하면 그동안 동료가 알려줬지만 제대로 못 외워서 삽질한게 더 맞는 것 같다.

역시 삽질하면서 배워야지 자기 것이 되는게 맞는 말인듯....


일반적으로 mysql 접속은 아래와 같다.


/usr/local/mysql/bin/mysql -u user01 -p user_db


-u 뒤에는 유저명

-p 뒤에는 패스워드를 작성하면 된다.


하지만 나는 진행할려고 할때마다 아래와 같은 에러가 발생했다.


[root@devDB ~]# mysql -h localhost -u root -p

Enter password:

ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)


왜이리 접속이 안되서 열심히 찾아보이 socket 을 이용해서 접속하는 것이기에,

해당 socket파일에 명시가 되어 있지 않다고 되어 있다.


Oracle 과 비교하면 리스너와 같은것으로 보면 될까?? 리스너 포트가 변경되었을 때

리스너 포트를 명시하는 경우다.


아래와 같이 진행하면 된다.

해당 개발DB의 경우 cnf 파일에 명시되어 있는데 cnf 파일을 보면 아래와 같다


...

[mysqld7100]

socket          = /tmp/mysql_1100.sock

port            = 7100

pid-file        = /home/DATABASE/DBPart/mysql_1100.pid

datadir         = /home/DATABASE/DBPart/

server-id       = 1100

...


그래서 아래와 같이 시도를 하면 접속이 된다.


mysql -u root -p -S /tmp/mysql_1100.sock


참고로 -p 뒤에 비밀번호를 붙이지 않으면 비밀번호를 묻게 된다.



mysql -u user01 -p user_pw

mysql : MYSQL 데이터베이스 클라이언트 프로그램

-u : MYSQL 사용자명을 지정하기 위한 옵션

-p : 지정한 사용자의 MYSQL 패스워드를 입력하기 위한 옵션

user_db : 지정한 사용자가 사용할 MYSQL 데이터베이스명


Oracle 하다가 Mysql 를 하려고 하니 참 낯설다-ㅋㅋㅋ


반응형

어떤 DBMS이든지 마찬가지겠지만, DBMS를 효율적으로 적은 리소스로 가장 좋은 성능을 내게끔 사용하기 위해서 가장 먼저 해야 하는 일은 어떠한 구조로 만들어 졌는지 확인하는 것이다. DBMS의 특성을 확인하여, 그 DBMS의 장점과 단점을 파악하고, 내가 원하는 서비스의 성격에 맞게 DBMS를 선택하여 사용하면, 훨씬 더 효율적으로 데이터를 관리 할 수 있다. 

MySQL도 DBMS로서 다른 DBMS와 비교되는 구조와 특성을 가지고 있다. 이러한 특성을 미리 나열하기 전에 MySQL의 내부 구조에 대해 먼저 알아보자. 

 

[그림 1-1]

[그림 1-1]은 MySQL Conference에서 MySQL 내부 구조 설명시 MySQLAB에서 사용했던 그림이다. 여기에서 알수 있는 것은 MySQL Server의 내부의 모듈들은 컴포넌트 형태로 되어있어서 여러 기능들이 퍼즐 형식으로 엮여져 있다는 것이다. 

퍼즐 형태로 만들어진 내부 모듈들로 인해 내부적으로 다른 스토리지 엔진을 추가하거나, 기능을 추가할때, 다른 모듈에 크게 영향을 주거나 하는 일이 적은 것을 확인할 수 있다. 

맨 위의 오른쪽에 표시된 SQL Control interface는 MySQL Client와 MySQL Server 사이에 존재하는 Interface로서 백업을 진행할 때나, 상태 정보를 보고 싶을때와 같은 경우에 컨트롤 하는 문장들을 의미한다. 

사용자 삽입 이미지

 

[그림 1-2]
[그림 1-2] 도 MySQLAB에서 MySQL Server와 Application과의 관계및 여러 Tool들을 설명하기 위해 사용하는 그림 중의 하나이다. 

크게 MySQL은 세 단계로 나누어 생각할 수 있다. 첫번째는 위의 그림에서 Connector로서 표현한 Client 부분, 두번째는 MySQL Server의 머리부분에 해당하는 부분으로 SQL을 분석하여 실행계획을 만드는 부분, 세번째는 데이터를 저장하고 추출하는 Storage Engine 부분이다. 

맨 위의 Connector는 MySQL Server에 접근하기 위해 Application에서 설치하여 사용할 수 있는 모듈들을 나타낸다. C API, JDBC등 언어에 따라 여러가지 Connector들을 사용할 수 있고, 이 Connector들을 사용하여 MySQL Server와 통신할 수 있다. 

두번째 부분는 MySQL의 인스턴스 부분으로 Client로 부터 들어온 쿼리를 분석하고 최적화 하여 실행계획을 만들고, 필요할 경우 메모리에 cache하는 기능을 담당하는 부분이다. 

세번째 부분은 Storage Engine 영역으로 데이터를 저장하고, 추출하는 부분을 담당하는 부분으로 나눌 수 있다. 위의 그림에서 보는 것과 같이 스토리지 엔진의 종류는 다양하다. MySQLAB에서 만든 스토리지 엔진도 있고, 다른 서드파티에서 만든 스토리지 엔진도 있다. 화면에 보이는 스토리지 엔진은 대부분 MySQLAB에서 만든 것들이다. 

각각의 스토리지 엔진은 그 데이터 저장방법 및 추출 방법에 장점과 단점을 가지고 있다. 그렇기 때문에 실제 서비스에 사용할 때에는 스토리지 엔진 특성에 맞게 취사 선택을 잘 해야 한다. 

실제 한국에서 웹 서비스에 많이 사용하는 스토리지 엔진은 MyISAM과 InnoDB이다. 그러므로 추후에 강좌에서는 MyISAM과 InnoDB에 대해 자세히 다루도록 할 예정이다. 

[그림 1-2]의 MySQL Server 부분에 표현된 SQL 분석 부분에 관련된 부분을 자세히 살펴보도록 하자. 

먼저 Connection Pool은 MySQL 내부에서 관리하는 Connection Pool을 말하는 것으로 새로운 유저의 커넥션 쓰레드를 DB에 할당하여 저장하는 부분을 말한다. Connection을 생성하게 되면 자동적으로 그 Connection에서 실행할 SQL 작업을 위한 메모리가 자동적으로 할당된다. 

SQL Interface는 DML, DDL, Stored Procedure, View, Cursor, Trigger등의 지원을 위한 Interface부분을 말하고, 모든 SQL 함수에 대한 지원을 제공하는 모듈을 말한다. 

Parser/Optimizer는 SQL의 권한을 확인하고, SQL문을 데이터베이스 내부 언어로 변환하고, 수행 경로를 분석하는 등 SQL문을 실행을 위한 준비 작업을 하는 부분을 말한다. 이 부분은 모든 스토리지 엔진에 동일하게 적용되기 때문에 스토리지 별로 별도의 코딩이 필요없다. 

메모리 캐쉬 부분은 빈번하게 사용되는 인덱스나 데이터를 빠르게 접근하게 하기 위해 메모리에 저장하는 영역을 말하며, 스토리지 엔진에 따라 그 기능은 조금씩 차이가 난다. 


반응형

'MySQL' 카테고리의 다른 글

[펌] [MySQL] 5.1의 InnoDB에서 MySQL 테이블 최적화하기  (0) 2016.03.03
[MySQL] DUMP (mysqldump) export  (1) 2016.02.25
[MySQL] error 1130  (0) 2016.02.19
[MySQL] 임시 DB 설치 3.23.58 (3.*) / python  (0) 2016.02.19
[MYSQL] Socket 접속  (0) 2016.02.11

[출처]

http://hajadc.tistory.com/65


PUTTY는 원격으로 리눅스 쉘을 이용하는 ssh를 이용하는데 있어 가장 흔히 이용되는 프로그램이다. 강력한 성능에 실행파일 하나로 설치 안해도 되는 포터블 버전도 제공하기 때문에 정말 자주, 많이 이용되는 프로그램이다. 하지만 기본 설정대로 이용시에 약간의 불편함이 있어 그를 해결하기 위해 내가 사용하는 설정을 공개한다.

1. 버퍼크기.
라인 버퍼는 커맨드를 실행했을 때 화면상에 보여지는 줄의 수를 말한다. 만약 라인 버퍼가 작다면, 여러줄 출력되는 명령어 실행시에 화면을 스크롤해서 보면 일정 부분이 짤려 보이게 된다.  기본 설정에서는 200줄로 한정돼 있으므로 200줄 이상 화면에 출력된다면, 실행 도중에 프린트 되는 내용의 일부가 짤리고 최종 200줄만 볼 수 있는 것이다.  그래서 나는 1만줄 정도로 쓰고 있다.

PUTTY 설정 화면에서 Window를 선택하면 오른편에 lines of scrollback 항목이 있다. 거기에 200을 바꿔주면 된다.



2. 폰트 설정.
쉘을 쓰다보면 쉽게 혼동되는 글자들이 있다. 예를 들어, 소문자 엘, 대문자 아이, 숫자 일 같은 것이나, 숫자 영, 대문자 오 같은 것이 있다. 이런 부분을 해결하기 위해서 프로그래머를 위한 폰트에 대한 많은 문서들이 인터넷에 있다.

PUTTY 설정 화면에서 Window > Appearance로 들어가면 폰트 설정하는 화면이 있다.


여기서 Change를 클릭해서 새로 열리는 창에서 폰트를 원하는 대로 바꿔주면 된다.  그리고, ClearType을 체크해주면 보다 선명한 폰트를 볼 수 있고, Gap between text and window edge를 3으로 주게 되면, PUTTY 창 프레임에 바로 붙어 보이던 글자들이 약간의 간격을 주게 되어 보다 읽기 쉽게 된다.

3. 문자 인코딩.
영어만 이용하는 경우에는 문제가 없으나 간혹 한글 같은 다른 문자를 이용하게 되면 문자가 깨지는 경우가 발생한다. 그런 경우를 막기 위해서는 인코딩을 바꿔줘야 한다.

Window > Translation으로 들어가면 오른편에 Character set translation 부분에서 인코딩을 UTF-8으로 바꿔주면 된다.


4. 화면 복사와 붙이기 방식.
PUTTY에서 출력되는 부분을 마우스를 이용해 복사하거나 붙여넣는 방식을 바꿔준다.  윈도우가 편한 사용자는 윈도우 스타일대로 드래그와 오른쪽 버튼으로 설정 메뉴를 불러올 수도 있고, 리눅스가 편한 사용자는 리눅스 터미널처럼 드래그하면 복사가 되고 가운데 버튼이 붙여넣기가 된다.

Window > Selection에서 Action of mouse use에서 윈도우나 xterm 등으로 설정 가능하다.


5. 색깔 설정.
가장 중요한 것이다. 내가 설정을 바꾸는 가장 큰 이유 중에 하나다. 파란색이 너무 어두워서 검은 배경화면과 잘 구별이 되지 않아 눈이 많이 피로해진다. 그래서 파란색을 조금 밝게 바꿔준다. 여기서 선택하는 색은 마음대로 바꿔도 무관하다.

Window > Colours에서 Select a colour to adjust 부분에서 ANSI blue와 ANSI blue bold 색을 바꿔준다.


6. 설정 저장.
이 모든 설정을 저장해야 나중에도 사용 가능하다.

Session에서 오른쪽에 Default Settings에 저장을 해주면 된다.


반응형

지난 목요일에 아래와 같은 메시지가 뜨면서 접속이 되지 않았다.


[지난 포워딩 미리 확인]

ORA-12516: TNS:listener could not find available handler with matching protocol stack

http://hyunki1019.tistory.com/39


하지만 초당 몇 십MB ~ 몇 백MB 까지 끝임없이 리스너 로그에 14-JAN-2016 13:45:03 * nsevwait_error * 0와 같은 로그가 생기는 것에 대해서 확인이 되지 않아 결국 SR 를 오픈 하였다.


SR에서는 또 똑같은 답변만 왔다...


Process 를 증가 시키라는 내용...

Intermittent TNS-12516 or TNS-12519 or TNS-12520 errors when connecting via Oracle Net (Listener) ( Doc ID 240710.1 ) 

--------------------------------------------------------------------------------------------------------------------------------------------------- 

CAUSE 


By way of instance registration, PMON is responsible for updating the listener 

with information about a particular instance such as load and dispatcher 

information. Maximum load for dedicated connections is determined by the 

PROCESSES parameter. The frequency at which PMON provides SERVICE_UPDATE 

information varies according to the workload of the instance. The maximum 

interval between these service updates is 10 minutes. 


The listener counts the number of connections it has established to the instance 

but does not immediately get information about connections that have terminated. 

Only when PMON updates the listener via SERVICE_UPDATE is the listener 

informed of current load. Since this can take as long as 10 minutes, there can be 

a difference between the current instance load according to the listener 

and the actual instance load. 


When the listener believes the current number of connections has reached maximum 

load, it may set the state of the service handler for an instance to "blocked" 

and begin refusing incoming client connections with either of the following 

errors: 


TNS-12516 TNS:listener could not find instance with matching protocol stack 

TNS-12519 TNS:no appropriate service handler found 


Additionally, an ORA-12520 error may appear in the listener log. 


The output of the LSNRCTL services command will likely show that the service handler is "blocked". 


e.g. '"DEDICATED" established:1 refused:0 state:blocked' 


SOLUTION 


Increase the pfile or spfile setting for PROCESSES. 


그래서 다시 확인을 resource_limit 에는 process 수가 limit 까지 차지 않았다고 확인을 줬다..




SR의 마지막 답변이다.

일반적으로 PROCESSES 설정에 하나의 User Process 에서 파생되는 Parallel 작업이나, 

Recursive SQL을 수행하기 위한 session fork 는 감안되어 있지 않습니다. 


따라서, 숫자상으로 정확히 맞아 떨어 지지는 않습니다. 



http://docs.oracle.com/cd/B19306_01/server.102/b14237/initparams169.htm#REFRN10175 

PROCESSES 


http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_2050.htm#REFRN30206 

V$RESOURCE_LIMIT 


관련 문서 및 노트를 확인해 보았을때, 현재로써는 PROCESSES를 증가를 검토 하여 주시기 바랍니다. 


흠...이대로 종결을 낼 수 밖에 없을 듯 보인다.


일단 내가 조치할 수 있는 방도는 job 에서도 Local DB를 바라보는 Link 들이 있는데 이 것들을 수정 하라고 권고 하는 것 뿐이다.

또한 확인해야 할 사항은 이렇게 Link 를 이용하게 되면 process 수가 증가 여부가 궁금하다.


어떻게 하면 확인이 가능할 지 테스트도 찾아봐야 겠다.


[종결]

반응형

쿼리를 조회하다 보면

자주 사용하는 테이블 및 컬럼이 있다.

이 부분은 자주 사용하다 보니 자연스럽게 해당 컬럼들이 어떠한 값을 가지는지 확인이 가능하다


하지만 그 외의 컬럼에 대해서는 잘 알지 못하는 경우가 있다.


아래는 그루비에서 퍼온 참고할만한 내용이다.


V$SESSION

  • 세션에 대한 전반적인 내용을 보여줌
    ColumnValueDescription
    SADDR070000050F9798E0오라클 메모리의 세션 주소
    SID9542세션 식별자 ( 세션 관련 뷰는 SID컬럼과 조인이 가능 )
    SERIAL#5865세션 시리얼 번호
    AUDSID86855884감사 세션 아이디( AUD$의 SESSIONID 컬럼과 조인 가능)
    PADDR07000004FD0771A8이 세션을 소유한 프로세스의 메모리 주소( V$PROCESS의 ADDR 컬럼과 조인 가능)
    USER#361오라클 사용자 식별자( DBA_USERS의 USER_ID 컬럼과 조인 가능)
    USERNAMERAXSOFT오라클 사용자 이름
    COMMAND3현재 수행되고 있는 명령문의 타입이 기록된다( AUDIT_ACTIONS의 ACTION 컬럼과 조인 가능)
    OWNERID2147483644Migratable session을 소유한 사용자의 식별자를 포함. 병렬 실행의 경우, 상위 2바이트는 Query Coordinator의 인스턴스의 ID, 하위 2바이트는 세션 번호를 포함. 그러나, 이 값이 2147483644의 값을 가진다면 의미 없다.
    TADDR07000004B519BE58트랜잭션 상태 객체의 주소( V$TRANSACTION의 ADDR컬럼과 조인 가능)
    LOCKWAIT Lock의 주소( V$LOCK의 ADDR컬럼과 조인 가능)
    STATUSACTIVE세션의 상태
    SERVERDEDICATED서버의 타입
    SCHEMA#361스키마 사용자 아이디
    SCHEMANAMERAXSOFT스키마 사용자 이름
    OSUSERhopefullyOS 클라이언트 사용자 이름
    PROCESS1436:648OS 클라이언트 프로세스 ID
    MACHINEHQ10-NE2256OS Machine 이름
    TERMINALHQ10-NE2256OS 터미널 이름
    PROGRAMSQL*PLUSOS 프로그램 이름
    TYPEUSER세션 타입
    SQL_ADDRESS0700000502F77800현재 수행되고 있는 SQL문의 구별을 위한 주소 ( V$SQLAREA의 ADDRESS컬럼과 조인 가능)
    SQL_HASH_VALUE156003993현재 수행되고 있는 SQL문 구별을 위한 Hash 값( V$SQLAREA의 HASH_VALUE컬럼과 조인 가능)
    SQL_IDgdwxvqw4nsvnt 
    SQL_CHILD_NUMBER0 
    PREV_SQL_ADDR070000043907DF38가장 최근에 수행되었던 SQL문의 구별을 위한 주소( V$SQLAREA의 ADDRESS컬럼과 조인 가능)
    PREV_HASH_VALUE3851972948가장 최근에 수행되었던 SQL문 구별을 위한 Hash 값( V$SQLAREA의 HASH_VALUE컬럼과 조인 가능)
    PREV_SQL_IDcg9wzx3kthwan 
    PREV_CHILD_NUMBER0 
    PLSQL_ENTRY_OBJECT_ID  
    PLSQL_ENTRY_SUBPROGRAM_ID  
    PLSQL_OBJECT_ID  
    PLSQL_SUBPROGRAM_ID  
    MODULESQL*PLUS현재 실행되고 있는 모듈의 이름
    MODULE_HASH2468076772모듈의 Hash 값
    ACTION3.1.5 (Build:5)현재 실행되고 있는 Action의 이름
    ACTION_HASH775161987Action의 Hash 값
    CLIENT_INFO 클라이언트의 정보 값
    FIXED_TABLE_SEQUENCE429762060데이터베이스에 콜을 하고, 다이나믹 퍼포먼스 테이블(Dynamic Perfomance Table)을 조회할 때마다 값이 증가된다.
    ROW_WAIT_OBJ#341579락으로 인해 기다리고 있는 로우가 속한 오브젝트 번호를 보여준다.( DBA_OBJECTS뷰의 OBJECT_ID 컬럼과 조인 가능)
    ROW_WAIT_FILE#329락으로 인해 기다리고 있는 로우가 속한 파일의 번호를 보여준다.( DBA_DATA_FILES의 FILE_ID, V$DATAFILE의 FILE# 컬럼들과 조인 가능)
    ROW_WAIT_BLOCK#335700락으로 인해 기다리고 있는 로우가 속한 블락 번호를 보여준다.
    ROW_WAIT_ROW#0락으로 인해 기다리고 있는 블락내의 로우 번호를 보여준다.
    LOGON_TIME2008-03-06 오후 2:39:34세션이 로그온한 시간을 나타낸다.
    LAST_CALL_ET409세션의 가장 최근의 DB Call이후 지난 시간을 보여준다.
    PDML_ENABLEDNO이 컬럼은 PDML_STATUS로 바뀌었음.
    FAILOVER_TYPENONE 
    FAILOVER_METHODNONE 
    FAILED_OVERNO 
    RESOURCE_CONSUMER_GROUP 세션의 현재 Resource Consumer Group을 보여준다.( DBA_RSRC_CONSUMER_GROUPS뷰의 CONSUMER_GROUP컬럼과 조인 가능 )
    PDML_STATUSDISABLED세션의 현재 Parallel DML의 상태를 보여준다.
    PDDL_STATUSENABLED세션의 현재 Parallel DDL의 상태를 보여준다.
    PQ_STATUSENABLED세션의 현재 Parallel Query의 상태를 보여준다.
    CURRENT_QUEUE_DURATION0 
    CLIENT_IDENTIFIER Global Application Context에서 이용한다.
    BLOCKING_SESSION_STATUSUNKNOWN 
    BLOCKING_INSTANCE  
    BLOCKING_SESSION  
    SEQ#19373 
    EVENT#116 
    EVENTdb file sequential read 
    P1TEXTfile# 
    P1329 
    P1RAW149 
    P2TEXTblock# 
    P2335700 
    P2RAW0000000000051F54 
    P3TEXTblocks 
    P31 
    P3RAW1 
    WAIT_CLASS_ID1740759767 
    WAIT_CLASS#8 
    WAIT_CLASSUser I/O 
    WAIT_TIME0 
    SECONDS_IN_WAIT0 
    STATEWAITING 
    SERVICE_NAMESYS$USERS 
    SQL_TRACEDISABLED 
    SQL_TRACE_WAITSFALSE 
    SQL_TRACE_BINDSFALSE 

V$PROCESS

  • 기술 예정
    ColumnValueDescription
    ADDR07000001D6C79EB8프로세스의 메모리 주소
    PID2프로세스 ID
    SPID3064180OS 프로세스 ID
    USERNAMERAXSOFTOS 유저 이름
    SERIAL#1세션 시리얼 번호
    TERMINALUNKNOWNOS 터미널 이름
    PROGRAMoracle@ (PMON)OS 프로그램 이름
    TRACEID Trace ID
    BACKGROUND1Background일 때 1
    LATCHWAIT Latch Wait 일때 메모리 주소
    LATCHSPIN Latch Spinning 일때 메모리 주소
    PGA_USED_MEM329394 
    PGA_ALLOC_MEM580290 
    PGA_FREEABLE_MEM0 
    PGA_MAX_MEM580290 

V$SQL 11g

  • V$SQL에 대해 10g와 11g 비교함
CNT10g V$SQL11g V$SQLDATA TYPEDESCRIPTION
1SQL_TEXTSQL_TEXTVARCHAR2(1000)First thousand characters of the SQL text for the current cursor
2SQL_FULLTEXTSQL_FULLTEXTCLOBFull text for the SQL statement exposed as a?CLOB?column. The full text of a SQL statement can be retrieved using this column instead of joining with the?V$SQL_TEXT?dynamic performance view.
3SQL_IDSQL_IDVARCHAR2(13)SQL identifier of the parent cursor in the library cache
4SHARABLE_MEMSHARABLE_MEMNUMBERAmount of shared memory used by the child cursor (in bytes)
5PERSISTENT_MEMPERSISTENT_MEMNUMBERFixed amount of memory used for the lifetime of the child cursor (in bytes)
6RUNTIME_MEMRUNTIME_MEMNUMBERFixed amount of memory required during the execution of the child cursor
7SORTSSORTSNUMBERNumber of sorts that were done for the child cursor
8LOADED_VERSIONSLOADED_VERSIONSNUMBERIndicates whether the context heap is loaded (1) or not (0)
9OPEN_VERSIONSOPEN_VERSIONSNUMBERIndicates whether the child cursor is locked (1) or not (0)
10USERS_OPENINGUSERS_OPENINGNUMBERNumber of users executing the statement
11FETCHESFETCHESNUMBERNumber of fetches associated with the SQL statement
12EXECUTIONSEXECUTIONSNUMBERNumber of executions that took place on this object since it was brought into the library cache
13PX_SERVERS_EXECUTIONSPX_SERVERS_EXECUTIONSNUMBERTotal number of executions performed by Parallel eXecution Servers. The value is 0 when the statement has never been executed in parallel.
14END_OF_FETCH_COUNTEND_OF_FETCH_COUNTNUMBERNumber of times this cursor was fully executed since the cursor was brought into the library cache. The value of this statistic is not incremented when the cursor is partially executed, either because it failed during the execution or because only the first few rows produced by this cursor are fetched before the cursor is closed or re-executed. By definition, the value of the?END_OF_FETCH_COUNT?column should be less or equal to the value of the?EXECUTIONS?column.
15USERS_EXECUTINGUSERS_EXECUTINGNUMBERNumber of users executing the statement
16LOADSLOADSNUMBERNumber of times the object was either loaded or reloaded
17FIRST_LOAD_TIMEFIRST_LOAD_TIMEVARCHAR2(76)Timestamp of the parent creation time
18INVALIDATIONSINVALIDATIONSNUMBERNumber of times this child cursor has been invalidated
19PARSE_CALLSPARSE_CALLSNUMBERNumber of parse calls for this child cursor
20DISK_READSDISK_READSNUMBERNumber of disk reads for this child cursor
21DIRECT_WRITESDIRECT_WRITESNUMBERNumber of direct writes for this child cursor
22BUFFER_GETSBUFFER_GETSNUMBERNumber of buffer gets for this child cursor
23APPLICATION_WAIT_TIMEAPPLICATION_WAIT_TIMENUMBERApplication wait time (in microseconds)
24CONCURRENCY_WAIT_TIMECONCURRENCY_WAIT_TIMENUMBERConcurrency wait time (in microseconds)
25CLUSTER_WAIT_TIMECLUSTER_WAIT_TIMENUMBERCluster wait time (in microseconds)
26USER_IO_WAIT_TIMEUSER_IO_WAIT_TIMENUMBERUser I/O Wait Time (in microseconds)
27PLSQL_EXEC_TIMEPLSQL_EXEC_TIMENUMBERPL/SQL execution time (in microseconds)
28JAVA_EXEC_TIMEJAVA_EXEC_TIMENUMBERJava execution time (in microseconds)
29ROWS_PROCESSEDROWS_PROCESSEDNUMBERTotal number of rows the parsed SQL statement returns
30COMMAND_TYPECOMMAND_TYPENUMBEROracle command type definition
31OPTIMIZER_MODEOPTIMIZER_MODEVARCHAR2(10)Mode under which the SQL statement is executed
32OPTIMIZER_COSTOPTIMIZER_COSTNUMBERCost of this query given by the optimizer
33OPTIMIZER_ENVOPTIMIZER_ENVRAW(2000)Optimizer environment
34OPTIMIZER_ENV_HASH_VALUEOPTIMIZER_ENV_HASH_VALUENUMBERHash value for the optimizer environment
35PARSING_USER_IDPARSING_USER_IDNUMBERUser ID of the user who originally built this child cursor
36PARSING_SCHEMA_IDPARSING_SCHEMA_IDNUMBERSchema ID that was used to originally build this child cursor
37PARSING_SCHEMA_NAMEPARSING_SCHEMA_NAMEVARCHAR2(30)Schema name that was used to originally build this child cursor
38KEPT_VERSIONSKEPT_VERSIONSNUMBERIndicates whether this child cursor has been marked to be kept pinned in the cache using the?DBMS_SHARED_POOL?package
39ADDRESSADDRESSRAW(8)Address of the handle to the parent for this cursor
40TYPE_CHK_HEAPTYPE_CHK_HEAPRAW(8)Descriptor of the type check heap for this child cursor
41HASH_VALUEHASH_VALUENUMBERHash value of the parent statement in the library cache
42OLD_HASH_VALUEOLD_HASH_VALUENUMBEROld SQL hash value
43PLAN_HASH_VALUEPLAN_HASH_VALUENUMBERNumerical representation of the SQL plan for this cursor. Comparing one?PLAN_HASH_VALUE?to another easily identifies whether or not two plans are the same (rather than comparing the two plans line by line).
44CHILD_NUMBERCHILD_NUMBERNUMBERNumber of this child cursor
45SERVICESERVICEVARCHAR2(64)Service name
46SERVICE_HASHSERVICE_HASHNUMBERHash value for the name listed in?SERVICE
47MODULEMODULEVARCHAR2(64)Contains the name of the module that was executing at the time that the SQL statement was first parsed, which is set by calling?DBMS_APPLICATION_INFO.SET_MODULE
48MODULE_HASHMODULE_HASHNUMBERHash value of the module listed in the?MODULE?column
49ACTIONACTIONVARCHAR2(64)Contains the name of the action that was executing at the time that the SQL statement was first parsed, which is set by calling?DBMS_APPLICATION_INFO.SET_ACTION
50ACTION_HASHACTION_HASHNUMBERHash value of the action listed in the?ACTION?column
51SERIALIZABLE_ABORTSSERIALIZABLE_ABORTSNUMBERNumber of times the transaction fails to serialize, producing?ORA-08177?errors, per cursor
52OUTLINE_CATEGORYOUTLINE_CATEGORYVARCHAR2(64)If an outline was applied during construction of the cursor, then this column displays the category of that outline. Otherwise the column is left blank.
53CPU_TIMECPU_TIMENUMBERCPU time (in microseconds) used by this cursor for parsing, executing, and fetching
54ELAPSED_TIMEELAPSED_TIMENUMBERElapsed time (in microseconds) used by this cursor for parsing, executing, and fetching
55OUTLINE_SIDOUTLINE_SIDNUMBEROutline session identifier
56CHILD_ADDRESSCHILD_ADDRESSRAW(8)Address of the child cursor
57SQLTYPESQLTYPENUMBERDenotes the version of the SQL language used for this statement
58REMOTEREMOTEVARCHAR2(1)Indicates whether the cursor is remote mapped (Y) or not (N)
59OBJECT_STATUSOBJECT_STATUSVARCHAR2(19)Status of the cursor: 
VALID - Valid, authorized without errors
VALID_AUTH_ERROR - Valid, authorized with authorization errors
VALID_COMPILE_ERROR - Valid, authorized with compilation errors
VALID_UNAUTH - Valid, unauthorized
INVALID_UNAUTH - Invalid, unauthorized
INVALID - Invalid, unauthorized but keep the timestamp
60LITERAL_HASH_VALUELITERAL_HASH_VALUENUMBERHash value of the literals which are replaced with system-generated bind variables and are to be matched, whenCURSOR_SHARING?is used. This is not the hash value for the SQL statement. If?CURSOR_SHARING?is not used, then the value is 0.
61LAST_LOAD_TIMELAST_LOAD_TIMEVARCHAR2(76)Time at which the query plan (heap 6) was loaded into the library cache
62IS_OBSOLETEIS_OBSOLETEVARCHAR2(1)Indicates whether the cursor has become obsolete (Y) or not (N). This can happen if the number of child cursors is too large.
63 IS_BIND_SENSITIVEVARCHAR2(1)  
64 IS_BIND_AWAREVARCHAR2(1)  
65 IS_SHAREABLEVARCHAR2(1)  
66CHILD_LATCHCHILD_LATCHNUMBERChild latch number that is protecting the cursor
67SQL_PROFILESQL_PROFILEVARCHAR2(64)SQL profile
68 SQL_PATCHVARCHAR2(30)  
69 SQL_PLAN_BASELINEVARCHAR2(30)  
70PROGRAM_IDPROGRAM_IDNUMBERProgram identifier
71PROGRAM_LINE#PROGRAM_LINE#NUMBERProgram line number
72EXACT_MATCHING_SIGNATUREEXACT_MATCHING_SIGNATURENUMBERSignature calculated on the normalized SQL text. The normalization includes the removal of white space and the uppercasing of all non-literal strings.
73FORCE_MATCHING_SIGNATUREFORCE_MATCHING_SIGNATURENUMBERThe signature used when the?CURSOR_SHARING?parameter is set to?FORCE
74LAST_ACTIVE_TIMELAST_ACTIVE_TIMEDATETIme at which the query plan was last active
75BIND_DATABIND_DATARAW(2000)Bind data
76 TYPECHECK_MEMNUMBER  
77 IO_CELL_OFFLOAD_ELIGIBLE_BYTESNUMBER  
78 IO_INTERCONNECT_BYTESNUMBER  
79 PHYSICAL_READ_REQUESTSNUMBER  
80 PHYSICAL_READ_BYTESNUMBER  
81 PHYSICAL_WRITE_REQUESTSNUMBER  
82 PHYSICAL_WRITE_BYTESNUMBER  
83 OPTIMIZED_PHY_READ_REQUESTSNUMBER  
84 LOCKED_TOTALNUMBER  
85 PINNED_TOTALNUMBER  
86 IO_CELL_UNCOMPRESSED_BYTESNUMBER  
87 IO_CELL_OFFLOAD_RETURNED_BYTESNUMBER 

[출처]

http://wiki.gurubee.net/display/CORE/Dynamic+View?


추가로 유휴 상태인 세션 확인 쿼리다.


유휴 상태 세션 찾기


select sid, serial#, username, trumc(last_call_et/3600,2)||'hr'last_call_et

from v$session

where last_call_et>7200 and username is not null


- last_call_et 는 "초" 단위이므로 7200 이면 2시간이된다.



유휴 상태 세션 죽이기


alter system kill '<sid>,<seril#>'


[출처]

http://oraclezombie.tistory.com/entry/%EC%9C%A0%ED%9C%B4idle-%EC%83%81%ED%83%9C%EC%9D%B8-%EC%84%B8%EC%85%98-%EB%B3%B4%EA%B8%B0

반응형

몇일 전 프로세스 이슈인 줄 알고 찾아보면서,

하루에 한번씩 프로세스 현황을 각 DB 마다 수집 하여 

통계가 필요할 것 같아 스크립트를 작성해 보았다.


대충은 아니지만 후다닥 만든 부분 이라 앞으로 테스트로 수집하면서

필요하거나 부족한 부분을 보충하면서 완성해야 될 것 같다.


대략 흐름은 아래와 같다.


1. 모니터링을 관장할 DB에서 각 수집을 해야할 DB들의 Link를 생성

2. DB Link를 통해 매일 오전 7시에 각 DB 의 session과 Process 를 수집

  (Scheduler 를 이용)

3. 수집 대상은 session / process / instance / host 등이 된다.

  (RAC 장비들이 다수이기 때문에 gv$를 이용하여 진행)


스크립트는 아래와 같다


--DB Link생성

CREATE PUBLIC DATABASE LINK DBA_LINK

CONNECT TO SYSTEM

IDENTIFIED BY 비밀번호

USING '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = DBIP)(PORT = 포트)))(CONNECT_DATA = (SERVICE_NAME = DB서비스명)))';


--정보를 저장할 Table 생성  

create table chk_session

(

l_date date default sysdate not null,

l_instance nvarchar2(20),

l_hostname nvarchar2(20),

ss_max number default 0,

ss_current number default 0,

ss_limit number default 0,

ss_active number default 0,

ss_inactive number default 0,

ps_max number default 0,

ps_current number default 0,

ps_limit number default 0

);


--procedure 생성

create or replace procedure SYS.proc_chk_session

is

begin

  insert into chk_session

 select 

    sysdate as rs_date,

    b.instance_name AS RS_INSTANCE,

    b.host_name AS RS_HOSTNAME,

    MAX(case when  resource_name='sessions' then MAX_UTILIZATION end) as SESSION_MAX,

    MAX(case when  resource_name='sessions' then CURRENT_UTILIZATION end) as SESSION_CURRENT,

    MAX(case when  resource_name='sessions' then LIMIT_VALUE end) as SESSION_LIMIT,

    MAX((SELECT  COUNT(*) FROM GV$SESSION@DBA_LINK C WHERE C.STATUS='ACTIVE' and b.inst_id=c.inst_id)) AS SESSION_CURRENT_ACTIVE,

    MAX((SELECT  COUNT(*) FROM GV$SESSION@DBA_LINK C WHERE C.STATUS='INACTIVE' and b.inst_id=c.inst_id)) AS SESSION_CURRENT_INACTIVE,

    MAX(case when  resource_name='processes' then MAX_UTILIZATION end) as PROCESS_MAX,

    MAX(case when  resource_name='processes' then CURRENT_UTILIZATION end) as PROCESS_CURRENT,

    MAX(case when  resource_name='processes' then LIMIT_VALUE end) as PROCESS_LIMIT

  from gv$resource_limit@DBA_LINK a, gv$instance@DBA_LINK b

  where a.resource_name in ('processes', 'sessions')

    and a.inst_id = b.inst_id

  GROUP BY sysdate, b.instance_name, b.host_name;

end;

/


--scheduler 생성

begin 

SYS.dbms_scheduler.create_job

  (job_name => 'check_session_db'

  ,start_date      => TO_TIMESTAMP_TZ('2016/01/16 07:00:00','yyyy/mm/dd hh24:mi:ss')

  ,job_class  => 'DEFAULT_JOB_CLASS'

  ,JOB_TYPE => 'PLSQL_BLOCK'

  ,repeat_interval => 'FREQ=DAILY; INTERVAL=1'

  ,job_action => 'BEGIN PROC_CHK_SESSION; END;'

  );

end;

/

--scheduler 활성화 및 테스트 실행

exec sys.dbms_scheduler.enable('check_session_db');

exec sys.dbms_scheduler.run_job('check_session_db');

 



정말 허접해 보이기는 하지만 나는 이것도 내 경험이라 생각해 본다.


수정 보완점은 아래와 같다.

1. system 계정으로 진행했기 때문에 보안상 문제가 될 소지가 있다. 그래서 이 부분을 각 권한을 따로 부여하여 진행

2. 성능 부분을 체크 안했기 때문에 플랜을 확인하여 최소한의 리소스를 사용


이렇게 하나하나 쿼리를 작성하는 것도 좋을 듯 하다.


반응형

'Oracle > DBA' 카테고리의 다른 글

[튜닝가이드] 인덱스 사용 여부 관련 생각 + [펌]  (0) 2016.10.06
[펌][ORACLE] ORA-에러  (0) 2015.12.22
[Oracle] Index monitoring  (0) 2015.12.14
[Oracle] Partition Local Index 테스트  (0) 2015.12.02
[ORACLE] ASM 에 Datafile 추가  (1) 2015.11.25

가장 최근의 연재인 (작년 12/24) #8 화를 제대로 읽지를 못해서 정리하는데 시간이 조금 더 소요 되었다.


이번에는 #5부터 #8까지 내용을 정리 하였다.


이 글은 어쩌면 Andrew 님의 정리를 또 정리한 것이기 때문에 자세한 부분은 DB Guide net을 통해서 찾아보거나,

이 분이 여기저기 많이 작성한 글들이 인터넷에 있기 때문에 조금만 검색해 봐도 나올 것이다.


#5

SDN(Software Defined Network) controller

[중앙에서 모든 곳의 트래픽과 경로의 상태를 보면서 패킷이 가는 경로를 조절하는 것]


Openflow 

[SDN Controller에게 보내고 받는 명령어를 표준화]


OVS(Open Virtual Switch)

[Openflow를 사용할 수 있게 만든 오픈소스기반의 소프트웨어 스위치]

 

ex) SDN Controller는 네이베이션 안내서버 / openflow는 데이터 망 또는 핸드폰앱과 서버간의 통신 프로토콜 / OVS는 운전자


Reactive

[OVS의 경우 자신에게 설정된 flow가 없는 새로운 패킷이 들어올 때 반드시 SDN Controller에 접속해서 경로를 받아와야만 패킷을 처리]


proactive / predefined

[OVS가 SDN Controller에게 묻지 않고 자신이 알아서 차단하거나 특정 경로로 보내는 것]


1. SDN Controller에서는 클러스터 형태의 Controller를 개발하거나 분산 데이터 베이스를 사용해서 부하를 최대한 분산

2. Openflow 를 통해 패킷의 경로들이 실제 물리 네트워크는 터널 형태로 모두 연결이 되어 있어야만 함


원문

http://www.dbguide.net/knowledge.db?cmd=specialist_view&boardUid=187658&boardConfigUid=117&boardStep=0


▶해당 차트는 내용은 이해가 되지만 조금 더 깊게는 이해하기 힘들어서 정리가 힘들었습니다.


------------------------------------

#6

아마존에서 한국에 별도의 데이터 센터를 갖추어서 해당 지역내에 원활하게 가상 머신과 네트워크를 제공하는 단위를 발표

하지만 그 이전에도 몇몇 클라우드 서비스를 할려는 글로벌 기업들이 자체 데이터 센터를 세우는 대신 대기업의 데이터 센터를 임대하여 사


용함으로써 경쟁이 아닌 대기업과 상생을 하려고 함


이후 내용들은 주관적인 부분이 감미 되어 있기에 읽는 독자들의 생각과 상이할 수 있다고 느끼기에 원문으로 대체합니다.

[저는 Andrew님과 비슷한 생각을 가지고 있습니다.]


http://www.dbguide.net/knowledge.db?cmd=specialist_view&boardUid=188289&boardConfigUid=117&boardStep=0


-------------------------------------

#7

클라우드에 대해서 이야기하고 있지만 자신이 하고 있는 일에 충실하면 된다...라는 뜻으로 이해하였습니다.

지금 저에게 가장 필요한 이야기 일듯...


--------------------------------------

#8

클라우드 컴퓨팅

[프로그램가능한 리소스 관리(Protrammable resource management)]


Programmable

[프로그램 코드로써 리소스들을 관리] - 일정한 룰과 규칙을 정확하게 이해할 줄 아는 사람이 해야함(사용하는 제품의 SLA(Service Level 


Agreement) 를 정확하게 이해해야하고 제공자는 이 룰에 맞도록 제품과 서비스를 만들어야 함


Resource

[계산이나 계산에 필요한 자료를 저장하는 자원]

- 클라우드에서 제공하는 리소스는 측정 가능해야 함 (측정이 가능해야지 사용자가 얼마나 사용했는지 이에 대해 가격 및 Abusing을 막을 수 있음)

- 독립적이어야 함(멀티 테넌시의 개념과 비슷한데 추가/제거가 가능하기 때문 - CPU는 측정이 가능하지만 독립적으로 추가나 제거가 불가)


ex) 아마존의 lambda라는 서비스는 작업을 정의해 두면 해당 작업이 수행된 시간만큼만 과금(밀리초 단위)


클라우드는 이러한 프로그램 가능한 리소스를 관리

- 생성, 삭제 부터 크기 변환 등

- 자동으로 리소스의 라이프 사이클을 관리할 수 있기 때문에 auto-scale-out 또는 auto-scale-in 가능


앞으로 self-management의 특성상 클라우드 사용자가 자신의 리소스를 관리하기 때문에 이러한 기능을 api화 해서 판매도 가능


추가로 연재가 올라오면 정리해서 올리겠습니다.


또한 Cloud 관련해서 좋은 기사나 내용이 있으면 블로그 하도록 하겠습니다.

반응형

'Cloud' 카테고리의 다른 글

[Cloud] Andrew 의 Cloud 정리-1  (0) 2016.01.13

+ Recent posts