Outsider's Dev Story: Database/Oracle 카테고리 글 목록https://blog.outsider.ne.kr/Stay Hungry. Stay Foolish. Don't Be Satisfied.2024-03-15T13:54:29+09:00Textcube 1.10.7 : Tempo primo[Book] Inside SQL for BeginnerOutsiderhttps://blog.outsider.ne.kr/3062009-03-18T00:38:30+09:002009-03-17T23:36:38+09:00<DIV class=ttbReview>
<FIELDSET style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 10px; WIDTH: 90%; PADDING-TOP: 5px"><LEGEND><A class=aladdin_title href="http://www.aladdin.co.kr/shop/wproduct.aspx?ISBN=8996113514&ttbkey=ttboutsideris1727002&COPYPaper=1">Inside SQL for Beginner</A></LEGEND>
<TABLE>
<TBODY>
<TR>
<TD><A href="http://www.aladdin.co.kr/shop/wproduct.aspx?ISBN=8996113514&ttbkey=ttboutsideris1727002&COPYPaper=1"><IMG alt="" src="http://image.aladdin.co.kr/cover/cover/8996113514_1.jpg" border=0></A></TD>
<TD style="VERTICAL-ALIGN: top" align=left><A class=aladdin_title href="http://www.aladdin.co.kr/shop/wproduct.aspx?ISBN=8996113514&ttbkey=ttboutsideris1727002&COPYPaper=1">Inside SQL for Beginner</A> - <IMG alt=4점 src="http://image.aladdin.co.kr/img/common/star_s4.gif" border=0><BR>권순용.김규태 지음/(주)마소인터렉티브</TD></TR></TBODY></TABLE></FIELDSET><BR>월간마소의 메일을 받고는 홍보문구에 맘이 좀 와닿았던지 예판인가로 구입했었던 국내 서적입니다. 읽어본 느낌은 책 제목을 잘못지은게 아닌가 싶습니다. Inside SQL, 가장 쉬운 DB와 SQL 이야기, SQL 필독서... 이 책 표지에 써있는 문구들입니다. 하지만 <SPAN style="COLOR: rgb(204,153,0)">이 책은 오라클 책입니다.</SPAN> 별로 언급은 안하고 있지만 실제로 내용은 모두 오라클을 설명하고 있습니다. 물론 데이터베이스란게 ANSI라는 표준이 있기는 하지만 ANSI만 가지고 설명하기는 한계가 있기 때문에 아예 특정벤더의 데이터베이스를 표방하고 책을 만들던지 아니면 ANSI를 기준으로 설명하지만 설명의 용이성을 위해서 하나의 데이터베이스를 가지고 예를 들면서 설명하는 것이 일반적이라고 생각합니다.<BR><BR>하지만 이 책은 제목에서는 마치 모든 데이터베이스에 적용할 수 있는 지식을 가르쳐 줄듯 하지만 내용은 오라클로 철저하게 타겟팅 되어 있습니다. 데이터베이스에 대한 얘기가 주제가 아니라 SQL이 주제이기 때문에 더 정확히 말하자면 오라클의 SQL인 PL/SQL에 대해서 얘기하고 있습니다. 더 큰 문제는 그렇다는 걸 별로 언급하고 있지 않는다는 것입니다. 이 책에서는 아주 초반에 ANSI표준이 있지만 각 데이터베이스가 각자의 SQL을 가지고 있다고 살짝 설명했을 뿐 PL/SQL이라는 단어는 단 한번도 등장하지 않습니다. <BR><BR>초반에 이책이 오라클을 기준으로 설명하고 있다는 것을 충분히 주지시켜주어야 함에도 오라클이라는 단어도 몇번 등장하지 않고 특정 상황에서만 언급하기 때문에 전체 내용이 PL/SQL이지만 마치 언급한 부분만 오라클에 대한 얘기처럼 느껴질 정도입니다. 이건 이 책이 for beginner라는 이름이 붙었듯이 초급자 용이라는데 더 문제가 있다고 생각합니다. 초급자한테 다 설명한다는게 쉬운건 아니지만 자기가 익힌게 오라클용인지도 모르고 배운다면 문제가 아닐까 싶습니다. JOIN등등 설명하는게 전부 PL/SQL로 설명하고 있습니다.<BR><BR><BR><BR>책의 내용은 Insde SQL for Beginner이라는 제목대로 초급자 용입니다. <SPAN style="COLOR: rgb(204,153,0)">아주 기초적인 내용으로 채워져있고 제목대로 대부분 SQL사용법에 대한 설명과 함수에 대한 설명정도입니다.</SPAN> 사실 아는것과 그걸 전달하는 것은 쉽지 않은 거라고 생각은 하고 있습니다. 특히 잘 아는 사람이 잘 모르는 사람을 위해서 설명한다면 더욱 그렇습니다. 이 책의 저자는 타겟팅을 초급자용으로 하면서 너무 많은 것을 전달하고 싶었던 것이 아닐까 싶습니다. 그래서 오히려 설명이 산만한 느낌이 없잖아 있습니다. SELECT 쿼리를 처음 사용법을 설명하면서 굳이 언급하지 않아도 될 서브쿼리얘기를 꺼네면서 뒤에서 자세히 설명한다고 합니다. 이 서브쿼리에 대한 언급은 실제 서브쿼리설명페이지까지 3번이나 언급합니다. 서브쿼리 쓸수 있는데 뒤에서 설명할꺼라고.... 제가 책의 내용까지 검수하겠다는 건 아니지만 SELECT...FROM의 사용법을 설명하면서 고급기술을 또 언급해 버리니까 더 헷갈리겠다는 생각은 좀 들었습니다. <BR><BR><BR><BR>
<BLOCKQUOTE>이러한 상황 속에서 이 책의 원고를 살펴보니 SQL 기초부터 튜닝 및 설계 기본 개념까지 한 권으로 모두 익힐 수 있다는 점이 매우 반가울 따름이다.<BR>-(주)러닝스페이스(www.bpan.com)대표이사 최용호-<BR></BLOCKQUOTE>이 책의 뒤에 붙어있는 추천사중 일부를 발췌한 것입니다. 저분이 누군지는 잘 모르겠지만 저 추천사를 과연 책을 읽고나 작성한건가 싶은 생각이 들정도입니다. 이책은 SQL만 얘기하고 있지 디비 튜닝이나 설계같은건 전혀 언급도 안하고 있습니다. 하나도 안반갑다는 얘기죠. 책 기획의 의도랑 실제 책을 지으면서 나온 결과물과 매치가 안되지 않았나 싶은 생각도 해봅니다. 책 표지의 문구인 "DBA 10년의 노하우가 담긴 SQL필독서"라는 느낌은 전혀없습니다. SQL과 함수의 사용법만 설명할 뿐 노하우나 이 책에서만 전달하고 있는 특별한 내용같은 것은 별로 없었네요. <BR><BR><BR></DIV><p><strong><a href="https://blog.outsider.ne.kr/306?commentInput=true#entry306WriteComment">댓글 쓰기</a></strong></p>"ORA-01461:can bind a LONG value only for insert into a LONG column" 라는 오류메시지Outsiderhttps://blog.outsider.ne.kr/1622008-06-30T02:20:22+09:002008-06-30T02:14:43+09:00<P>Oracle 디비를 사용하면서 Java(JSP)쪽에서 Insert를 하는 상황에서 테이블에는 LONG타입이 전혀 없을 뿐더러 Varchar2를 사용하고 있는 컬럼에 영문만 넣으면 문제가 없는데 한글을 넣으려고 하면 저런 오류메시지가 나타난다.(바로바로 포스팅 해야되는데 좀 시간이 지나니까 정확한 오라클 버전이 기억안나네. ㅡ..ㅡ)<br /><br /><STRONG><FONT color=#ff9900>ORA-01461:can bind a LONG value only for insert into a LONG column</FONT></STRONG><br /><br />참으로 당황스럽던 오류메시지.... 의미만 보자면 Long타입 컬럼에는 Long값만 넣어라는 건데 LONG을 지정한 컬럼이 있어야 말이지... <br /><br />이게 머야 하면서 한참 찾았는데 해결책은 의외로 간단했던....<br /><br />JDBC의 버그문제이다. <br /><br /><FONT color=#99cc66>Oracle Database 10<I>g </I>Release 2 (10.2.0.1.0) JDBC Drivers</FONT> 에서 해결이 되었다. 링크는 <A href="http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc_10201.html" target=_blank>이 곳!!</A><br /><br />위 버전 JDBC의 <A href="http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/readme_10201.html" target=_blank>Read Me파일</A>을 보면 아래와 같은 내용이 나온다.</P><br />
<BLOCKQUOTE>BUG-4426152<br />KPRB driver throws ORA-01461 for OraclePreparedStatement.setCharacterStream() of 1MB or more data into database LONG and 4k byte into Varchar2 columns in one statement. <br /></BLOCKQUOTE>
<P>JDBC은 Release 2로 이상으로 교체해 주면 간단히 해결...</P><p><strong><a href="https://blog.outsider.ne.kr/162?commentInput=true#entry162WriteComment">댓글 쓰기</a></strong></p>Orange for Oracle에서 Loader 사용해서 데이터 입력하기Outsiderhttps://blog.outsider.ne.kr/1052008-01-31T10:12:09+09:002008-01-31T01:40:16+09:00처음에 오라클을 배울 때는 ISQLPLUS를 이용해서 디비작업을 했었는데 그때는 상당히 초기에 쿼리를 배우는 수준이었기에 그게 당연한줄 알았고 그렇게 어려운 쿼리도 날리지 않았는데 한참동안 MS-SQL을 사용하다가 보니까 엔터프라이즈 매니저에 익숙해져서 비쥬얼툴이 아닌 콘솔로 디비를 다루는 것이 여간 불편한게 아니었다. 거의 작업하기가 어려울 정도로....<br /><br />그래서 이것저것 찾아보았다. 툴은 여러가지가 있었다. 토드, 프리토드, 웹디벨로퍼등 이것저것.... 처음에는 이클립스에 DbEdit플러그인을 붙혀서 사용했는데 디비 확인을 위해서 항상 이클립스를 띄워야 하는 점과 프로그램이 아니라 플러그인이기 때문에 기능상의 부족함등으로 금새 털어버리고 Orange for Oracle이라는 툴을 현재 사용하고 있다.(제법 괜찮은것 같다. 내가 쓰는 기능은 아직 한정적이고 아직 손에 많이 익지는 않지만... 이런거 보면 EM이 참 좋단말야.. ㅎㅎ)<br /><br />이번에 프로젝트를 하다가 SQL Loader라는게 오라클에 있다는 걸 알게 되었다. 쉽게 말하자면 txt파일의 자료를 오라클로 올리는 것이다.(실제 로더는 ctl이나 dbf를 통해서 이런저런 작업을 하는 듯 하지만...) 상당히 쉬워서 편할 것 같다. 지난달에 MDB를 오라클로 올리느라고 삽질을 꽤 했는데.....<br /><br /><div class="imageblock left" style="float: left; margin-right: 10px;"><img src="//blog.outsider.ne.kr/attach/1/1224715087.jpg" alt="사용자 삽입 이미지" height="64" width="154" /></div>메뉴바에 보면 왼쪽과 같은 아이콘이 있다. Export, Import 옆에 Loader라는 녀석이 있다. Export와 Import는 DB 또는 Owner, table등을 통째로 dmp파일로 내보내거나 들여오는 것이고 Loader는 훨씬 유연한 데이터 로드기능을 지원하고 있다. 메뉴에서 [Tools] - [Loader]를 선택해도 동일하다. <br /><br />로더를 실행하면 아래와 같은 창이 뜬다.<br /><br /><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1296806202.jpg" alt="사용자 삽입 이미지" height="610" width="695" /></div>약간 보고 있자면 그리 어려운 구성은 아니다. SQL Loader를 명령어를 통해서 오라클로 실행하면 ctl파일을 통해서 txt를 불러들이는데(검색해 보면 많이 나온다.) 여기서는 그냥 txt를 불러서 로드할 수 있다. [1] 부분에서 Owner와 원하는 테이블을 선택해 주고 [2]에서 TXT파일을 불러온다. <br /><br />TXT파일은 다양한 형태가 될 수 있는데 가장 기본적인게 탭이나 콤마(,)를 통해서 구분을 지어주는 것이다. 엑셀에서 CSV파일로 내보내기 등을 생각하면 될 것이고 엑셀이나 다양한 툴에서 이런 방식으로 내보내기하는 것은 지원하고 있기 때문에 TXT를 만들어 내는 것은 그리 어렵지 않다. TXT의 데이터가 심볼로 구분되어 있는지 아니면 고정된 넓이인지를 선택해 주고 첫줄이나 첫 행이 실데이터인지 아니면 각 행열에 대한 이름인지를 선택해 준다. <br /><br />구분자를 탭이나 콤마외에도 임의로 기호를 입력할 수 있기 때문에 다양한 형식의 데이터를 로드할 수 있다. 파일을 불러들이면 [3]번 부분에 해당데이터의 예시가 나온다. 어떤식으로 입력되는지를 15열로 예시로 보여준다. 오른쪽에는 현재 테이블의 컬럼구조가 나와있는데 [4]버튼을 누르면<br /><br /><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1139429269.jpg" alt="사용자 삽입 이미지" height="411" width="314" /></div><br />위에처럼 TXT파일의 필드와 테이블의 필드를 매핑시킬수 있는 화면이 나온다. TEXT에 컬럼수가 많아도 필요한 것만 매칭 시키면 데이터가 잘 올라간다.<br /><br /><div class="imageblock left" style="float: left; margin-right: 10px;"><img src="//blog.outsider.ne.kr/attach/1/1052428976.jpg" alt="사용자 삽입 이미지" height="57" width="161" /></div>준비가 다 되었으면 로드창의 상단에 있는 Run버튼을 누르면 데이터가 올라간다. 업로드후에 결과를 보여주는 팝업창을 통해서 올려진 로우수와 에러난 로우수를 확인 할 수 있고 에러가 난 로우는 TXT파일과 같은 위치에 파일명_bad.err과 파일명_bae.txt 2개의 error파일이 생기면서 로드되지 않은 데이터가 저장되기 때문에 올라가지 않은 데이터를 쉽게 확인 할 수 있다.<br /><br />거꾸려 데이터를 내려받을 때는 상단탭의 Unload를 사용하면 txt파일로 내보낼 수 있다.<p><strong><a href="https://blog.outsider.ne.kr/105?commentInput=true#entry105WriteComment">댓글 쓰기</a></strong></p>오라클 설치 후 셋팅Outsiderhttps://blog.outsider.ne.kr/122007-10-28T23:59:40+09:002007-06-27T10:52:57+09:00오라클 9i를 설치한 다음에 약간의 셋팅이 필요하다.<br /><br />일단 설치는 뻔하므로 패스하고.... 설치를 다 한다음에<br /><br /><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1020620438.jpg" alt="사용자 삽입 이미지" height="169" width="700" /></div><br />Configuration and Migration Tools - Database Configuration Assistant 에 들어가서 시작화면에서 "다음"을 누른 후<br /><br /><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1336585765.jpg" alt="사용자 삽입 이미지" height="524" width="735" /></div><br />데이터베이스의 데이터베이스 옵션구성에 들어가서 자신이 만든 SID를 선택한뒤에 다음을 누르면<br /><br /><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1089810544.jpg" alt="사용자 삽입 이미지" height="530" width="750" /></div><br />아래쪽의 표준데이터 베이스을 눌러서 들어가면...<br /><br /><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1086743743.jpg" alt="사용자 삽입 이미지" height="257" width="413" /></div><br />위에서 "사용자 정의"를 눌러서 들어가면 <br /><br /><div class="imageblock center" style="text-align: center; clear: both;"><img src="//blog.outsider.ne.kr/attach/1/1026901988.jpg" alt="사용자 삽입 이미지" height="459" width="449" /></div><br />아래 포트번호 구성에서 사용자정의값 지정에서 HTTP포트를 바꾸어 준다. <br /><br />8080을 사용할 경우 나중에 톰캣을 사용할때 포트가 충돌나기 때문에 바꾸어 줘야한다. 9080이든 머든지....<br /><br />
<DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BACKGROUND-COLOR: #d0ff9d">
<DIV style="MARGIN-LEFT: 2em">
<UL>
<LI><FONT color=#000000>C:\oracle\ora92\jdbc\lib\ojdbc14.jar 을 복사하여 J2SE가 설치된 폴더 밑에 util 폴더를 만들어 복사해 준다.</FONT>
<LI><FONT color=#000000>환경변수에서 Classpath에 %JAVA_HOME%\Util\ojdbc14.jar; 를 추가한다.</FONT>
<LI><FONT color=#000000>path에서 자바에 대한패스를 맨앞으로 이동시켜준다. 오라클은 기본적으로 JAVA 1.3으로 연결되기 때문에 바꾸어주지 않으면 1.3을 기본으로 사용하게 된다.. 커맨드창에서 java -version으로 자바버전을 확인해서 1.4로 제대로 뜨는지 확인한다.</FONT></LI></UL></DIV>
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px">
<DIV style="MARGIN-LEFT: 2em"><FONT color=#000000>이클립스 쓰면 이클립스에서도 환경변수 추가.</FONT></DIV>
<DIV style="MARGIN-LEFT: 2em"><FONT color=#000000>Name - Oracle</FONT></DIV>
<DIV style="MARGIN-LEFT: 2em"><FONT color=#000000>Path - C:/j2sdk1.4.2_14/util/ojdbc14.jar</FONT><br /></DIV></BLOCKQUOTE></DIV><p><strong><a href="https://blog.outsider.ne.kr/12?commentInput=true#entry12WriteComment">댓글 쓰기</a></strong></p>