DATOR


토탈커맨더에서 현재 폴더 위치로 babun 쉘 바로 사용하기

토탈커맨더에서 현재 폴더 위치 기준으로 babun 쉘을 바로 띄우고 싶을 때 아래과 같이 설정하면 된다.


/bin/env CHERE_INVOKING=%P /bin/zsh.exe


babun2.png


babun 쉘에 대해서 궁금한 사람은 아래 링크를 참조하세요.

http://babun.github.io/

Leave Comments

댓글 쓰기 권한이 없습니다. 회원 가입후에 사용 가능합니다

DB 접속 패스워드 관리 플러그인을 추천합니다.

본인은 업무 특성상 거의 대부분의 업무를 고객사에 상주하며 프로젝트를 진행하게 되는데,  SQL Query툴은 회사에서 제공해주는 툴을 쓰거나 고객사에서 제공해주는 툴을 사용하게 된다. 물론 회사에서 제공해주는 툴도 매우 훌륭하지만, 개인적으로 sqldeveloper를 애용하는 편이다. 오라클에서 공짜로 배포하는 툴인데다, 에디터 창의 자유로운 배치와 리포트 기능이 강력하여 매우 유용하게 사용하기 때문인데, 아쉽게도 회사에서 제공해주는 툴은 그런 기능이 없다. 이 기능은 별도로 소개하도록 하겠다.

최근엔 프로젝트를 진행하기 위해 고객사에 들어가 업무를 수행하다 되면 보안정책으로 인해 패스워드를 주기적으로 변경해야 하는 정책을 받게 마련이다. 프로젝트가 짧아서 한두번 변경한다면 상관이 없겠는데, 프로젝트가 장기간 진행되고 접속해야할 db 서버가 많을 경우에는(현재 진행하고 있는 프로젝트에는 접속 db만 10여개가 넘는다. 더군다나 계정별로 관리하자면.. -_-;;) 매번 패스워드 관리가 상당히 신경 쓰일 수 밖에 없고, 패스워드를 몇 번 잘못 입력하다보면 계정이 막혀서 난감한 경우가 생길 수 밖에 없다.
더군다나 동일한 패스워드를 사용하지 못하게까지 하는 경우도 있다보면.. 나름 패스워드를 엑셀로 관리해보기도 하지만 여간 귀찮은 문제가 아니다.

이런 경우에 매우 유용한 플러그인이 있어서 소개한다.
"Show Me Password" 라는 플러그인인데, 간단하지만 매우 유용하다.

주소 : http://show-me-password.tomecode.com/


showMePasswordSqlDeveloper4_win.png

Leave Comments

댓글 쓰기 권한이 없습니다. 회원 가입후에 사용 가능합니다

Groovy를 이용해 멀티스레드로 SQL 실행시키기

Groovy SQL을 둘러봤으니 이번엔 Groovy SQL을 이용해서 만든 스크립트 예제를 하나 보겠습니다. 
아래 Groovy 스크립트는 많은 수의 BR검증SQL에 대해서 멀티스레드를 이용해서 동시에 여러개의 SQL을 실행시키게 만든 스크립트입니다. 데이터베이스의 성능이 받춰주는 만큼 스레드 갯수를 조절해서 실행시키면 SQL이 끝나기를 기다리는 시간을 많이 줄일 수 있습니다. 스레드 갯수는 적절히 조절할 필요가 있습니다. 짧은 코드지만 꽤 다양하게 활용이 가능한 스크립트입니다.

import java.sql.*
import groovy.sql.Sql
import java.util.concurrent.*

/**
 * BR 검증SQL을 일괄 실행시켜서 결과값을 확인하기 위한 클래스이다.
 * 
 * @author hkwee
 * @since  2012-05-03
 */
class ExecBRSql{
	def THREADS = 5
	
	def url = "jdbc:oracle:thin:@127.0.0.1:1521:ora10g"
	def userid = "scott"
	def passwd = "tiger"
	def driver = "oracle.jdbc.driver.OracleDriver"
	
	static void main(String[] args) {
		def execBrSql = new ExecBRSql()
		execBrSql.execute()
	}
	
	private void execute() {
		def sql = Sql.newInstance(url, userid, passwd, driver)
		
		def queue = new ArrayBlockingQueue<String>(1000);
		def pool = Executors.newFixedThreadPool(THREADS)
		
		def nDq = """
				select dq_no, dq_table, br_sql 
				  from n_dq 	
				 order by dq_no
					"""
		
		sql.eachRow(nDq) { row ->
			def sqlDto = new SqlDto()
			sqlDto.no = row.dq_no
			sqlDto.sql = row.br_sql
			
			queue << sqlDto
		}
		
		def item = null
		
		while (item = queue.take()) {
			pool.execute(new ExecuteStatement(item))
			
			if (queue.size() == 0)
				break
		}
		
		pool.shutdown();
	}
}

class ExecuteStatement implements Runnable {
	
	def sqlDto = null	
	def ExecuteStatement(sqlDto) {
		this.sqlDto = sqlDto
	}
	
	@Override
	public void run() {
	def url = "jdbc:oracle:thin:@127.0.0.1:1521:ora10g"
	def userid = "scott"
	def passwd = "tiger"
	def driver = "oracle.jdbc.driver.OracleDriver"

		def sql = Sql.newInstance(url, userid, passwd, driver)			
		def THREAD_NAME = Thread.currentThread().getName()			
		def insertQuery = """insert into temp_n_dq (dq_no, col1, col2, col3, col4, col5, col6, col7, col8, col9, col10)
								values (?,?,?,?,?,?,?,?,?,?,?)"""										
		def vals = new Object[11]		
		try {
			println "[${THREAD_NAME}], ${sqlDto.no} - " + this.sqlDto.sql.replaceAll("\n", "")
			
			sql.query(sqlDto.sql) { rs ->
				vals = new Object[11]
				def meta = rs.metaData
				def isClean = true;
				vals[0] = sqlDto.no
				
				while(rs.next()){
					for (int i = 1; i <= (meta.columnCount > 10 ? 10 : meta.columnCount); i++) {
						vals[i] = rs.getString(i)
					}
					
					sql.executeUpdate(insertQuery, vals)
					isClean = false;
				}
				
				if (isClean) {
					vals[1] = "no data"
					sql.executeUpdate(insertQuery, vals)
				}
			}
		} catch (Exception e) {
			println "[${THREAD_NAME}], ${sqlDto.no} - error : ${e.message}"
			sql.executeUpdate(insertQuery, [sqlDto.no, e.message])
		} finally {
			sql.close()
			println "[${THREAD_NAME}], ${sqlDto.no} - finished .."
		}
	}
}

class SqlDto {
	def no
	def sql
}




Leave Comments

댓글 쓰기 권한이 없습니다. 회원 가입후에 사용 가능합니다