2016년 12월 27일 화요일

파일삭제

1. rm
 -r : 해당 폴더안에 있는 모든 파일들까지 같이 삭제하고 자기자신 즉 폴더까지 삭제하는 옵션
 -i : 각 파일들이나 폴더를 삭제할 때 삭제할 것인가를 묻도록 하는 옵션
 -f : 파일이 있든 없든 오류를 표출하지 않고 무조건 삭제하는 옵션

rm -rf [디렉토리명] // 리눅스 디렉토리(하위 디렉토리, 파일 포함)를 삭제
rm -rf * // 현재 디렉토리의 모든 것을 삭제



2. rmdir
  rmdir은 디렉토리만 삭제하는 명령으로 디렉토리 안에 파일이 존재하는 경우 디렉토리가 삭제되지 않습니다. 따라서, rmdir을 사용하시려면 디렉토리안을 먼저 삭제하신후에 해당 명령을 사용하여 디렉토리를 삭제해야 합니다.

rmdir [디렉토리명]

2016년 12월 15일 목요일

wait_timeout관련


*디폴트 타임아웃 확인
show variables like '%timeout';

*정보 설명
connect_timeout  :  MySQL 서버 접속시에 접속실패를 메시지를 보내기까지 대기하는 시간

delayed_insert_timeout  :  insert시 delay될 경우 대기하는 시간

innodb_lock_wait_timeout  :  innodb에 transaction 처리중 lock이 걸렸을 시 롤백 될때까지 대기하는 시간.
innodb는 자동으로 데드락을 검색해서 롤백시킨다.

innodb_rollback_on_timeout  :  innodb의 마지막 구문을 롤백시킬지 결정하는 파라미터.
timeout은 진행중인 transaction을 중단하고 전체 transaction을 롤백하는 과정에서 발생한다.

interactive_timeout  :  활동중인 커넥션이 닫히기 전까지 서버가 대기하는 시간

net_read_timeout  :  서버가 클라이언트로부터 데이터를 읽어들이는 것을 중단하기까지 대기하는 시간

net_write_timeout  :  서버가 클라이언트에 데이터를 쓰는 것을 중단하기까지 대기하는 시간

slave_net_timeout  :  마스터/슬레이브로 서버가 클라이언트로부터 데이터를 읽어들이는 것을 중단하기까지 대기하는 시간

table_lock_wait_timeout  :  테이블 락을 중단하기까지 대기하는 시간

wait_timeout  :   활동하지 않는 커넥션을 끊을때까지 서버가 대기하는 시간

* Solution.

1) autoreconnect=true // 트랜잭션 오류 가능성있음
- 커넥션이 끊어지면 자동 재접속
jdbc:mysql://(host):(port)/(db_name)?autoReconnect=true
ex) jdbc:mysql://127.0.0.1:3306/seoulnetworks?autoReconnect=true

2) validationQuery 사용 //추천
-Mysql
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="${jdbc.driverClassName}"/>
  <property name="url" value="${jdbc.url}"/>
  <property name="username" value="${jdbc.username}"/>
  <property name="password" value="${jdbc.password}"/>
  <property name="validationQuery" value="select 1"/>
 </bean>

- Oracle
validationQuery="select 1 from dual"





Mysql캐릭터셋확인 및 변경

* 캐릭터셋 확인

#database 확인
SELECT default_character_set_name FROM information_schema.SCHEMATA S
WHERE schema_name = "mydb";

#table 확인
SELECT CCSA.character_set_name FROM information_schema.`TABLES` T,
       information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA
WHERE CCSA.collation_name = T.table_collation
  AND T.table_schema = "mydb"
  AND T.table_name = "mytable";


#column 확인
SELECT character_set_name FROM information_schema.`COLUMNS` C
WHERE table_schema = "mydb"
  AND table_name = "mytable"
  AND column_name = "mycolumn";

#Show 명령어 사용(추천)
SHOW FULL COLUMNS FROM mytable;

*캐릭터셋 변경

#데이터베이스 디폴트 캐릭터셋 변경
alter database [dbname] DEFAULT CHARACTER set utf8;

#utf-8일때는 utf8 , utf8_general_ci
ALTER TABLE 테이블명 MODIFY COLUMN 컬럼 VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci

#euc-kr일때는 euckr , euckr_korean_ci
ALTER TABLE 테이블명 MODIFY COLUMN 컬럼 VARCHAR(255) CHARACTER SET euckr COLLATE euckr_general_ci


#테이블의 모든 컬럼의 charset 를 변경할 경우
alter table 테이블명 convert to character set utf8;
alter table 테이블명 convert to character set euckr;




mysql캐릭터셋확인

mysql charater set

* character set 확인
mysql> show variables like 'c%';


* my.cnf 수정
[root@localhost local]# vi /etc/my.cnf


[client]
#추가
default-character-set = utf8

[mysqld]
#추가
init_connect= SET collation_connection = utf8_general_ci
init_connect= SET NAMES utf8
default-character-set = utf8
character-set-server = utf8
collation-server = utf8_general_ci

[mysqldump]
#추가
default-character-set = utf8

[mysql]
#추가
default-character-set = utf8

* mysql 재시작
[root@localhost local]# service mysqld restart

mysqld 를 정지 중:                                         [  OK  ]
mysqld (을)를 시작 중:                                     [  OK  ]
[root@localhost local]#

2016년 12월 6일 화요일

ORA-12516

Problem
ORA-12516: TNS:리스너가 프로토콜 스택과 일치하는 처리기를 찾을 수 없습니다.

Cause
Oracle DB를 이동하여 Application을 가동하다 보면 위와 같은 Message와 마주칠 수 있습니다.

이는 동시 처리 가능한 Processes parameter 값을 초과했기 때문에 더 이상 Session을 연결할 수 없다는 message입니다.

Resolution
Processes parameter 값을 변경해주면 됩니다.

1. Oracle에 접속합니다.

<oracle @ oracle ~># sqlplus / as sysdba


2. Processes parameter 값을 확인합니다.

  1) show parameter를 이용하는 방법

SQL > show parameter processes;

NAME                                   TYPE     VALUE
-------------------------------------------------
aq_tm_processes               integer      1
db_writer_processes           integer      1
job_queue_processes          integer     10
log_archive_max_processes  integer      2
processes                          integer    150

  * 현재 동시 처리 가능한 Processes 값은 150입니다.

  2) select 문을 사용하는 방법

SQL > select * from v$resource_limit

RESOURCE_NAME CURRENT_UTILIZATION MAX_UTILIZATION INITIAL_ALLOCATION LIMIT_VALUE
processes                119 150        150        150
sessions                 76 166        256        256
enqueue_locks         90 256       3350       3350
enqueue_resources 48 145       1344  UNLIMITED
ges_procs                 0 0          0          0
ges_ress                 0 0          0  UNLIMITED
ges_locks                 0 0          0  UNLIMITED
ges_cache_ress           0 0          0  UNLIMITED
ges_reg_msgs         0 0          0  UNLIMITED
ges_big_msgs         0 0          0  UNLIMITED
ges_rsv_msgs           0 0          0          0
gcs_resources           0 0          0          0
gcs_shadows         0 0          0          0
dml_locks               2 2       1124  UNLIMITED
temporary_table_locks 0 111  UNLIMITED  UNLIMITED
transactions         1 1        281  UNLIMITED
branches                 0 0        281  UNLIMITED
cmtcallbk                 0 10        281  UNLIMITED
max_rollback_segments 12 36        281      65535



  * 첫 번째 줄의 processes에서 가장 오른쪽이 Limit 값입니다.

3. Processes parameter 변경

SQL > alter system set processes = 500 scope = spfile;
System Altered.


동시에 처리 가능한 Process의 숫자를 500개로 증가시켰습니다.

4. DB 재시작

SQL > shutdown immediate

Database closed.
Database dismounted.
Oracle instance shut down.

SQL > startup

ORACLE instance started.

Total System Global Area 219223120 bytes
Fixed Size 451664 bytes
Variable Size 201326592 bytes
Database Buffers 16777216 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.

설정 값 적용을 위해 DB를 재시작합니다.


5. 설정 적용 확인

2번에서 알려드린 QUERY 문으로 확인하시면 설정이 변경 된 것을 알 수 있습니다.