TISTORY 에서 SyntaxHighlighter 사용하기.

블로그 특성상 소스 코드를 자주 올리게 되는데, 보기 좋게 올리기 위해 
SyntaxHighlighter 를 사용하기로 했다.

1. SyntaxHighlighter 다운 받기.
    http://alexgorbatchev.com/SyntaxHighlighter/ 에서 다운 받는다.
    포스팅 당시 최신 버전은 3.0.83 이었다.
    다운로드 받아 압축을 풀면 아래와 같이 있는데, 
    필요한 파일은 styles, scripts 디렉토리에 있는 것들이다.


2. 필요한 파일을 UPLOAD.
   TISTORY 관리자 페이지에 로긴해서, [ 스킨 ] / [ HTML/CSS편집 ] / [ 파일 업로드 ] 화면에서
   필요한 파일을 모두 올린다. 
   필요한 파일은 압축푼 파일 중에 styles, scripts 디렉토리 밑에 있는 모든 파일이다.


   올려진 파일을들 보면, images 디렉토리 밑으로 올라간 것을 알 수 있다.

3. TISTORY 스킨 파일 편집.
   [ 스킨 ] / [ HTML/CSS편집 ] / [ HTML/CSS 편집 ] 화면에서 skin.html 파일에 내용을 편집한다.
   


    밑줄에 아래의 내용을 추가한다.
























  
   위 내용 처럼 압축을 풀었을때 경로가 아닌, 파일이 올라간 images로 경로를 바꾸어야 한다.

   두번째 "shThemeEmacs.css" 파일은 보여줄 테마를 지정한 것이다.
   테마 css 파일을 이것저것 지정해보고 마음에 드는 것으로 결정하면 된다.
   (사실 맘에 쏙 드는 것이 없었는데. Emacs 테마가 가장 나은 것 같다.)

   동일한 방법으로 skin.html 파일 가장 하단 </body> 위쪽에 아래와 내용을 넣어 준다.



     여기서 필요한 코드는 맨 밑줄 함수 실행부 이고, 그외 설정 부분이다.
     stripBrs를 true로 설정하면, TISTORY 에서 자동으로 <br> 태그를 붙이는 걸 무시 할 수 있다.

   4. TISTORY에서 글쓰기.
     글을 쓸때에는 소스 코드가 들어갈때는 html 모드에서 글을 써야한다.


   위와 같이 html 체크박스를 체크하면, html 모드에서 글을 입력할 수 있다.
   소스 코드를 넣을때 아래와 같은 문법으로 넣는다.

<pre class="brush: sql">
CREATE TABLE CVS_COMMIT
(
   SEQ              NUMBER(10) NOT NULL,
   USERID           VARCHAR2(20) NOT NULL,
   REG_DATE         DATE DEFAULT SYSDATE,
   PROJECT          VARCHAR2(50) NOT NULL,
   FILENAME         VARCHAR2(500) NOT NULL
);
</pre>
    
  소스의 내용은 <pre></pre> 태그 사이에 넣어주고, class의 brush 속성에 원하는 문법을 지정한다.
  지정 가능한 문법은 아래와 같다. 
ActionScript3 as3, actionscript3 shBrushAS3.js
Bash/shell bash, shell shBrushBash.js
ColdFusion cf, coldfusion shBrushColdFusion.js
C# c-sharp, csharp shBrushCSharp.js
C++ cpp, c shBrushCpp.js
CSS css shBrushCss.js
Delphi delphi, pas, pascal shBrushDelphi.js
Diff diff, patch shBrushDiff.js
Erlang erl, erlang shBrushErlang.js
Groovy groovy shBrushGroovy.js
JavaScript js, jscript, javascript shBrushJScript.js
Java java shBrushJava.js
JavaFX jfx, javafx shBrushJavaFX.js
Perl perl, pl shBrushPerl.js
PHP php shBrushPhp.js
Plain Text plain, text shBrushPlain.js
PowerShell ps, powershell shBrushPowerShell.js
Python py, python shBrushPython.js
Ruby rails, ror, ruby shBrushRuby.js
Scala scala shBrushScala.js
SQL sql shBrushSql.js
Visual Basic vb, vbnet shBrushVb.js
XML xml, xhtml, xslt, html, xhtml shBrushXml.js

첫번째 컬럼이 문법, 두번째 컬럼이 brush에 지정할 속성 상수, 
세번째 컬럼이 필요한 Javascript 파일로써 TISTORY에 UPLOAD되어 있어야 한다.

문법 뿐 아니라 추가 속성을 지정할 수 있는데, 아래와 같이 ";" (세미콜론) 로 구분한다.

<pre class="brush: js; ruler: true; first-line: 10; highlight: [2, 4, 6]">...</pre>

지정 할 수 있는 속성 목록은 아래와 같다.
속성
기본값
설명
auto-links true URL을 클릭하면 페이지 이동이 가능하도록
하이퍼링크를 자동으로 걸어준다.
class-name '' 그외 사용자 지정 class를 추가하고 싶을때 사용한다.
collapse false "펼치기" 기능을 사용하고 싶을 때
(티스토리의 "더보기" 기능이 더 나은것 같다)
first-line 1 시작 Line Number를 지정한다.
gutter true Line Number를 켜고 끌수 있다.
highlight null 강조할 라인을 배열로 넘긴다.
(예 : "brush: plain; highlight: [1, 3]")
html-script false php, asp, jsp 등과 같이 소스 코드안에 html이 포함되는 경우
html도 하이라이팅하고 싶으면 사용한다
smart-tabs true 스마트탭 기능의 활성화 여부를 지정한다
(무슨 기능인지 잘 모르겠다)
tab-size 4 TAB 크기를 지정한다.
toolbar true 툴바를 켜거나 끌 수 있다.

이제 TISTORY에서 깔끔한 코드를 볼 수 있다.

<주의 사항>
-. SyntaxHighlighter 3.0.83 버전에 버그가 하나 있다.
   일부 코드에 대해 Line Number가 어긋나 보이는 경우가 있다.
   한 Line 에 긴 코드가 포함된 경우 wrapped(자동줄바꿈) 처리를 하면서 잘못 처리하는 것 같다.
   소스 코드를 무조건 올리지 말고, 적당히 줄바꿈 처리를 해주고 올리는 것이 좋다. 
-. html모드에서 <pre></pre> 태그를 사용할 경우 소스 코드에 포함된 "<", ">"의 파싱을 잘못하는
   경우가 발생하는 것 같다. 
   소스 코드를 올리기 전에 "<"를 "&lt;"로, ">"를 "&gt;"로 변환 해서 올리는 것이 좋다. 





CVS Commit 로그를 남겨보자

-. 요구사항 파악 및 설계

적용 패키지 작성을 위해 수정된 파일 목록을 추출 할 방법을 찾아 보기로 했다.
업무 때문에 소스 관리를 CVS 로 하고 있다. CVS의 단점은 개별 파일이력은 확인 할 수 있는데, 
수정된 파일 목록을 뽑기가 쉽지 않다는 것이다.

구글링을 해보니 CVS에서 Commit 시점에 뭔가 처리할 수 있다는 것을 알았다.

먼저, CVS 서버에 접속해서 저장소의 CVSROOT 디렉토리를 보자

-rwxrwxr-- 1 cvs cvs       544  4월 22 09:23 checkoutlist

-rwxrwxr-- 1 cvs cvs       694  3월 21  2009 checkoutlist,v

-rwxrwxr-- 1 cvs cvs       882  4월 26 16:03 commitinfo

-rwxrwxr-- 1 cvs cvs       959  3월 21  2009 commitinfo,v

-rwxrwxr-- 1 cvs cvs       993  3월 21  2009 config

-rwxrwxr-- 1 cvs cvs      1192  3월 21  2009 config,v

-rwxrwxr-- 1 cvs cvs       602  2월  8 16:32 cvswrappers

-rwxrwxr-- 1 cvs cvs       801  3월 21  2009 cvswrappers,v

-rwxrwxr-- 1 cvs cvs      1025  3월 21  2009 editinfo

-rwxrwxr-- 1 cvs cvs      1224  3월 21  2009 editinfo,v

-rwxrwxr-- 1 cvs cvs 292081967  4월 29 18:14 history

-rwxrwxr-- 1 cvs cvs      1245  4월 21 11:32 loginfo

-rwxrwxr-- 1 cvs cvs      1367  3월 21  2009 loginfo,v

-rwxrwxr-- 1 cvs cvs      1151  3월 21  2009 modules

-rwxrwxr-- 1 cvs cvs      1350  3월 21  2009 modules,v

-rwxrwxr-- 1 cvs cvs       564  3월 21  2009 notify

-rwxrwxr-- 1 cvs cvs       763  3월 21  2009 notify,v

-rwxrwxr-- 1 cvs cvs       640  4월 25 12:43 passwd

-rwxrwxr-- 1 cvs cvs       649  3월 21  2009 rcsinfo

-rwxrwxr-- 1 cvs cvs       848  3월 21  2009 rcsinfo,v

-rwxrwxr-- 1 cvs cvs       879  3월 21  2009 taginfo

-rwxrwxr-- 1 cvs cvs      1078  3월 21  2009 taginfo,v

-rwxrwxrw- 1 cvs cvs       187 11월 10 17:15 val-tags

-rwxrwxr-- 1 cvs cvs      1026  3월 21  2009 verifymsg

-rwxrwxr-- 1 cvs cvs      1225  3월 21  2009 verifymsg,v


위와 같은 파일들을 볼 수 있는데.. 
여기서 commitinfo 란 파일이 CVS에서 Commit 하기 바로전에 실행되는 파일이다.

방향은 정해졌다. 
작업 구성은 아래와 같은 순서로 하기로 했다.

     1. CVS가 Commit 되는 시점에 파일명을 DB에 저장한다.
         -> CVSROOT/commitinfo에 등록할 쉘 스크립트를 작성.
     2.  저장된 DB를 조회할 간단한 WEB Page 제작
         -> 평소 관심을 갖고 있던, jQuery를 이용.

[ 1. CVS가 Commit 되는 시점에 파일명을 DB에 저장한다 ]

commitinfo 파일에 아래와 같이 내용을 추가 한다.

$ vi CVSROOT/commitinfo 

ALL /home/cvs/myproject/CVSROOT/cvscommitlog.sh 


DB에 테이블을 생성 한다.

CREATE TABLE CVS_COMMIT
(
   SEQ              NUMBER(10) NOT NULL,
   USERID           VARCHAR2(20) NOT NULL,
   REG_DATE         DATE DEFAULT SYSDATE,
   PROJECT          VARCHAR2(50) NOT NULL,
   FILENAME         VARCHAR2(500) NOT NULL
);

* index는 REG_DATE, TO_CHAR(reg_date, 'YYYY/MM/DDHH24:MI'), USERID, PROJECT 를 걸었다.

commitinfo 파일이 실행할 쉘스크립트를 작성한다.

#!/bin/sh
export ORACLE_BASE=/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORACLE_SID=ORACLE_SID
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_OWNER=oracle
export LANG=c
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib;

DATE=`date "+%Y-%m-%d %H:%M:%S"`
DT=`date "+%Y%m%d"`
LOG_FILE="/home/cvs/cvs_log/commit.$DT.log"
DIR=$1
USER=$USER
PROJECT=`echo $DIR | cut -d/ -f4`
#(echo ""; id;) >> $LOG_FILE
shift
for file in $*
do
    echo "$PROJECT, $USER, $DATE, $DIR/$file" >> $LOG_FILE
        result=`$ORACLE_HOME/bin/sqlplus oracle_user/oracle_pwd@oracledb <<EOF 
        INSERT INTO CVS_COMMIT 
        VALUES ( (SELECT NVL(MAX(SEQ), 0) +1 FROM CVS_COMMIT), 
                       '$USER', TO_DATE('$DATE', 'YYYY-MM-DD hh24:mi:ss'), 
                       '$PROJECT', '$DIR/$file');
        COMMIT;
        EOF
        `
done



[ 2.  저장된 DB를 조회할 간단한 WEB Page 제작 ]
jsp 파일 하나와 html파일 하나로 이루어졌고, jQuery와 JSON을 이용 했다.
DATE Picker는 jQuery Plugin 중에 하나를 이용했다.




iPhone 4.3.1 완탈후 mobileterminal 설치 방법.

iPhone 4.3.1 완탈 후 몇몇 시디아 어플이 정상적으로 설치가 되지 않았다.

iFile, SBSettings, mobileterminal 등이 설치를 하려면, 
다른 툴들과의 종속성 에러가 발생하는 것이다. ( DEPENDS xxxxx )

Cydia / Manage / Sources 에서 불필요해 보이는 소스를 삭제하니 정상적으로 설치가 되었다.
소스 아이콘이 ?(물음표) 로 나오는 것 위주로 삭제하니 되었다.

필요한 어플들을 설치 하기는 했는데, 
mobileterminal 을 실행하면 바로 죽어버린다.

구글링을 해보니, 소스에 [ http://www.ijailbreak.com/repository/ ]를 추가하고,
시디아를 Refresh하면, upgrade를 진행한다.

터미널을 띄우면 정삭으로 동작한다.

[ 참조 ]
http://www.ijailbreak.com/cydia/learn-how-to-install-mobileterminal-for-up-to-the-ios-4-3-1-firmware-mobileterminal-520-1/ 
http://www.ijailbreak.com/cydia/introducing-the-official-ijailbreak-repository/
http://tiny2n.tistory.com/80

내 인생을 하루로 계산 하면..

김난도 교수의 "아프니까 청춘이다" 라는 책에 보면 "인생 시계"라는 말이 나온다.
평균 수명 80살을 하루로 계산해서,  1년을 18분 쯤으로 계산 한 것인데..

내 인생 나이는 얼마나 될까?
내 인생은 오전 10시 43분 이란다.

인생 시간을 계산 해보자.

http://host.newtype.pe.kr/1day/ 

  
jQuery를 이용했고,
테스트를 해보니, 약간의 오차가 있는 듯 하다.
 


allow_url_fopen off 일때, proxy 구현 방법.

jQuery에 관심이 생기면서, javascript 만으로 RSS 리더기를 만들어 보기로 했다.
jQuery가 워낙에 많은 Plugin들을 지원하고 있어서, rss Parser도 금방 찾을 수 있었다.
jFeed 라는 것인데, 소스도 간단하고.. 복잡한 기능이 필요없는 용도로는 적당했다.

그런데, 예상치도 못한 문제가 있었다.
Ajax에서 다른 도메인의 페이지를 읽기 위해 proxy를 구현 해야 하는데..
셈플 소스에 포함된 것이 정상적으로 동작하지 않는 것이다.

셈플 소스에 포함된 코드는 아래와 같다.
<?php
header('Content-type: application/xml');
$handle = fopen($_REQUEST['url'], "r");

if ($handle) {
    while (!feof($handle)) {
        $buffer = fgets($handle, 4096);
        echo $buffer;
    }
    fclose($handle);
}
?>

원인은 호스팅을 받고 있는 cafe24 에서는 보안상의 이유로 php.ini 파일에서 fopen 함수의 사용을 막아 놓은 것이다.



업체에서 제안하는 방법은, fsockopen 이용하는 방법으로 셈플 소스는 아래와 같다.
function get_url_fsockopen( $url ) {
	$URL_parsed = parse_url($url);

	$host = $URL_parsed["host"];
	$port = $URL_parsed["port"];
	if ($port==0)
		$port = 80;

	$path = $URL_parsed["path"];
	if ($URL_parsed["query"] != "")
		$path .= "?".$URL_parsed["query"];

	$out = "GET $path HTTP/1.0\r\nHost: $host\r\n\r\n";

	$fp = fsockopen($host, $port, $errno, $errstr, 30);

	if (!$fp) {
		echo "$errstr ($errno)<br>\n";
	} else {
		fputs($fp, $out);
		$body = false;
		while (!feof($fp)) {
			$s = fgets($fp, 128);
			if ( $body )
			$in .= $s;
			if ( $s == "\r\n" )
			$body = true;
		}

		fclose($fp);
		echo $in;
	}
}

하지만,  이방법도.. connection, write는 성공하지만, read 부분에서 데이터를 가져오질 못했다.
업체 문의 결과, www 폴더안에 ".htaccess" 파일을 만들고 파일 내용으로, 
php_flag allow_url_fopen 1

를 넣어 주면 된다고 한다. 단, 취약점을 통한 보안적 위험에 대한 책임을 보장할 수 없단다.
왠지 찝찝하다. 

좀 더 뒤져보니, curl 이란 php 라이브러리가 있다. 이넘이 물건이다. 좀 잡다한 기능들이 많아 무거워 보이긴 한데.. 일단 동작은 잘 된다.

curl 라이브러리를 이용한 소스는 아래와 같다.
<?php

function get_url_content($url) {

	$ch = curl_init();

	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
	curl_setopt($ch, CURLOPT_HEADER, true);
   
	$html = curl_exec($ch);  
	$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);  
  
  	$inc=1;
	while ($http_code == 301 || $http_code == 302)
	{
		$header = curl_getinfo($ch, CURLINFO_HEADER_OUT);
		curl_close($ch);

		list($header, $html) = explode("\n\n", $html, 2);
		preg_match('/Location: (.*?)\n/', $header, $matches);
		$url = $matches[1];
		if (strlen(trim($url)) <= 0 )
			return "[".$http_code."] forwarding error, not found url.<br/>";

		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL,$url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		$html = curl_exec($ch);
		$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

		if ( $inc++ > 5 ) {
			curl_close($ch);
			return "to many forwarding...<br/>";
		}
	}

	curl_close($ch);

	return substr($html, strpos($html, '<?xml'));;
}

echo get_url_content( $_REQUEST['url'] );

?>

소스의 기능은 아래와 같다.
   
    1. HTTP CODE가 301, 302의 Forwarding 관련된 것이면 해당 URL로 이동.
        : CURLOPT_HEADER 옵션, while문 안의 해더 파싱 부분.
    2. Forwaring이 5번 이상이면, 에러 처리.
        : while문 안의 if문 
    3. HTTP 해더 부분 제거.
        : return 전의 substr 구문. rss 리더를 위한 proxy 이므로 필요 하다.

마지막 소스를 이용해 proxy 문제를 해결 했다.

JQuery를 이용한 둥근 테두리 테이블 만들기

웹눈 님의 Round Table 소스를 JQuery를 이용하는 소스로 수정해봤습니다.

JQuery를 요 몇일 보고 있는데, 재미있네요..
이제 막 시작한 단계로 더 깔끔하게 다듬을 수 있을 것도 같은데..
아직은 내공이 부족하네요.

좋은 방법 있으면 공유 해주시면 고맙겠습니다.

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script>
function roundTable(objID) {
	var $obj = $("table#" + objID);
	var s, r;
	var y, x, MAX;
	var w, h;

	r = parseInt($obj.attr('radius'));
	if (r == null || r < 1) r = 1;
	else if (r > 6) r = 6;

	MAX = r * 2 + 1;

	$obj.before("<TABLE id='tmpRoundTbl'></TABLE>")
	$("table#tmpRoundTbl")
		.attr("cellSpacing", 0)
		.attr("cellPadding", 0)
		.append("<TBODY></TBODY>");

	for (y=0; y < MAX; y++) {
		$("table#tmpRoundTbl TBODY").append("<TR></TR");
		s = Math.abs(y - parseInt(r));
		for (x=0; x < MAX; x++) {
			
			$("table#tmpRoundTbl TBODY TR:eq("+y+")")
				.append("<TD></TD>");

			w = '1px'; h = '1px';
			if (x == 0 || x == MAX - 1) h = null;
			else if (y == 0 || y == MAX - 1) w = null;
			else if (r > 2) {
				if (Math.abs(x - r) == 1) w = '2px';
				if (Math.abs(y - r) == 1) h = '2px';
			}

			if (w != null) 
				$("table#tmpRoundTbl TBODY TR:eq("+y+") TD:eq("+x+")")
					.css("width", w);
			if (h != null) 
				$("table#tmpRoundTbl TBODY TR:eq("+y+") TD:eq("+x+")")
					.css("height", h);

			if (s == x || s == MAX - x - 1) 
				$("table#tmpRoundTbl TBODY TR:eq("+y+") TD:eq("+x+")")
					.css("backgroundColor", $obj.attr('rborder') );
			else if (x > s && s < MAX - x - 1) 
				$("table#tmpRoundTbl TBODY TR:eq("+y+") TD:eq("+x+")")
					.css("backgroundColor", $obj.attr('rbgcolor') );
		}
	}

	$("table#tmpRoundTbl TBODY TR:eq("+s+") TD:eq("+r+")").append( $obj );
}
</script>


<table id="ta" width="300" height="100" border="0" 
    radius="3" rborder="#999999" rbgcolor="#F8F8F8">
<tbody><tr>
<td valign="top">테스트입니다</td>
</tr>
</tbody></table>
<span>
<script>roundTable("ta");</script>
</span>



[ 참고 ] 

iTunes 없이 iPhone에 음악 전송


나같은 경우 MacBook, 업무용 Notebook, 집 Desktop 이렇게 3개의 컴퓨터를 사용하고 있다.

MacBook에는 주소록과 사진, 집 Desktop에는 동영상, 업무용 Notebook에는 음악들을 
iPhone과 동기화 하고 싶은데, 이런xx!! iPhone은 하나의 iTunes에만 동기화가 가능하다.
( 시도 했다가, iPhone의 음악과 Apps를 몽창 말아 먹었다 ㅡㅡ; )

아직은 iTunes에 적응을 못해서 인지, 불편하기만 하다.

웹 서핑중 iTunes 없이 iPhone에 음악을 전송할 수 있는 어플이 있어서 소개 한다.


CopyTransManager라는 프로그램으로 무료다!

설치시 기본언어로 설치하면, 한글도 지원된다.

일단 업무용 Notebook을 이용하여, 앨범 생성도 해보고, 음악도 전송하여 봤는데.. 잘 된다. ^^
( iPhone 버전 4.1(8B117), iTunes 버전 10.0.1.22, CopyTransManager(Free) 버전 v0.924 )

웹을 통해 사용기를 훑어 보니, 이 어플을 사용했다가 iPhone을 초기화 했다는 글들이 보이는 걸로 봐서는 아직은 불안한 어플인것 같기도 하다. 



한글 변환기 ( Chrome Extensions )

크롬 확장 프로그램을 만들었습니다.
예전에 만들어준 한글 변환기 스크립트를 이용하여 만들었습니다.

한글 입력기가 설치되지 않은 환경에서 한글 입력이 가능 합니다.
1시간 미만으로 뚝딱 만든 건데, 대부분 시간이 아이콘 만드는 시간이었네요. ^^;

* History 
2010-04-23  한글 키보드 레이아웃 이미지 추가 ( 옵션에서 출력 여부 결정 )



오라클에서 조회한 결과를 Text 파일로 저장하기

SELECT 결과를 CSV 포멧으로 저장 하려면 아래와 같이 처리 한다.


sqlplus에 로긴 하여 위와 같이 입력하면, output.lst 파일에 원하는 내용이 저장된다.

다른 방법으로 파이프를 이용하는 방법이 있다.


쉘에서 이렇게 입력을 하면, 원하는 결과를 얻을 수 있다.

[출처]

오라클에서 다른 계정으로 데이터 마이그레이션 방법

오라클에서 다른 계정의 테이블을 Import 해오고자 한다.
테이블 이름만 동일하고 계정 및 테이블 스페이스가 다른 경우의 Import 과정이다.

oraid 계정에서 devdb 계정으로 Import 하는 과정을 설명한다.

1. Table Space 생성
SQL> CREATE TABLESPACE TS_DEV_DATA
DATAFILE '/home/dba/oradata/ts_dev_data.dbf' SIZE 2048M
AUTOEXTEND OFF;

SQL> CREATE TABLESPACE TS_DEV_IDX
DATAFILE '/home/dba/oradata/ts_dev_idx.dbf' SIZE 1024M
AUTOEXTEND OFF;

Data를 위한 TS_DEV_DATA아 Index를 위한 TS_DEV_IDX 를 생성 했다.
개발 목적의 테이블 스페이스 이므로 용량 자동 증가는 꺼두었다.

2. devdb 계정 생성 
SQL> CREATE USER devdb IDENTIFIED BY devdb
DEFAULT TABLESPACE TS_DEV_DATA
TEMPORARY TABLESPACE TEMP
QUOTA UNLIMITED ON TS_DEV_DATA;

SQL> GRANT CONNECT,RESOURCE TO FRDEV;

계정을 생성하고, 필요한 권한을 부여 했다.

3. Export
$ exp oraid/orapwd file=tbl_exp_20100201.dmp tables="tbl_test1, tbl_test2, tbl_test3" ignore=y

Source DB에 접속 하여 필요한 테이블을 Export 한다.

4. Table 생성
SQL> CREATE TABLE TBL_TEST1 
(
SEQ              NUMBER(10) NOT NULL,
CODE             VARCHAR2(10) NOT NULL,
DATA             VARCHAR2(20) NOT NULL
CONSTRAINT PK_TEST1
    PRIMARY KEY (SEQ) USING INDEX 
    TABLESPACE TS_DEV_IDX
)
TABLESPACE TS_DEV_DATA;

SQL> CREATE TABLE TBL_TEST2
 - 생략 - 
SQL> CREATE TABLE TBL_TEST3
 - 생략 - 

Export를 하게 되면 테이블 생성 정보까지 포함된다. 
그대로 Import 하게 되면, 새로 생성한 테이블 스페이스에 저장되는 것이 아니고, 
기존 테이블 스페이스에 저장 되므로 원하는 공간에 미리 테이블을 생성 해 둔다.

5. Import
$ imp oraid/orapwd fromuser=oraid touser=devdb file=tbl_user.dmp tables=tbl_user ignore=y

Import 받고자 하는 devdb 계정을 touser 파라미터로 지정한다.
테이블 생성시 발생하는 오류를 건너 뛰기 위해 ignore 파라미터를 추가한다.