반응형

Security Group (보안 그룹) 설정을 내 IP로 하면

당연히 EC2 인스턴트에 무리없이 연결 될 줄 알았는데...

 

웹 상에서 인스턴스에 연결은 안되었다....

 

친절한 오류메시지 내역

We were unable to connect to your instance. Make sure that your instance’s network settings are configured correctly for EC2 Instance Connect. For more information, see Task 1: Configure network access to an instance.

 

당연하게도

 

Security Group에서 22(SSH)를 0.0.0.0/0 으로 설정하면 된다...

 

하지만 이것은 치명적인 보안 문제가 있기 때문에 권장하지 않습니다.

 

해결방법

 

1. 우선 보안 그룹(Security Group)에서 22포트에 대해 0.0.0.0/0으로 설정 뒤 웹으로 연결 한다.

2. 다음 명령어를 사용하여 내가 접속하는 웹의 접근 IP 대역을 체크한다. (서울 리전 기준!)
  curl -s https://ip-ranges.amazonaws.com/ip-ranges.json| jq -r '.prefixes[] | select(.region=="ap-northeast-2") | select(.service=="EC2_INSTANCE_CONNECT") | .ip_prefix'

13.209.1.56/29

 

  ※ Amazone Linux 2 AMI 설치 내역임 

  ※ 설치된 명령어(curl, jd )

      * 없을 경우 #> yum install jd 와 같은 명령어로 설치함.

 

3. 위의 설정 값을 기준으로 다시 보안 그룹 (Security Group)을 재 설정한다.

   * xxx.xxx.xxx.130 은 내 IP로 설정한 고정 IP 주소

   * 위의 웹 접근시 나온 정보 (13.209.1.26/29)를 SSH 접근하도록 설정하면 EC2를 웹에서 연결 가능함.

 

   

 

참고 URL : https://stackoverflow.com/questions/66884055/elastic-beanstalk-ec2-instance-connect-cant-connect

 

Elastic Beanstalk & EC2 Instance Connect: Can't connect

I created an Elastic Beanstalk environment from Visual Studio and need to login to service the underlying ec2 vm. I don't have an credentials for the server, so I wanted to use EC2 Instance Connect...

stackoverflow.com

참고 URL : https://aws.amazon.com/ko/premiumsupport/knowledge-center/ec2-instance-connect-troubleshooting/

 

EC2 Instance Connect를 사용한 연결 문제 해결

Amazon EC2 Instance Connect를 사용하여 Amazon EC2(Amazon Elastic Compute Cloud) 인스턴스에 연결하려고 할 때 다음 오류가 표시됩니다. “ 인스턴스 연결을 설정하는 동안 문제가 발생했습니다. 로그인하지 못

aws.amazon.com

 

반응형
반응형

 

 

  웹서버 권고 파라미터 : https://waspro.tistory.com/406
WAS서버 권고 파라미터 : https://waspro.tistory.com/407
일반적인 권고 파라미터 : https://yoonroot.tistory.com/entry/Parameter-CentOS-Parameter-%EA%B3%84%EC%86%8D-%EC%B6%94%EA%B0%80-%EC%98%88%EC%A0%95

 

[WEB Server] TCP 권고 Parameter

본 포스팅은 WEB Server 설치 시 권고 파라미터에 대해 알아보겠습니다. WEB Server 설치 시 OS Kernel 권고 Parameter에 대해 살펴보겠습니다. 파라미터 설명 권고값 net.ipv4.tcp_keepalive_intvl TCP TIME_WAIT..

waspro.tistory.com

 

 

[WAS Server] TCP 권고 Parameter

본 포스팅은 WAS Server 설치 시 권고 파라미터에 대해 알아보겠습니다. WAS Server 설치 시 OS Kernel 권고 Parameter에 대해 살펴보겠습니다. 파라미터 설명 권고값 net.ipv4.tcp_keepalive_intvl TCP TIME_WAIT..

waspro.tistory.com

 

[Parameter] CentOS Parameter (계속 추가 예정)

1. 테스트 환경 - OS: CentOS 7.5 기준 2. 설정 방법 - parameter setting vi /etc/sysctl.conf - parameter apply sysctl -p >> growpart <하드디스크명> <파티션번호> - parameter check sysctl -a 3. parameter..

yoonroot.tistory.com

OS 전체 파라미터 설명 : https://chanchan-father.tistory.com/278

 

OS 최적 설정 가이드

1. sysctl 파라미터 1) sysctl 정의 - sysctl은 kernel parameter 값들을 조정하기 위한 utility입니다. - sysctl이 조절할 수 있는 값들은 /proc/sys/ 아래에 있는 리스트들입니다. - RHEL에서는 procps라는 패키..

chanchan-father.tistory.com

 

네트워크 capacity 관련 파라미터

 

1. 리눅스 전체 파일 개수 제한
  - 부족시 : too many open files 에러 발생
  - 정보조회 : sysctl fs.file-max
  ※ 현재 열린 개수 : sysctl fs.file-nr
 
  - 임시 적용 : ulimit -SHn 값
  - 영구 적용 : /etc/security/limits.conf 수정
     > https://sysops.tistory.com/99
 

2. backlogs (네트워크 패킷 처리 큐량) 

  - In-Bound Queue 길이 증가
    > net.core.netdev_max_backlog : 각 네트워크 장치 별로 커널이 처리하도록 쌓아두는 Queue의 크기를 설정   
    > net.core.netdev_max_backlog 이 미정의되면 값이 1000 기본
    > 적용
       /etc/sysctl.conf 파일내
       net.core.netdev_max_backlog=30000
      
   - listen 값 변경 (accept를 기다리는 ESTABLISHED 상태 소켓 큐)
     기본값은 128
     > 적용
       /etc/sysctl.conf 파일 내
       net.core.somaxconn=1024
      
    - listen 값 변경 (SYN-RECEIVE 상태의 소켓)  
     > 적용
       /etc/sysctl.conf 파일 내
       net.ipv4.tcp_max_syn_backlog=1024
      

3. 사용할 수 있는 포트 RANGE
   - 확인 명령
     > sysctl net.ipv4.ip_local_port_range

   - 적용     
     /etc/sysctl.conf 파일 내
      net.ipv4.ip_local_port_range=1024 65535
     
4. 서버 메시지 큐 관련    
    - 확인 명령
      >    sysctl kernel.msgmax
 
    /etc/sysctl.conf 파일 내   
    - 하나의 프로세스에서 다른 프로세스로 보내질 수 있는 최대 메시지 사이즈 지정  (아래는 기본 크기)
   
    # 최대 메시지 큐의 크기를 지정하며 bytes 단위로 지정 (최대 65,536보다 작게 설정함)
    kernel.msgmax = 8192   
    

 

    # kernel.msgmni (자동할당되는 최대 메시지 큐)


    # 기본 메시지 큐의 최대 크기 (최대 메시지 큐의 크기보다 작거나 같아야 함)
    kernel.msgmnb = 16384   

 

 


clear
echo ""
echo "1. TCP Time Wait 상태를 유지하는 시간 변수 조회(기본 : 7200초)"
echo " > WEB,WAS 서버 기준 : 15"
echo ""

sysctl -a | grep net.ipv4.tcp_keepalive_intvl

echo ""
echo "2. Keep Alive가 끊어졌다고 판단하고 세션을 정리하는 동안 보낼 Ping-Pong 패킷 수(기본 :9)"
echo " > WEB,WAS 서버 기준 : 5"
echo ""

sysctl -a | grep net.ipv4.tcp_keepalive_probes

echo ""
echo "3. 세션이 끊어지지 않게 Keep Alive Time 설정 (기본 : 7200)"
echo " > WEB, WAS 서버 기준 : 30 / 데몬 서버는 연결되어야할 초 시간 기준으로 설정함."
echo ""

sysctl -a | grep net.ipv4.tcp_keepalive_time

echo ""
echo "4. 사용할 수 있는 포트 범위를 설정 "
echo " > WEB, WAS 서버 기준 : 1024 - 65000"
echo ""

sysctl -a | grep net.ipv4.ip_local_port_range

echo ""
echo "5. 각 네트워크 장치 별로 커널이 처리하도록 쌓아두는 Queue의 크기 설정 (기본 1000)"
echo " > WEB, WAS 서버 기준 : 2,500"
echo " ※ 일부 소켓 accept라고 오역되는 사이트가 존재함"
echo ""

sysctl -a | grep net.core.netdev_max_backlog

echo ""
echo "6. Accept를 기다리는 ESTABLISHED 상태 소켓 큐 (기본 128)"
echo " > 5번의 큐 크기의 1/30 정도의 크기를 할당함"
echo ""

sysctl -a | grep net.core.somaxconn

echo ""
echo "7. SYN-RECEIVE 상태의 소켓 큐(기본 128)"
echo " > 5번의 큐 크기의 1/30 정도의 크기를 할당함"
echo ""

sysctl -a | grep net.ipv4.tcp_max_syn_backlog

echo ""
echo "8. TCP 연결 문제시 재시도하는 횟수"
echo " > WEB, WAS 서버 기준 : 3"
echo ""

sysctl -a | grep net.ipv4.tcp_retries1

echo ""
echo "9. TCP 연결 끊기전에 재시도하는 횟수 "
echo " > WEB, WAS 서버 기준 : 3"
echo ""

sysctl -a | grep net.ipv4.tcp_retries2

echo ""
echo "10. TCP 수신 버퍼의 최대값 설정 "
echo " > WEB, WAS 서버 기준 : 56777216"
echo ""

sysctl -a | grep net.core.rmem_max

echo ""
echo "11. TCP 수신 버퍼크기 기본값 설정"
echo " > WEB, WAS 서버 기준 : 16777216"
echo ""

sysctl -a | grep net.core.rmem_default

echo ""
echo "12. TCP 전송 버퍼크기 최대값 설정"
echo " > WEB, WAS 서버 기준 : 56777216"
echo ""

sysctl -a | grep net.core.wmem_max

echo ""
echo "13. TCP 전송 버퍼크기 기본값 설정"
echo " > WEB, WAS 서버 기준 : 16777216"
echo ""

sysctl -a | grep net.core.wmem_default

echo ""
echo "14. 65Kb 이상의 큰 TCP 윈도우 스케일링 사용"
echo " > WEB, WAS 서버 기준 : 1 "
echo ""

sysctl -a | grep net.ipv4.tcp_window_scaling

echo ""
echo "15. 서버 측에서 닫은 TCP 연결을 끊기 전에 확인하는 횟수(기본값 7 RTO)"
echo " > WEB, WAS 서버 기준 : 0"
echo ""

sysctl -a | grep net.ipv4.tcp_orphan_retries

echo ""
echo "16. SYNC 패킷을 전송 후 일부 ACK를 받지 못했을 때 선택적으로 ACK 패킷을 받도록 설정(0 : 받지않음, 1: 패킷유실 많은 사이트)"
echo " > WEB, WAS 서버 기준 : 0"
echo ""

sysctl -a | grep net.ipv4.tcp_sack

echo ""
echo "17. TCP 연결 해제 시간 (기본 : 60초)"
echo " > WEB, WAS 서버 기준 : 15"
echo ""

sysctl -a | grep net.ipv4.tcp_fin_timeout

echo ""
반응형
반응형

jellybeans.vim 파일 다운로드 방법

curl -O https://raw.githubusercontent.com/nanotech/jellybeans.vim/master/colors/jellybeans.vim

 

/etc/vimrc 파일 수정 내역

====================================================================
" encoding Set
set encoding=utf-8
set fileencodings=utf-8,euckr

" Sets how many lines of history VIM has to remember
" VIM에서 기억할 히스토리 라인수
set history=1000

" Always show current position
" 오른편 하단에 현재 위치의 (행, 렬)을 표시
set ruler

" Highlight search results
" 검색결과에 하이라이트 표시하기
set hlsearch

" Show matching brackets when text indicator is over them
" 현재 커서가 놓여진 괄호의 짝을 표시하기
set showmatch

" line number
" 라인넘버 표시하기
set number

" syntax highlight
" 언어 syntax에 하이라이트표시
syntax on

" color scheme
" 컬러스킴 (vi 테마 저장 경로 : /usr/share/vim/vim74/colors)
colorscheme jellybeans
set background=dark

if &term =~ "xterm"

    "256 color --
    let &t_Co=256

    " restore screen after quitting
    set t_ti=ESC7ESC[rESC[?47h t_te=ESC[?47lESC8

    if has("terminfo")
        let &t_Sf="\ESC[3%p1%dm"
        let &t_Sb="\ESC[4%p1%dm"
    else
        let &t_Sf="\ESC[3%dm"
        let &t_Sb="\ESC[4%dm"
    endif
endif


" auto indent's tab size
" 자동탭 사이즈를 4칸으로 하기
set shiftwidth=4

" c style auto indent
" c언어 스타일로 indentation하기
" 아래 구문은 "가 들어간 것을 복사할 때 자동 들여쓰기 됨(끄는법 : set nocindent)
set cindent

====================================================================

 

주석(#)을 입력시 자동으로 다음라인 입력 되는 것에 대한 껴고 끄는 법

기능 끄기
: set formatoptions-=r

 

기능 켜기
: set formatoptions+=r

 

테마 저장 경로

 /usr/share/vim/vim74/colors

 

참고사이트 : https://12bme.tistory.com/89

 

[리눅스] vim 컬러스킴 변경

리눅스 환경에서 텍스트 에디터로 vim 편집기를 많이 이용합니다. vim은 다양한 컬러 테마 변경이 가능합니다. 지금까지 이것도 모르고 기본 제공하고 있는 blue 컬러 테마를 쓰고 있었습니다만, 파이썬 개발시 ID..

12bme.tistory.com

https://storycompiler.tistory.com/55

 

[Ubuntu/Linux] vimrc의 모든 것

입사할 무렵부터 vi를 본격적으로 사용하기 시작했습니다. 이제는 울트라에디트나 이클립스보다 vi가 편합니다. 검은 색의 투박한 화면도 익숙하고, 반응 속도도 월등히 빠르죠. 물론 에디터에 불과하기에 기능은..

storycompiler.tistory.com

 

 

반응형

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

centos 설치된 패키지 파일로 역변환 하기  (0) 2021.02.16
Centos 모니터링 쉘 모음  (0) 2019.12.05
Centos 7 SAMBA 설정  (1) 2019.09.05
vi 색상 표기  (0) 2019.05.08
CENTOS 7에 XRDP 설치하기  (0) 2017.08.26
반응형


MariaDB JSON 형식 데이터 사용 : MariaDB 10.2 부터 가능

참고 사이트

https://mariadb.com/kb/en/library/json-functions/
https://mariadb.com/resources/blog/json-with-mariadb-10-2/
https://bstar36.tistory.com/359


1. 버전 확인
    MariaDB [(test)]> select @@version;
    +-----------------+
    | @@version       |
    +-----------------+
    | 10.3.17-MariaDB |
    +-----------------+
    1 row in set (0.000 sec)

2. JSON 데이터 타입 지원(내부적으로 LongTEXT로 저장)    
    MariaDB [test]> create table json_test (id int, data json);
    Query OK, 0 rows affected (0.015 sec)

    MariaDB [test]> show create table json_test;
    +-----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | Table     | Create Table                                                                                                                                                                                  |
    +-----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | json_test | CREATE TABLE `json_test` (
      `id` int(11) DEFAULT NULL,
      `data` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
    +-----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.000 sec)


3. JSON 데이터 조작
   A. json_object 함수를 이용하여 key,value 형식으로 Insert
    MariaDB [test]> insert into json_test values (1 , json_object('Name' , 'Kil-Dong, Hong' , 'Sex' , 'M' , 'Phone' , '010-1234-5678')) ;
    Query OK, 1 row affected (0.003 sec)
    
    MariaDB [test]> commit;
    Query OK, 0 rows affected (0.000 sec)
    
    MariaDB [test]> select * from json_test ;
    +------+------------------------------------------------------------------+
    | id   | data                                                             |
    +------+------------------------------------------------------------------+
    |    1 | {"Name": "Kil-Dong, Hong", "Sex": "M", "Phone": "010-1234-5678"} |
    +------+------------------------------------------------------------------+
    1 row in set (0.000 sec)

   B. 특정 key 값만 조회 하고자 할때 json_value 함수를 사용 
   
    MariaDB [test]> select id , json_value(data,'$.Name') As Name , json_value(data,'$.Phone') as Phone from json_test ;
    +------+----------------+---------------+
    | id   | Name           | Phone         |
    +------+----------------+---------------+
    |    1 | Kil-Dong, Hong | 010-1234-5678 |
    +------+----------------+---------------+
    1 row in set (0.001 sec)
    
    C. 특정 하나 Key 값을 update 하고자 할때,  json_replace 함수를 사용
    
    ※ 단, 이름은 중복날 수 있으니 Unique 값으로 비교하는 것을 추천 (사용방법 안내)
    MariaDB [test]> update json_test set data = json_replace(data,'$.Phone','010-2345-6789') where json_value(data,'$.Name') = 'Kil-Dong, Hong';
    Query OK, 1 row affected (0.002 sec)
    Rows matched: 1  Changed: 1  Warnings: 0


    MariaDB [test]> select id , json_value(data,'$.Name') As Name , json_value(data,'$.Phone') as Phone from json_test ;
    +------+----------------+---------------+
    | id   | Name           | Phone         |
    +------+----------------+---------------+
    |    1 | Kil-Dong, Hong | 010-2345-6789 |
    +------+----------------+---------------+
    1 row in set (0.000 sec)
    
    
    Object 값 자체로 추출("" 형태)
    MariaDB [test]> SELECT JSON_EXTRACT(data, '$.Name') from json_test;
    +------------------------------+
    | JSON_EXTRACT(data, '$.Name') |
    +------------------------------+
    | "Su, Peng"                   |
    | "Dori Go"                    |
    | "DaHan, Wi "                 |
    | NULL                         |
    | NULL                         |
    +------------------------------+
    5 rows in set (0.000 sec)
    
    
    MariaDB [test]> SELECT JSON_UNQUOTE(JSON_EXTRACT(data, '$.Name')) from json_test;
    +--------------------------------------------+
    | JSON_UNQUOTE(JSON_EXTRACT(data, '$.Name')) |
    +--------------------------------------------+
    | Su, Peng                                   |
    | Dori Go                                    |
    | DaHan, Wi                                  |
    | NULL                                       |
    | NULL                                       |
    +--------------------------------------------+
    5 rows in set (0.000 sec)


    
    D. 하나 이상의 Key 값을 변경할 때는 json_set 함수 사용

    MariaDB [test]> update json_test set data = json_set(data,'$.Phone','010-3456-7890', '$.Name','Su, Peng') where id = 1 ;
    Query OK, 1 row affected (0.001 sec)
    Rows matched: 1  Changed: 1  Warnings: 0

    MariaDB [test]> select id , json_value(data,'$.Name') As Name , json_value(data,'$.Phone') as Phone from json_test ;
    +------+----------+---------------+
    | id   | Name     | Phone         |
    +------+----------+---------------+
    |    1 | Su, Peng | 010-3456-7890 |
    +------+----------+---------------+
    1 row in set (0.000 sec)

 
    E. Json 형태가 추가되어도 입력이 가능
    insert into json_test values (2 , json_object('Name' , 'Dori Go' , 'Sex' , 'F' , 'Phone' , '02-123-4567' , 'Birth', '2000-01-01')) ; 
    
    MariaDB [test]> insert into json_test values (2 , json_object('Name' , 'Dori Go' , 'Sex' , 'F' , 'Phone' , '02-123-4567' , 'Birth', '2000-01-01')) ;
    Query OK, 1 row affected (0.001 sec)
    
    MariaDB [test]> commit;
    Query OK, 0 rows affected (0.000 sec)
    
    MariaDB [test]> select * from json_test;
    +------+--------------------------------------------------------------------------------+
    | id   | data                                                                           |
    +------+--------------------------------------------------------------------------------+
    |    1 | {"Name": "Su, Peng", "Sex": "M", "Phone": "010-3456-7890"}                     |
    |    2 | {"Name": "Dori Go", "Sex": "F", "Phone": "02-123-4567", "Birth": "2000-01-01"} |
    +------+--------------------------------------------------------------------------------+
    2 rows in set (0.000 sec)

    F. json 데이터 값의 Like 검색
    
    MariaDB [test]> select count(*) from json_test where json_value(data,'$.Phone') like '02%' ;
    +----------+
    | count(*) |
    +----------+
    |        1 |
    +----------+
    1 row in set (0.000 sec)
     
    G. json 데이터 타입의 key를 가상 컬럼을 생성 후 Index 작업 가능
    
    - 테이블 변경(가상 컬럼 추가)
    MariaDB [test]> alter table json_test add phone varchar(20) as (json_value(data,'$.phone')) ;
    Query OK, 0 rows affected (0.341 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    MariaDB [test]> select * from json_test limit 1 ;
    +------+------------------------------------------------------------+-------+
    | id   | data                                                       | phone |
    +------+------------------------------------------------------------+-------+
    |    1 | {"Name": "Su, Peng", "Sex": "M", "Phone": "010-3456-7890"} | NULL  |
    +------+------------------------------------------------------------+-------+
    1 row in set (0.000 sec)

    현재 화면에서 데이터가 안나오는 이유는 Key의 Phone은 P가 대문자 생성시에는 소문자로 만들었음
    삭제 후 다시 추가

    MariaDB [test]> alter table json_test drop phone;
    Query OK, 0 rows affected (0.009 sec)
    Records: 0  Duplicates: 0  Warnings: 0

    MariaDB [test]>  select * from json_test limit 1 ;
    +------+------------------------------------------------------------+
    | id   | data                                                       |
    +------+------------------------------------------------------------+
    |    1 | {"Name": "Su, Peng", "Sex": "M", "Phone": "010-3456-7890"} |
    +------+------------------------------------------------------------+
    1 row in set (0.000 sec)

    MariaDB [test]> alter table json_test add phone varchar(20) as (json_value(data,'$.Phone')) ;
    Query OK, 0 rows affected (0.012 sec)
    Records: 0  Duplicates: 0  Warnings: 0

    MariaDB [test]>  select * from json_test;
    +------+--------------------------------------------------------------------------------+---------------+
    | id   | data                                                                           | phone         |
    +------+--------------------------------------------------------------------------------+---------------+
    |    1 | {"Name": "Su, Peng", "Sex": "M", "Phone": "010-3456-7890"}                     | 010-3456-7890 |
    |    2 | {"Name": "Dori Go", "Sex": "F", "Phone": "02-123-4567", "Birth": "2000-01-01"} | 02-123-4567   |
    +------+--------------------------------------------------------------------------------+---------------+
    2 rows in set (0.000 sec)
    
       
    - 인덱스 생성
    key 값을 기준으로 가상 생성된 컬럼에 index를(ix_json_test_01)  추가
    MariaDB [test]> create index ix_json_test_01 on json_test(phone) ;
    Query OK, 0 rows affected (0.021 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    explain 을 통해 plan을 조회합니다.
    MariaDB [test]> explain select count(*) from json_test where Phone like '02%' ;
    +------+-------------+-----------+-------+-----------------+-----------------+---------+------+------+--------------------------+
    | id   | select_type | table     | type  | possible_keys   | key             | key_len | ref  | rows | Extra                    |
    +------+-------------+-----------+-------+-----------------+-----------------+---------+------+------+--------------------------+
    |    1 | SIMPLE      | json_test | index | ix_json_test_01 | ix_json_test_01 | 63      | NULL |    2 | Using where; Using index |
    +------+-------------+-----------+-------+-----------------+-----------------+---------+------+------+--------------------------+
    1 row in set (0.000 sec)

    H. Json Object를 사용하지 않은 Insert
    MariaDB [test]> insert into json_test(id, data) values (3, '{"Name": "DaHan, Wi ", "Sex": "M", "Phone": "010-9876-5432", "Birth": "1999-12-31"}');
    Query OK, 1 row affected (0.003 sec)

    MariaDB [test]> select * from json_test;
    +------+-------------------------------------------------------------------------------------+---------------+
    | id   | data                                                                                | phone         |
    +------+-------------------------------------------------------------------------------------+---------------+
    |    1 | {"Name": "Su, Peng", "Sex": "M", "Phone": "010-3456-7890"}                          | 010-3456-7890 |
    |    2 | {"Name": "Dori Go", "Sex": "F", "Phone": "02-123-4567", "Birth": "2000-01-01"}      | 02-123-4567   |
    |    3 | {"Name": "DaHan, Wi ", "Sex": "M", "Phone": "010-9876-5432", "Birth": "1999-12-31"} | 010-9876-5432 |
    +------+-------------------------------------------------------------------------------------+---------------+
    3 rows in set (0.000 sec)


4. Json 관련 함수들
   관련 링크 :  https://mariadb.com/kb/en/library/json-functions/
   
   - JSON_Query와 JSON_VALUE 차이
     아래와 같이 임시로 json 변수를 선언하고 json 데이터를 저장합니다.
     
    MariaDB [test]> SET @json='{ "x": [0,1], "y": "[0,1]", "z": "Monty" }';
    Query OK, 0 rows affected (0.001 sec)

    MariaDB [test]> SELECT JSON_QUERY(@json,'$'), JSON_VALUE(@json,'$');
    +--------------------------------------------+-----------------------+
    | JSON_QUERY(@json,'$')                      | JSON_VALUE(@json,'$') |
    +--------------------------------------------+-----------------------+
    | { "x": [0,1], "y": "[0,1]", "z": "Monty" } | NULL                  |
    +--------------------------------------------+-----------------------+
    1 row in set (0.000 sec)

    MariaDB [test]> SELECT JSON_QUERY(@json,'$.x'), JSON_VALUE(@json,'$.x');
    +-------------------------+-------------------------+
    | JSON_QUERY(@json,'$.x') | JSON_VALUE(@json,'$.x') |
    +-------------------------+-------------------------+
    | [0,1]                   | NULL                    |
    +-------------------------+-------------------------+
    1 row in set (0.000 sec)

    MariaDB [test]> SELECT JSON_QUERY(@json,'$.y'), JSON_VALUE(@json,'$.y');
    +-------------------------+-------------------------+
    | JSON_QUERY(@json,'$.y') | JSON_VALUE(@json,'$.y') |
    +-------------------------+-------------------------+
    | NULL                    | [0,1]                   |
    +-------------------------+-------------------------+
    1 row in set (0.000 sec)

    MariaDB [test]> SELECT JSON_QUERY(@json,'$.z'), JSON_VALUE(@json,'$.z');
    +-------------------------+-------------------------+
    | JSON_QUERY(@json,'$.z') | JSON_VALUE(@json,'$.z') |
    +-------------------------+-------------------------+
    | NULL                    | Monty                   |
    +-------------------------+-------------------------+
    1 row in set (0.000 sec)

    MariaDB [test]> SELECT JSON_QUERY(@json,'$.x[0]'), JSON_VALUE(@json,'$.x[0]');
    +----------------------------+----------------------------+
    | JSON_QUERY(@json,'$.x[0]') | JSON_VALUE(@json,'$.x[0]') |
    +----------------------------+----------------------------+
    | NULL                       | 0                          |
    +----------------------------+----------------------------+
    1 row in set (0.000 sec)

    - JSON_ARRAY 함수
      10.2.3 버전부터 추가됨
      MariaDB [test]> SELECT Json_Array(56, 3.1416, 'My name is "Foo"', NULL);
    +--------------------------------------------------+
    | Json_Array(56, 3.1416, 'My name is "Foo"', NULL) |
    +--------------------------------------------------+
    | [56, 3.1416, "My name is \"Foo\"", null]         |
    +--------------------------------------------------+
    1 row in set (0.000 sec)


    MariaDB [test]> insert into json_test(id, data) values (4, JSON_ARRAY("Name","Ra, Ro ", "Sex", "F", "Phone", "010-1122-3344", "Birth", "1990-06-01"));
    Query OK, 1 row affected (0.003 sec)
 
     
    MariaDB [test]> select * from json_test;
    +------+-------------------------------------------------------------------------------------+---------------+
    | id   | data                                                                                | phone         |
    +------+-------------------------------------------------------------------------------------+---------------+
    |    1 | {"Name": "Su, Peng", "Sex": "M", "Phone": "010-3456-7890"}                          | 010-3456-7890 |
    |    2 | {"Name": "Dori Go", "Sex": "F", "Phone": "02-123-4567", "Birth": "2000-01-01"}      | 02-123-4567   |
    |    3 | {"Name": "DaHan, Wi ", "Sex": "M", "Phone": "010-9876-5432", "Birth": "1999-12-31"} | 010-9876-5432 |
    |    4 | ["Name", "Ra, Ro ", "Sex", "F", "Phone", "010-1122-3344", "Birth", "1990-06-01"]    | NULL          |
    +------+-------------------------------------------------------------------------------------+---------------+
    4 rows in set (0.000 sec)

    위의 id 4번 값은 아래에 보듯이 Type이 맞지 않기 때문에 phone값이 정상 인식 되지 않았음.
    
    MariaDB [test]> select json_type(data) from json_test;
    +-----------------+
    | json_type(data) |
    +-----------------+
    | OBJECT          |
    | OBJECT          |
    | OBJECT          |
    | ARRAY           |
    +-----------------+
    4 rows in set (0.001 sec)

    - 함수들 간략한 설명
    2
    JSON_QUERY와 JSON_VALUE의 차이점
        JSON_QUERY와 JSON_VALUE의 예제와 비교합니다.
    JSON_ARRAY
        나열된 값이 포함 된 JSON 배열을 반환합니다.
    JSON_ARRAY_APPEND
        JSON 문서 내에서 주어진 배열의 끝에 값을 추가합니다.
    JSON_ARRAY_INSERT
        JSON 문서에 값을 삽입합니다.
    JSON_COMPACT
        불필요한 모든 공간을 제거하여 json 문서가 가능한 한 짧습니다.
    JSON_CONTAINS
        지정된 JSON 문서 또는 문서 내의 지정된 경로에서 값을 찾을 수 있는지 여부
    JSON_CONTAINS_PATH
        지정된 JSON 문서에 지정된 경로의 데이터가 있는지 여부를 나타냅니다.
    JSON_DEPTH
        JSON 문서의 최대 깊이.
    JSON_DETAILED
        중첩 구조를 강조하는 가장 이해하기 쉬운 방식으로 JSON을 나타냅니다.
    JSON_EXISTS
        지정된 데이터에 지정된 JSON 값이 있는지 확인합니다. 
    JSON_EXTRACT
        JSON 문서에서 데이터를 추출합니다.
    JSON_INSERT
        JSON 문서에 데이터를 삽입합니다.
    JSON_KEYS
        JSON 객체의 최상위 값에서 키를 반환하거나 경로에서 최상위 키를 반환합니다.
        MariaDB [test]> select id, json_keys(data) from json_test;
        +------+-----------------------------------+
        | id   | json_keys(data)                   |
        +------+-----------------------------------+
        |    1 | ["Name", "Sex", "Phone"]          |
        |    2 | ["Name", "Sex", "Phone", "Birth"] |
        |    3 | ["Name", "Sex", "Phone", "Birth"] |
        |    4 | NULL                              |
        |    5 | NULL                              |
        +------+-----------------------------------+
        5 rows in set (0.000 sec)

    JSON_LENGTH
        JSON 문서의 길이 또는 문서 내 값의 길이를 반환합니다.
    JSON_LOOSE
        더 읽기 쉽게 보이도록 JSON 문서에 공백을 추가합니다.
    JSON_MERGE
        주어진 JSON 문서를 병합합니다.
    JSON_MERGE_PATCH
        주어진 JSON 문서의 RFC 7396 호환 병합
    JSON_MERGE_PRESERVE
        JSON_MERGE의 동의어
    JSON_OBJECT
        주어진 키 / 값 쌍을 포함하는 JSON 객체를 반환합니다. 
    JSON_QUERY
        JSON 문서가 주어지면 경로로 지정된 객체 또는 배열을 반환합니다.
    JSON_QUOTE
        문자열을 JSON 값으로 인용합니다.
    JSON_REMOVE
        JSON 문서에서 데이터를 제거합니다.
    JSON_REPLACE
        JSON 문서에서 기존 값을 바꿉니다.
    JSON_SEARCH
        JSON 문서 내에서 지정된 문자열의 경로를 반환합니다.
    JSON_SET
        JSON 문서에 데이터를 업데이트하거나 삽입합니다.
    JSON_TYPE
        JSON 값의 유형을 반환합니다.
    JSON_UNQUOTE
        JSON 값을 인용 해제하여 문자열을 반환합니다. 
    JSON_VALID
        값이 유효한 JSON 문서인지 여부 
    JSON_VALUE
        JSON 문서가 주어지면 지정된 스칼라를 반환합니다.
     

반응형

'Database > MYSQL' 카테고리의 다른 글

MariaDB connect 설치  (0) 2019.11.07
MariaDB 테이블 백업 및 복구  (0) 2019.11.01
MariaDB 우편번호 Import 하기  (0) 2019.11.01
MariaDB SHA2 512 방식으로 암호화 예제  (0) 2019.10.25
Mysql & MariaDB 튜닝 쉘  (0) 2019.08.14
반응형

* 컨테이너 커밋은 기 Container 파일내에 변경 사항에 대한 내용을 image 화 하는 방식임.


1.  Docker 컨터이너 커밋
   - docker에서 작업한 컨테이너를 그대로 저장합니다.
     (별도로 기본 이미지에서 변경한 내역이 있을 때 사용)
   
   - docker commit [CONTAINER] [백업할 IMAGE_NAME]
   - 예)
   [root@localhost ~]# docker ps
CONTAINER ID        IMAGE                                                COMMAND                  CREATED             STATUS              PORTS                                                                           NAMES
2df5d23dbe0e        docker.test.io:8081/solution-was/2.1/x64:latest         "/bin/sh -c /run.sh"     4 months ago        Up 5 minutes        0.0.0.0:8888->8080/tcp                                                          docker_was_1
509d8e8f79c6        docker.test.io:8081/solution-dtg/2.1/x64:latest         "/bin/sh -c /run.sh"     4 months ago        Up 5 minutes        1337/tcp                                                                        docker_dtg_1
22bc42e1e8f7        docker.test.io:8081/solution-mhp/2.0/x64:latest         "/bin/sh -c /run.sh"     4 months ago        Up 5 minutes        1335/tcp, 1337/tcp, 1339-1341/tcp, 3882/tcp, 0.0.0.0:9900-9999->9900-9999/tcp   docker_mhp_1
dfce80fcd38f        docker.test.io:8081/solution-geoserver/2.2/x64:latest   "/bin/sh -c /run.sh"     4 months ago        Up 5 minutes        8080/tcp                                                                        docker_geoserver_1
eb18ba2b9010        postgres:10.5                                        "docker-entrypoint..."   4 months ago        Up 5 minutes        5432/tcp                                                                        docker_postgresdb_1
2c8ec75d22ed        cassandra:3.11.3                                     "docker-entrypoint..."   4 months ago        Up 5 minutes        7000-7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp                                     docker_cassandra_1
a427d7f36829        mongo:3.4                                            "docker-entrypoint..."   4 months ago        Up 5 minutes        0.0.0.0:27017->27017/tcp                                                        docker_mongodb_1

   위의 내용에서 docker_was_1 컨테이너를 commit할 예정
   
   [root@localhost ~]# docker images
REPOSITORY                                    TAG                 IMAGE ID            CREATED             SIZE
docker.test.io:8081/solution-was/2.1/x64         latest              a85e7acc572a        6 months ago        1.23 GB
docker.io/solution/test-adp                      dev                 46312c34dd22        6 months ago        1.35 GB
docker.io/solution/test-dataengine               dev                 efa6b96652f1        7 months ago        519 MB
docker.test.io:8081/solution-mhp/2.0/x64         latest              f0589f2e98fa        7 months ago        1.3 GB
docker.io/cassandra                           3.11.3              8ea89760ce2b        7 months ago        323 MB
docker.io/mongo                               3.4                 9467ec7b04e5        7 months ago        361 MB
docker.test.io:8081/solution-dtg/2.1/x64         latest              6772091689dc        7 months ago        1.09 GB
docker.test.io:8081/solution-geoserver/2.2/x64   latest              7148066bbeba        7 months ago        1.4 GB
docker.io/postgres                            10.5                3fce051f5a48        8 months ago        228 MB
docker.io/solution/test-mariadb                  10.2                43eb83900c8a        15 months ago       1.15 GB

  [root@localhost ~]# docker commit docker_was_1 docker.test.io:8081/solution-was/2.1/x64:latest
sha256:b4fd018ea938c46eae246ca8f6daa586c7216919b4be21a0e980bf05fca82dc0
[root@localhost ~]#

  위의 보이는 것처럼 b4fd018ea938c46eae246ca8f6daa586c7216919b4be21a0e980bf05fca82dc0 이름으로 이미지가 생성됩니다.
  
  [root@localhost ~]# docker images
REPOSITORY                                    TAG                 IMAGE ID            CREATED             SIZE
docker.test.io:8081/solution-was/2.1/x64         latest              b4fd018ea938        10 seconds ago      1.23 GB
docker.test.io:8081/solution-was/2.1/x64                       a85e7acc572a        6 months ago        1.23 GB
docker.io/solution/test-adp                      dev                 46312c34dd22        6 months ago        1.35 GB
docker.io/solution/test-dataengine               dev                 efa6b96652f1        7 months ago        519 MB
docker.test.io:8081/solution-mhp/2.0/x64         latest              f0589f2e98fa        7 months ago        1.3 GB
docker.io/cassandra                           3.11.3              8ea89760ce2b        7 months ago        323 MB
docker.io/mongo                               3.4                 9467ec7b04e5        7 months ago        361 MB
docker.test.io:8081/solution-dtg/2.1/x64         latest              6772091689dc        7 months ago        1.09 GB
docker.test.io:8081/solution-geoserver/2.2/x64   latest              7148066bbeba        7 months ago        1.4 GB
docker.io/postgres                            10.5                3fce051f5a48        8 months ago        228 MB
docker.io/solution/test-mariadb                  10.2                43eb83900c8a        15 months ago       1.15 GB


  - 만든 이미지의 임의의 이름 부여
  [root@localhost ~]# docker tag docker.test.io:8081/solution-was/2.1/x64 mydocker_last

  - 내역 조회
  [root@localhost ~]# docker images
REPOSITORY                                    TAG                 IMAGE ID            CREATED              SIZE
docker.test.io:8081/solution-was/2.1/x64         latest              b4fd018ea938        About a minute ago   1.23 GB
mydocker_last                                 latest              b4fd018ea938        About a minute ago   1.23 GB
docker.test.io:8081/solution-was/2.1/x64                       a85e7acc572a        6 months ago         1.23 GB
docker.io/solution/test-adp                      dev                 46312c34dd22        6 months ago         1.35 GB
docker.io/solution/test-dataengine               dev                 efa6b96652f1        7 months ago         519 MB
docker.test.io:8081/solution-mhp/2.0/x64         latest              f0589f2e98fa        7 months ago         1.3 GB
docker.io/cassandra                           3.11.3              8ea89760ce2b        7 months ago         323 MB
docker.io/mongo                               3.4                 9467ec7b04e5        7 months ago         361 MB
docker.test.io:8081/solution-dtg/2.1/x64         latest              6772091689dc        7 months ago         1.09 GB
docker.test.io:8081/solution-geoserver/2.2/x64   latest              7148066bbeba        7 months ago         1.4 GB
docker.io/postgres                            10.5                3fce051f5a48        8 months ago         228 MB
docker.io/solution/test-mariadb                  10.2                43eb83900c8a        15 months ago        1.15 GB

     
 
2. docker 이미지 백업 및 배포

위에서 만든 mydocker_last 이미지를 백업 받습니다.

[root@localhost ~]# docker save -o mydocker_last_20190626.tar mydocker_last

[root@localhost ~]# ls -lsa mydocker*.tar
1229636 -rw------- 1 root root 1259146752 Jun 26 04:06 mydocker_last_20190626.tar


위의 생성된 내역을 기준으로

* 사전에 docker-compose로 전체를 내리고 수행 필요

a. docker rm [컨테이너 삭제]
b. docker rmi [이미지 삭제]

이미지 로드

[root@localhost ~]# docker load -i mydocker_last_20190626.tar
9186e1e3577e: Loading layer [==================================================>] 4.608 kB/4.608 kB
5e98fb5934af: Loading layer [==================================================>] 157.5 MB/157.5 MB
f33686d99dec: Loading layer [==================================================>] 2.048 kB/2.048 kB
f30a15d54bfb: Loading layer [==================================================>] 2.048 kB/2.048 kB
825ca8132690: Loading layer [==================================================>]  29.7 kB/29.7 kB
Loaded image: mydocker_last:latest
[root@localhost ~]# docker images
REPOSITORY                                    TAG                 IMAGE ID            CREATED             SIZE
mydocker_last                                 latest              b4fd018ea938        12 minutes ago      1.23 GB
docker.io/solution/test-adp                      dev                 46312c34dd22        6 months ago        1.35 GB
docker.io/solution/test-dataengine               dev                 efa6b96652f1        7 months ago        519 MB
docker.test.io:8081/solution-mhp/2.0/x64         latest              f0589f2e98fa        7 months ago        1.3 GB
docker.io/cassandra                           3.11.3              8ea89760ce2b        7 months ago        323 MB
docker.io/mongo                               3.4                 9467ec7b04e5        7 months ago        361 MB
docker.test.io:8081/solution-dtg/2.1/x64         latest              6772091689dc        7 months ago        1.09 GB
docker.test.io:8081/solution-geoserver/2.2/x64   latest              7148066bbeba        7 months ago        1.4 GB
docker.io/postgres                            10.5                3fce051f5a48        8 months ago        228 MB
docker.io/solution/test-mariadb                  10.2                43eb83900c8a        15 months ago       1.15 GB


기존 명칭으로 mydocker_last를 변경

 # docker tag mydocker_last docker.test.io:8081/solution-was/2.1/x64 
 
 [root@localhost ~]# docker images
REPOSITORY                                    TAG                 IMAGE ID            CREATED             SIZE
docker.test.io:8081/solution-was/2.1/x64         latest              b4fd018ea938        13 minutes ago      1.23 GB
mydocker_last                                 latest              b4fd018ea938        13 minutes ago      1.23 GB
docker.io/solution/test-adp                      dev                 46312c34dd22        6 months ago        1.35 GB
docker.io/solution/test-dataengine               dev                 efa6b96652f1        7 months ago        519 MB
docker.test.io:8081/solution-mhp/2.0/x64         latest              f0589f2e98fa        7 months ago        1.3 GB
docker.io/cassandra                           3.11.3              8ea89760ce2b        7 months ago        323 MB
docker.io/mongo                               3.4                 9467ec7b04e5        7 months ago        361 MB
docker.test.io:8081/solution-dtg/2.1/x64         latest              6772091689dc        7 months ago        1.09 GB
docker.test.io:8081/solution-geoserver/2.2/x64   latest              7148066bbeba        7 months ago        1.4 GB
docker.io/postgres                            10.5                3fce051f5a48        8 months ago        228 MB
docker.io/solution/test-mariadb                  10.2                43eb83900c8a        15 months ago       1.15 GB

복제된 기존 태그 삭제
[root@localhost ~]# docker rmi mydocker_last
Untagged: mydocker_last:latest
[root@localhost ~]# docker images
REPOSITORY                                    TAG                 IMAGE ID            CREATED             SIZE
docker.test.io:8081/solution-was/2.1/x64         latest              b4fd018ea938        14 minutes ago      1.23 GB
docker.io/solution/test-adp                      dev                 46312c34dd22        6 months ago        1.35 GB
docker.io/solution/test-dataengine               dev                 efa6b96652f1        7 months ago        519 MB
docker.test.io:8081/solution-mhp/2.0/x64         latest              f0589f2e98fa        7 months ago        1.3 GB
docker.io/cassandra                           3.11.3              8ea89760ce2b        7 months ago        323 MB
docker.io/mongo                               3.4                 9467ec7b04e5        7 months ago        361 MB
docker.test.io:8081/solution-dtg/2.1/x64         latest              6772091689dc        7 months ago        1.09 GB
docker.test.io:8081/solution-geoserver/2.2/x64   latest              7148066bbeba        7 months ago        1.4 GB
docker.io/postgres                            10.5                3fce051f5a48        8 months ago        228 MB
docker.io/solution/test-mariadb                  10.2                43eb83900c8a        15 months ago       1.15 GB

반응형
반응형

1. vi command 상에서

:colorscheme

-> 기본 적용되어 있는 컬럼 스킨 확인 가능

 

2. colorscheme 적용가능한 테마 확인

:colorscheme 'Ctrl+D'

-> colorscheme 명령어 한칸 띄우고 Ctrl +D 키를 입력하면 목록이 조회됩니다.

 

3. 다른 컬럼 스킨 적용

개인적으로 식별하기 좋은 형태로 ron을 추천하면

:colorscheme ron

-> ron 형태의 스킨을 적용가능합니다.

 

4. 항상 ron 설정으로 vi 적용하기

$> vi ~/.exrc

-> 계정의 home 디렉토리에 .exrc 파일에

colorscheme ron

-> :wq를 입력하여 저장후 쉘로 나옵니다.

 

$>cat ~/.exrc

colorscheme ron

 

반응형

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

vimrc 공통 환경 설정  (1) 2019.12.03
Centos 7 SAMBA 설정  (1) 2019.09.05
CENTOS 7에 XRDP 설치하기  (0) 2017.08.26
리눅스 백업 및 복구  (0) 2013.01.25
삼성 컴퓨터 유분투 설치기.  (0) 2012.02.06
반응형


출처 : http://ukja.tistory.com/232 에서 퍼온 자료입니다.



특정 Query를 수행한 후, 그 결과를 가로 형태가 아닌 세로 형태로 보기 좋게 출력하고 싶다. Tom Kyte가 멋지게 이 작업을 해냈는데, 핵심은 DBMS_SQL 패키지를 이용한 Dynamic SQL에 있다. 

create or replace procedure print_table( p_query in varchar2 )
AUTHID CURRENT_USER
is
    l_theCursor     integer default dbms_sql.open_cursor;
    l_columnValue   varchar2(4000);
    l_status        integer;
    l_descTbl       dbms_sql.desc_tab;
    l_colCnt        number;
begin
      dbms_sql.parse(  l_theCursor,  p_query, dbms_sql.native );
    dbms_sql.describe_columns
    ( l_theCursor, l_colCnt, l_descTbl );

    for i in 1 .. l_colCnt loop
        dbms_sql.define_column
        (l_theCursor, i, l_columnValue, 4000);
    end loop;

    l_status := dbms_sql.execute(l_theCursor);

    while ( dbms_sql.fetch_rows(l_theCursor) > 0 ) loop
        for i in 1 .. l_colCnt loop
            dbms_sql.column_value
            ( l_theCursor, i, l_columnValue );
            dbms_output.put_line
            ( rpad( l_descTbl(i).col_name, 30 )
              || ': ' ||
              l_columnValue );
        end loop;
        dbms_output.put_line( '-----------------' );
    end loop;
exception
    when others then
     raise;
end;
/


약간의 귀찮은 코딩이 필요하지만 그 효과는 입이 딱 벌어질 정도이다. 다음과 같이 아주 보기 편하게 데이터를 출력할 수 있다. 


SYSTEM> grant execute on print_table to public;

SYSTEM> create public synonym print_table for scott.print_table;



UKJA@ukja116> set serveroutput on
UKJA@ukja116> 
UKJA@ukja116> exec print_table('select * from v$session where sid = userenv(''sid'')');
SADDR                         : 35065B10                                        
SID                           : 127                                             
SERIAL#                       : 557                                             
AUDSID                        : 6755975                                         
PADDR                         : 35A94D88                                        
USER#                         : 88                                              
USERNAME                      : UKJA                                            
COMMAND                       : 3                                               
OWNERID                       : 2147483644                                      
TADDR                         :                                                 
...                             
CREATOR_SERIAL#               : 140                                             
-----------------                                                               

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.20


참고로, 나는 print_table 함수를 접하는 순간 Toad가 더 이상 불필요하게 되었다. 

DBMS_SQL 패키지를 이용한 Dynamic SQL 구현은 너무 강력하다. 아래는 내가 실제로 테스트를 할 때 많이 사용하는 간단한 PL/SQL Script이다. Column이 50개 이상 존재하는  V$SQL_SHARED_CURSOR 뷰에서 값이 'Y'인 것만 뽑아서 예쁘게 출력하고 싶기 때문이다. 

-- my shared cursor
/*
declare
  c         number;
  col_cnt   number;
  col_rec   dbms_sql.desc_tab;
  col_value varchar2(4000);
  ret_val    number;
begin
  c := dbms_sql.open_cursor;
  dbms_sql.parse(c,
      'select q.sql_text, s.*
      from v$sql_shared_cursor s, v$sql q
      where s.sql_id = q.sql_id
          and s.child_number = q.child_number
          and q.sql_text like ''&1''',
      dbms_sql.native);
  dbms_sql.describe_columns(c, col_cnt, col_rec);

  for idx in 1 .. col_cnt loop
    dbms_sql.define_column(c, idx, col_value, 4000);
  end loop;


  ret_val := dbms_sql.execute(c);

  while(dbms_sql.fetch_rows(c) > 0) loop
    for idx in 1 .. col_cnt loop
      dbms_sql.column_value(c, idx, col_value);
      if col_rec(idx).col_name in ('SQL_ID', 'ADDRESS', 'CHILD_ADDRESS',
                    'CHILD_NUMBER', 'SQL_TEXT') then
        dbms_output.put_line(rpad(col_rec(idx).col_name, 30) ||
                ' = ' || col_value);
      elsif col_value = 'Y' then
        dbms_output.put_line(rpad(col_rec(idx).col_name, 30) ||
                ' = ' || col_value);
      end if;

    end loop;

    dbms_output.put_line('--------------------------------------------------');

   end loop;

  dbms_sql.close_cursor(c);

end;
/


만일 이러한 수고없이 V$SQL_SHARED_CURSOR 뷰를 보려고 하면, 곧 좌절하고 말 것이다. 아래 데이터를 보면서 좌절감을 잠깐 맛보자...

UKJA@ukja116> col sql_id new_value v_sql_id
UKJA@ukja116> 
UKJA@ukja116> select sql_id from v$sql where sql_text like 
    'select /* cursor_share */ * from t1%';

SQL_ID                                                                          
-------------                                                                   
2zu6xb9130t89                                                                   

Elapsed: 00:00:00.07
UKJA@ukja116> 
UKJA@ukja116> set serveroutput on
UKJA@ukja116> exec print_table( -
        'select * from v$sql_shared_cursor where sql_id = ''&v_sql_id''');
SQL_ID                        : 2zu6xb9130t89                                   
ADDRESS                       : 2867E250                                        
CHILD_ADDRESS                 : 2FABDDD8                                        
CHILD_NUMBER                  : 2                                               
UNBOUND_CURSOR                : N                                               
SQL_TYPE_MISMATCH             : N                                               
OPTIMIZER_MISMATCH            : N                                               
OUTLINE_MISMATCH              : N                                               
STATS_ROW_MISMATCH            : N                                               
LITERAL_MISMATCH              : N                                               
FORCE_HARD_PARSE              : N                                               
EXPLAIN_PLAN_CURSOR           : N                                               
BUFFERED_DML_MISMATCH         : N                                               
PDML_ENV_MISMATCH             : N                                               
INST_DRTLD_MISMATCH           : N                                               
SLAVE_QC_MISMATCH             : N                                               
TYPECHECK_MISMATCH            : N                                               
AUTH_CHECK_MISMATCH           : N                                               
BIND_MISMATCH                 : N                                               
DESCRIBE_MISMATCH             : N                                               
LANGUAGE_MISMATCH             : N                                               
TRANSLATION_MISMATCH          : N                                               
ROW_LEVEL_SEC_MISMATCH        : N                                               
INSUFF_PRIVS                  : N                                               
INSUFF_PRIVS_REM              : N                                               
REMOTE_TRANS_MISMATCH         : N                                               
LOGMINER_SESSION_MISMATCH     : N                                               
INCOMP_LTRL_MISMATCH          : N                                               
OVERLAP_TIME_MISMATCH         : N                                               
EDITION_MISMATCH              : N                                               
MV_QUERY_GEN_MISMATCH         : N                                               
USER_BIND_PEEK_MISMATCH       : N                                               
TYPCHK_DEP_MISMATCH           : N                                               
NO_TRIGGER_MISMATCH           : N                                               
FLASHBACK_CURSOR              : N                                               
ANYDATA_TRANSFORMATION        : N                                               
INCOMPLETE_CURSOR             : N                                               
TOP_LEVEL_RPI_CURSOR          : N                                               
DIFFERENT_LONG_LENGTH         : N                                               
LOGICAL_STANDBY_APPLY         : N                                               
DIFF_CALL_DURN                : N                                               
BIND_UACS_DIFF                : N                                               
PLSQL_CMP_SWITCHS_DIFF        : N                                               
CURSOR_PARTS_MISMATCH         : N                                               
STB_OBJECT_MISMATCH           : N                                               
CROSSEDITION_TRIGGER_MISMATCH : N                                               
PQ_SLAVE_MISMATCH             : N                                               
TOP_LEVEL_DDL_MISMATCH        : N                                               
MULTI_PX_MISMATCH             : N                                               
BIND_PEEKED_PQ_MISMATCH       : N                                               
MV_REWRITE_MISMATCH           : N                                               
ROLL_INVALID_MISMATCH         : N                                               
OPTIMIZER_MODE_MISMATCH       : N                                               
PX_MISMATCH                   : N                                               
MV_STALEOBJ_MISMATCH          : N                                               
FLASHBACK_TABLE_MISMATCH      : N                                               
LITREP_COMP_MISMATCH          : N                                               
PLSQL_DEBUG                   : N                                               
LOAD_OPTIMIZER_STATS          : N                                               
ACL_MISMATCH                  : N                                               
FLASHBACK_ARCHIVE_MISMATCH    : N                                               
LOCK_USER_SCHEMA_FAILED       : N                                               
REMOTE_MAPPING_MISMATCH       : N                                               
LOAD_RUNTIME_HEAP_FAILED      : N                                               
-----------------                                                               

PL/SQL procedure successfully completed.


너무 많은 데이터때문에 분석하는 시간이 즐거운 시간이 아니라 고생스러운(주로 눈이) 시간이 되어 버린다. 하지만 다음과 같이 간단하게 이 문제를 해결할 수 있다. 

UKJA@ukja116> @shared_cursor 'select /* cursor_share */%'
SQL_TEXT                       = select /* cursor_share */ * from t1 where c1 = 
:b1                                                                             
SQL_ID                         = 2zu6xb9130t89                                  
ADDRESS                        = 2867E250                                       
CHILD_ADDRESS                  = 2DCB06D0                                       
CHILD_NUMBER                   = 0                                              
OPTIMIZER_MODE_MISMATCH        = Y                                              
--------------------------------------------------                              
SQL_TEXT                       = select /* cursor_share */ * from t1 where c1 = 
:b1                                                                             
SQL_ID                         = 2zu6xb9130t89                                  
ADDRESS                        = 2867E250                                       
CHILD_ADDRESS                  = 2DD0DB6C                                       
CHILD_NUMBER                   = 1                                              
BIND_MISMATCH                  = Y                                              
--------------------------------------------------                              
SQL_TEXT                       = select /* cursor_share */ * from t1 where c1 = 
:b1                                                                             
SQL_ID                         = 2zu6xb9130t89                                  
ADDRESS                        = 2867E250                                       
CHILD_ADDRESS                  = 2FABDDD8                                       
CHILD_NUMBER                   = 2                                              
--------------------------------------------------                              

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.04


이런 간단하지만 아름다운 결과들이 엔지니어라면 누구나 남을 한번쯤은 놀라게 할 만한 프로그래밍 실력이 필요한 이유이다. 



출처: http://ukja.tistory.com/232 [오라클 성능 문제에 대한 통찰 - 조동욱]

출처: http://ukja.tistory.com/232 [오라클 성능 문제에 대한 통찰 - 조동욱]

반응형
반응형


내부적으로 호출 시작은
dbms_stats.gather_database_stats_job_proc()


-- 11g의 기본 자동 수집 테스트는 아래로 조회 가능
select * from dba_autotask_client;

-- 내용 조회
select * from DBA_SCHEDULER_WINDOWS;

-- 각 요일별 윈도우 확인하고
WINDOW_NAME => MONDAY_WINDOW는 월요일

지금 문제가 되는 토,일의 byhour가 6으로 (기본)

업무시간중에 수행되면 안됨

-- 특정 테이블 통계 정보 수집 이력 조회
select * from dba_tab_stats_history
        where table_name = '테이블명'
          and to_char(stats_update_time, 'yyyymmdd') = '20171230'
;

 

/*
    -- 기본 토요일 repeat_interval 값
    freq=daily;byday=SAT;byhour=6;byminute=0; bysecond=0
*/
-- 토요일의 시간을 6 => 22시로 변경
-- 아래의 명령어는 Active 상태를 TRUE => FALSE 로 만듬
-- /as sysdba 로 접속
exec dbms_scheduler.close_window('SATURDAY_WINDOW');


-- 비활성화
exec dbms_scheduler.disable('SATURDAY_WINDOW');

-- 반복되는 시간 속성 설정
exec dbms_scheduler.set_attribute(name => 'SATURDAY_WINDOW', attribute => 'REPEAT_INTERVAL', value => 'freq=daily;byday=SAT;byhour=22;byminute=0; bysecond=0');

-- 지속되는 속성 설정
exec dbms_scheduler.set_attribute(name => 'SATURDAY_WINDOW', attribute => 'DURATION', value => '+000 04:00:00.000000000');

-- 활성화
exec dbms_scheduler.enable('SATURDAY_WINDOW');


-- 일요일 변경
-- 6 => 22시로 변경
-- 비활성화
exec dbms_scheduler.disable('SUNDAY_WINDOW');

-- 반복되는 시간 속성 설정
exec dbms_scheduler.set_attribute(name => 'SUNDAY_WINDOW', attribute => 'REPEAT_INTERVAL', value => 'freq=daily;byday=SUN;byhour=22;byminute=0; bysecond=0');

-- 지속되는 속성 설정
exec dbms_scheduler.set_attribute(name => 'SUNDAY_WINDOW', attribute => 'DURATION', value => '+000 04:00:00.000000000');

-- 활성화
exec dbms_scheduler.enable('SUNDAY_WINDOW');


-- 최종 내용 조회
select * from DBA_SCHEDULER_WINDOWS;

반응형
반응형


기본적으로 ide 방식으로 할때 크기 조정


윈도우 사용자 : Administrator

가상시스템명 : 순수XP


아래 경로에 파일이 존재

C:\Users\Administrator\VirtualBox VMs\순수XP


cd를 통한 디렉토리 이동


1. 파일사이즈 조정 (15360 MB 이므로 -> 15GB임)

   - 순수XP.vdi 파일의 크기를 15GB로 함.


"C:\Program Files\Oracle\VirtualBox\VBoxManage" modifyhd 순수XP.vdi --resize 15360


2. 디스크 파일 복사


  - xp.vdi 파일을 xp_clone.vdi로 복제


"C:\Program Files\Oracle\VirtualBox\VBoxManage" clonehd xp.vdi xp_clone.vdi


  - uuid값이 동일하면 안되니 복사한 xp_clone.vdi 파일의 uuid 변경


"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" internalcommands sethduuid xp_clode.vdi

반응형
반응형


오늘 인터넷 신문을 읽던 중...


정리정돈 잘 하는 아이로 키우는 노하우


위 내용을 공유하고 싶어

주소를

http://media.daum.net/life/living/wedding/newsview?newsId=20130112095804268&RIGHT_LIFE=R10

복사했으나

어라... SMS 80바이트 초과로... 후덜덜... 그리고 이걸 받는 사람도

너무 길어 !

이럴것이다..

그래서 생각한 것이

그렇다면

위 주소를 줄일 순 없을까....  있다 !!!

방식은

1. 웹페이지를 방문하여(짧게 변경해주는 웹페이지) 
    긴 주소를 입력하면 짧게 변경해 주는 방식

2. 크롬(구글에서 나오는 웹 브라우져)에 Plug-IN을 설치하여 짧게 줄여주는 방식(추천)

1번 방식
  가능한 웹사이트
  -> http://goo.gl
  -> http://durl.kr

두가지 주소 모두 짧게 변경 가능하다...

단,

난 구글을 사랑하니깐... 구글을 기준으로 설명한다.

아래는 goo.gl을 방문한 내역이다.

Paste your long URL Here : 밑에 실제 긴 주소를 입력후 Shorten URL을 눌러 짧게 변환한다.

변환된 내용은 그 하단에 목록형태로 나타나면,

Detail을 누르면 QR 코드 정보까지 보여집니다.




즉, 짧은 주소를 만들고 난 뒤 QR로 전송도 가능합니다.

Details 을 누르면 화면




2. Plug-IN 설치하는 방식


  - 첫번째로는 크롬을 설치합니다 -> 다음이나 구글에서 검색하여 설치 가능합니다.

  

  - 두번째는 확장 기능(Plug-IN)을 설치하는 주소를 방문합니다.


    https://chrome.google.com/webstore/category/extensions?hl=ko





좌측 상단에 확장 프로그램 검색에 URL을 입력하고 엔터




goo.gl URL Shortener 에서


우측에 +CHROME에 추가를 눌러 설치하면 됩니다.




설치 후 우측상단에 아이콘을 누르면


현재 방문한 주소를 짧게 변경된 정보가 나오며


Copy 는 클립복사 기능 (Ctrl + V를 통해 원하는 곳에 붙이기 가능하며)


QR Code를 누르면 QR 코드 이미지가 바로 화면에 보입니다



반응형

+ Recent posts