계정 생성하기

sqlplus 혹은 윈도우 cmd창을 띄운다.

system / 설치시 설정한 비밀번호로 들어간다.


계정 생성

SQL> create user user_ididentified by user_password default tablesapce system;


user_name에 ID를 user_passwrod에 비밀번호를 넣는다.


계정 권한주기

SQL> grant connect,resource to user_id


user_id에 일반적인 DDL,DML권한을 부여함, 테이블 생성,삭제,조회,수정 가능...


계정 삭제

system/비밀번호로 접속한다.


SQL> drop user user_id cascade;

cascade로 user_id에 관련된 모든 것들을 물리적으로 삭제한다

Posted by 행복한 프로그래머 궁금쟁이박
TAG 오라클

댓글을 달아 주세요

[08-D6][Oracle] DML, DQL, 함수, LIKE, TRANSACTION

▩ SQL-DML(INSERT, DELETE, UPDATE, DML: Data Manipulation) 문 사용하기
   - sql 파일의 생성 및 저장


--만들어진 테이블 목록을 봅니다.
SELECT * FROM tab;


--테이블을 삭제합니다.
DROP TABLE visitor;


--실습용 테이블을 생성합니다.
CREATE TABLE visitor (
  num      NUMBER(5)    NOT NULL,
  title       VARCHAR(20)         NULL,
  name    VARCHAR(20)         NULL,
  email    VARCHAR(30)         NULL,
  visited  NUMBER(5)            NULL
);


CREATE SEQUENCE visitor_num_seq
    START WITH   1             --시작번호
    INCREMENT BY 1          --증가값
    MAXVALUE     99999      --최대값
    CACHE 20                 --시쿼스 변경시 자주 update되는 것을 방지하기위한 캐시값
    NOCYCLE;   


1. INSERT
   - 레코드를 추가 합니다.
   - 컬럼명을 INSERT문에 명시하지 않으면 모든 컬럼의 값을 전부 입력해야합니다.

-- 컬럼명을 지정하지 않으면 전체 컬럼값을 명시해야 합니다.
INSERT INTO visitor
VALUES(visitor_num_seq.NextVal,
 '안녕하세요', '홍길순', 'webmaster@email.pe.kr', 0);


--컬럼을 명시한 경우는 필요한 컬럼만 값을 입력할 수 있습니다.(권장)
INSERT INTO visitor (num, title, name)
VALUES(visitor_num_seq.NextVal, '반갑습니다.','개발자');


SELECT * FROM visitor;

COMMIT WORK;



2. UPDATE

UPDATE visitor
SET title='자바 개발자입니다.';

SELECT num, title, name, email, visited FROM visitor;

-- 수정된 레코드 취소
ROLLBACK WORK;


UPDATE visitor
SET title='자바 개발자 입니다.', email='java@mail.com'
WHERE num=21;

SELECT num, title, name, email, visited FROM visitor;

COMMIT; 



3. DELETE

-- 모든 레코드 삭제
DELETE FROM visitor;
SELECT num, title, name, email, visited FROM visitor;
ROLLBACK;

-- 특정 레코드 삭제
DELETE FROM visitor WHERE num=21;
SELECT num, title, name, email, visited FROM visitor;
ROLLBACK;




▩ SELECT(DQL: Data Query Language)

1. 컬럼명에 별명을 사용한 경우

--실제의 컬럼명과 별명을 전부 사용할 수 있습니다.
SELECT num 번호, title 제목, name 성명
FROM visitor;


--권장
SELECT num as 번호, title as 제목, name as 성명
FROM visitor;


SELECT num as "_num", title as "_title", name as "_name"
FROM visitor;



2. 기본적인 WHERE 조건을 명시한 경우

--2번 방문자를 보고 싶은 경우
--WHERE절에 조건을 명시합니다.
SELECT * FROM visitor WHERE num=2;


--톰 크루즈만 보고 싶은 경우(문자는 "':Single Quotation Mark"로 닫아줍니다.)
SELECT * FROM visitor WHERE name='톰 크루즈';


--톰 크루즈의 전자우편 주소만 보고 싶은 경우
SELECT email FROM visitor WHERE name='톰 크루즈';


--num 컬럼이 5보다 큰 사람 출력
SELECT * FROM visitor WHERE num >= 5;


--num 컬럼이 4 보다 크고 6보다 작은 사람 출력
--조건을 모두 만족해야 함으로 "and"를 사용합니다.
SELECT * FROM visitor WHERE num >= 4 and num <=6;


--num 컬럼이 4 보다 작거나 6보다 큰 사람 출력
--조건이 하나만 참이라도 레코드 출력
SELECT * FROM visitor WHERE num < 4 or num > 6;



3. 레코드 정렬
   - ASC: 오름 차순 정렬(Ascending), 기본 정렬 값
   - DESC: 내림 차순 정렬(Decending), DESC로 지정


--오름차순으로 정렬하여 봅니다.
SELECT * FROM visitor ORDER BY num;

SELECT * FROM visitor ORDER BY num ASC;


--내림차순으로 정렬하여 봅니다.
SELECT * FROM visitor ORDER BY num DESC;


-- 정렬을 위한 레코드를 추가합니다.
INSERT INTO visitor (num, title, name)
VALUES(visitor_num_seq.NextVal, '반갑습니다.','1가길동');
INSERT INTO visitor (num, title, name)
VALUES(visitor_num_seq.NextVal, '반갑습니다.','2가길동');
INSERT INTO visitor (num, title, name)
VALUES(visitor_num_seq.NextVal, '반갑습니다.','A가길동');
INSERT INTO visitor (num, title, name)
VALUES(visitor_num_seq.NextVal, '반갑습니다.','B가길동');


☞ 정렬 순서 ASC : 숫자 > 영어 > 한글 (UNICODE 순)

SELECT * FROM visitor ORDER BY name ASC;

SELECT * FROM visitor ORDER BY name DESC;



-- 2개의 컬럼으로 정렬
-- title 컬럼을 기준으로 내림차순 1차 정렬한 후
-- name 컬럼을 기준으로 오름차순 2차 정렬 합니다.
SELECT * FROM visitor
ORDER BY title DESC, name ASC;



--번호가 5보다 큰 컬럼만 정렬 대상으로 한 경우
SELECT *
FROM visitor
WHERE num >= 5
ORDER BY title DESC, name ASC;




▩ 함수(Function)의 사용

-- 레코드의 갯수를 구하는 count()함수의 사용
-- 게시판의 글 수를 파악 할 경우 사용
   SELECT count(*) as count FROM visitor;


-- 특정 컬럼을 지정하여 레코드의 갯수를 구하는 count()함수의 사용, null값을 가지고 있는
-- 컬럼은 갯수에서 제외됩니다.
-- null값이 없는 컬럼을 대상으로 count()함수를 사용합니다.
   SELECT count(num) as num_count FROM visitor;
  
   SELECT count(email) as email_count FROM visitor;
  
   SELECT * FROM visitor;


-- 합계를 구하는 sum()함수의 사용
-- 매출액의 합계를 구하는 경우등에 사용합니다.
   SELECT sum(num) as num_sum FROM visitor;


-- 평균을 구하는 avg()함수의 사용
-- 년도별, 월별 평균 매출액을 산출시 사용합니다.
   select avg(num) as num_avg from visitor;


-- email 컬럼이 null값이면 'Q'로 출력
-- null값을 프로그램에서 'null'문자 출력 됨으로 이 문자를
-- 제거하기위해 null값을 특수한 문자로 변경합니다.
   SELECT num, nvl(email, 'Q') as email
   FROM visitor;


-- visited컬럼이 null값이면 0으로 출력
   SELECT num, nvl(visited, 0) as visited
   FROM visitor;


-- 지정된 날짜 형식으로 출력
   SELECT TO_CHAR(sysdate, 'YYYY/MM/DD HH:MI:SS') from dual;


-- 반올림 함수
   SELECT round(12541.005, 0) FROM dual;
   SELECT round(12541.005, 2) FROM dual;
   SELECT round(12541.005, -1) FROM dual;
   SELECT round(12541.005, -3) FROM dual;
  


-- 천단위 컴마사용 함수, 자리수를 적게주면 '#'이 출력됩니다.
   SELECT TO_CHAR(2000000, '9,999') FROM dual;
   SELECT TO_CHAR(2000000, '9,999,999') FROM dual;



▩ LIKE
   - "LIKE"는 비슷한 문자를 찾는 경우에 사용합니다.
   - "="는 완전히 일치하는 문자를 찾습니다.
   
   - %KOREA%: KOREA이란 단어가 들어간 레코드 출력
   - KOREA%: 시작 문자가 KOREA로 시작하는 레코드 출력    
   - %KOREA: KOREA로 끝나는 레코드 출력  
   - KOREA: KOREA과 일치하는 레코드 출력  

   SELECT * FROM visitor;
  
   -- 가길동과 일치하는 레코드 출력
   SELECT * FROM visitor WHERE name LIKE '가길동';
  
   -- 가길동으로 끝나는 레코드 출력
   SELECT * FROM visitor WHERE name LIKE '%가길동';  
  
   -- 1로 시작하는 레코드 출력
   SELECT * FROM visitor WHERE name LIKE '1%'; 
  
   -- 길자가 들어간 레코드 출력
   SELECT * FROM visitor WHERE name LIKE '%길%'; 
  
   


▩ TRANSACTION
   - INSERT, DELETE, UPDATE 쿼리의 실행을 트랜잭션이라고 부릅니다.
   - 데이터에 변화가 발생하는 쿼리는 트랜잭션이라고 합니다.
   - DBEdit에서 트랜잭션 설정 'Auto-commit on'을 체크해제합니다.
   - DDL문 즉 구조와 관련된 쿼리는 트랜잭션과 관련이 없습니다.
   - COMMIT, ROLLBACK후에는 DB에 적용이 되어
     다시 COMMIT, ROLLBACK을 할 수 없습니다.
  
   CREATE TABLE sungjuk(
      hakbun INT NOT NULL, -- 학번
      kuk    INT NOT NULL, -- 국어
      eng    INT NOT NULL, -- 영어
      tot    INT NULL      -- 총점
   )   
  
   INSERT INTO sungjuk(hakbun, kuk, eng) VALUES (1, 100, 90);
  
   SELECT * FROM sungjuk;
  
   ROLLBACK WORK;
  
   SELECT * FROM sungjuk;
  
   INSERT INTO sungjuk(hakbun, kuk, eng) VALUES (1, 100, 90);
   INSERT INTO sungjuk(hakbun, kuk, eng) VALUES (2, 90, 90);     
     
   SELECT * FROM sungjuk;
  
   ROLLBACK WORK;
  
   SELECT * FROM sungjuk;
  
   INSERT INTO sungjuk(hakbun, kuk, eng) VALUES (1, 100, 90);
   INSERT INTO sungjuk(hakbun, kuk, eng) VALUES (2, 90, 90);
   UPDATE sungjuk SET tot = kuk + eng;
  
   SELECT * FROM sungjuk;
  
   COMMIT WORK;  -- DB에 적용합니다.
  
   ROLLBACK WORK;
  
   SELECT * FROM sungjuk;

Posted by 행복한 프로그래머 궁금쟁이박
TAG 오라클

댓글을 달아 주세요

[09-D7] 데이터베이스 접속 패턴, JDBC - Oracle, JSP 연동

▩ 데이터베이스 접속 패턴

1. JSP ---------------------------------------> Oracle
   . JSP에서 처리 로직 전부 구현
   . 개발이 단순하나 개발 기간 지연이 많이 발생하고 유지보수가 매우 어렵습니다.
         
             

2. JSP -----> Beans --------------------------> Oracle
   . 보여주는 로직을 JSP에서 구현
   . Beans는 처리로직으로 1번의 개발 패턴보다는 유지보수성이 많이 우수합니다.
   . 개발시 beans를 설계하여 구현한후 jsp를 구현합니다.
   . 데이터베이스 접속 시간이 많이 소요됩니다.
   . 많이 사용되는 패턴


3. JSP ------------------> Pool --------------> Oracle
   . JSP에서 처리 로직 전부 구현 그러나 데이베이스 연결 부분만 Pool 객체에서 구현합니다.
   . 개발이 단순하나 개발 기간 지연이 많이 발생하고 유지보수가 매우 어렵습니다.
   . 데이터베이스 접속은 빨리 됩니다.


4. JSP ----------------> Beans --------------> Pool -----------------> Oracle (권장)
   rank.jsp           RankDTO.java      DBConnectionMgr.java           Rank Table
                      RankMgr.java

   . 보여주는 로직을 JSP에서 구현
   . Beans는 처리로직(Business Logic)으로 유지보수성이 많이 우수합니다.
   . 개발시 beans를 설계하여 구현한후 jsp를 구현합니다.
   . 신속한 데이터베이스 접속이 이루어 집니다.  
   . 많이 사용되며 권장 패턴입니다.




▩ JDBC Driver, RDBMS의 연동

1. JDBC Driver Type
   - Type 1
     . JDBC-ODBC Bridge Plus ODBC Drive: 다양한 데이터에 접속이 가능하나 속도가 느리다.
     . ODBC의 사용 : javamssqlODBC 만들기 , [관리 도구]-[데이터 원본]-[System DSN]
     . ODBC를 사용하는 경우는 자바가 JDBC드라이버를 Vendor로 부터 지원받을 수 없는 경우에만 해당합니다.
       거의 모든 자바 드라이버가 전부 제공됨으로 사용예는 극히 적습니다.

   - Type 2
     . Native-API Partly-java Driver:C로 개발된 드라이버를 이용하여 데이터베이스 접속,
     . 데이터접속 드라이버가 클라이언트쪽에 위치해 있다.

   - Type 3
     . JDBC-Net Pure Java Driver: 순수 자바 드라이버, 데이터접속 드라이버가 서버쪽에 위치해 있다.

   - Type 4
     . Native-Protocol Pure Java Driver: 순수 자바 드라이버로 자바를 이용해서 바로 데이터베이스 서버에 접속됩니다.
     . 자바 Socket을 이용하여 DB 서버에 접속하는 네트워크 프로그램입니다.
     . thin-Oracle: 1521, jk-MSSQL:1433, MySQL Connector/J: 3306



2. 환경 설정
   - classes12.jar 파일을 복사
     . \webapps\www\WEB-INF\lib: www Application만 사용가능
     . \tomcat-5.5.20\common\lib : 모든 Application이 사용가능
     . 주의: WEB-INF\lib, common\lib 두 폴더에 같은 라이브러리가
       있으면 안됩니다.

   - Web Application Folder
     . /tomcat-5.5.20/webapps/jdbc                  : *.jsp
     . /tomcat-5.5.20/webapps/jdbc/WEB-INF          : web.xml
     . /tomcat-5.5.20/webapps/jdbc/WEB-INF/classes  : servlet, beans
     . /tomcat-5.5.20/webapps/jdbc/WEB-INF/lib      : classes12.jar

   - Eclipse
     . Project Name  : jsp_c09_jdbc
     . Library       : servlet-api.jar, classes12.jar
     . output folder : '/tomcat-5.5.20/webapps/jdbc/WEB-INF/classes' link



3. JAVA JDBC 연동 테스트

>>>>> test.jdbc.DriverTest.java

package test.jdbc;

import! java.sql.Connection;
import! java.sql.DriverManager;
import! java.sql.SQLException;

public class DriverTest {
    public static void main(String args[]){
        //데이터베이스 접속 연결 정보를 가지고 있는 객체입니다.
        Connection con;
   
        try{
            //JDBC드라이버를 로딩합니다.
            Class.forName("oracle.jdbc.driver.OracleDriver");
           
            //데이터베이스에 연결을 합니다.               Oracle Server IP:Port:SID     계정명         패스워드                     
            con=DriverManager.getConnection("jdbc:oracle:thin:@172.16.6.1:1521:ora93","jsp2030_02_1","oracle");
           
            System.out.println("데이터 베이스 접속이 성공했습니다.");
        }catch(SQLException  ex){
            System.out.println("SQLException:"+ex);
        }catch(Exception ex){
            System.out.println("Exception:"+ex.toString());
        }
     }
}



4. JSP JDBC 연동 실습

   - 테이블 구조

DROP TABLE book;
DROP SEQUENCE book_booknum_seq;

-- CONSTRAINT book_num_pk PRIMARY KEY(num)
-- CONSTRAINT 제약조건 이름 PRIMARY KEY(조건을 지정할 컬럼명)
-- PRIMARY KEY: 중복된 값이 올 수 없습니다. null이 값으로
-- 올 수 없음으로 반드시 INSERT시에 값을 입력해야 합니다.
CREATE TABLE book(
   booknum    NUMBER(5)      NOT NULL, -- -99999 ~ +99999, 책 번호
   name           VARCHAR(20)  NOT NULL, -- 도서명
   author         VARCHAR(20)  NOT NULL, -- 저자
   price            NUMBER(6)     NOT NULL, -- 가격,
   CONSTRAINT book_booknum_pk PRIMARY KEY(booknum)
);

-- SEQUENCE: 고유한 일련번호를 생성합니다.
-- CREATE SEQUENCE 시쿼스 이름, 테이블명_컬럼명_seq
-- START WITH 시작값 지정
-- INCREMENT BY 증가값 지정
-- CACHE 메모리에 저장할 캐시값, 10이면 10단위로
-- sequence 테이블이 수정됩니다.

CREATE SEQUENCE book_booknum_seq
START WITH 1
INCREMENT BY 1
CACHE 10;


--추가
INSERT INTO book(booknum, name, author, price)
VALUES(book_booknum_seq.NextVal, 'JSP 개발','저자1', 25000);

INSERT INTO book(booknum, name, author, price)
VALUES(book_booknum_seq.nextval, 'EJB 개발','저자2', 25000);

INSERT INTO book(booknum, name, author, price)
VALUES(book_booknum_seq.nextval, 'CBD 개발','저자3', 27000);

SELECT booknum, name, author, price FROM book; 

COMMIT;



-------------------------------------------------------------------------------
>>>>> webapps/jdbc/jdbc_test.jsp, http://127.0.0.1:8081/jdbc/jdbc_test.jsp
-------------------------------------------------------------------------------
- 데이터베이스에 레코드 추가 후 SELECT 예제입니다.

<%@ page contentType="text/html;charset=euc-kr" %>
<%@ page import!="java.sql.*, java.text.DecimalFormat" %>

<%!
public String comma(int p){
    DecimalFormat comma = new DecimalFormat("###,##0");//1,000,000
    return comma.format(p);
}

public String comma(long p){
    DecimalFormat comma = new DecimalFormat("###,##0");
    return comma.format(p);
}
%>

<%
Class.forName("oracle.jdbc.driver.OracleDriver");
  
//드라이버로딩 후 커넥션을 위한 커넥션 객체선언
Connection con = null;
  
//커넥션이 생성이 된 후 질의를 던지기 위한 객체선언
Statement stmt = null;

//SELECT 쿼리의 결과만 가져옵니다.
ResultSet rs = null;
 
int booknum=0;       //책 일련 번호
String name = "";    //책 제목
String author = "";  //저자명
int price = 0;           //가격
float dc = 0.1f;        //할인율
int sale = 0;            //판매가격
int counter = 0;     //등록된 책의 수
int ret=0;               //추가된 레코드의 수 

String url="jdbc:oracle:thin:@172.16.6.1:1521:ora93";
String user="jsp2030_02_1";
String pass="oracle";

try{
   //커넥션 생성
   con = DriverManager.getConnection(url, user, pass);
 
   //커넥션을 통해 질의를 전송하기 위한 객체(stmt)를 생성합니다.
   stmt = con.createStatement();

   // INSERT
   // -------------------------------------------------------------------------------
   String sql = "INSERT INTO book(booknum, name, author, price) ";
   sql = sql + " VALUES(book_booknum_seq.nextval, 'JAVA', '저자',25000)";

   //ret: insert한 레코드의 수
   ret = stmt.executeUpdate(sql); //record insert
   System.out.println(sql); //console에 쿼리 출력
  
   if( ret > 0) {
        System.out.println(ret + "개의 메소드가 추가되었습니다.");
   }
  
   // SELECT
   // -------------------------------------------------------------------------------
   sql = "SELECT booknum, name, author, price FROM book";
   sql = sql + " ORDER BY booknum DESC";

   //객체(stmt)를 통해서 질의를 수행할 메소드를 사용
   //질의수행 결과는 ResultSet(Record의 집합)으로 받는다.
   rs = stmt.executeQuery(sql);
%>
<html>
<head>
<title>JSP에서 데이터베이스 연동</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
</head>
<body bgcolor="#FFFFCC">

<h2>JSP 스크립틀릿에서 데이터베이스 연동 예제입니다....</h2>

<br>
<br>
<h3>도서정보</h3>
<table bordercolor="#0000ff" border="1">
<tr>
    <td><strong>책 번호</strong></td>
    <td><strong>책 이름</strong></td>
    <td><strong>저자</strong></td>
    <td><strong>가격</strong></td>
    <td><strong>할인율</strong></td>
    <td><strong>판매가격</strong></td>
</tr>
<%
    if(rs != null){  //rs 객체가 정상적으로 생성이 되어 있다면

         /*최초 레코드 포인터는 BOF 지역을 가르키고 있습니다.
         첫번째 레코드로 이동하면서 레코드 포인터를 증가합니다.
         만약 다음 레코드가 없으면 false를 리턴해 while문을
         벗어납니다.*/
         while(rs.next()){
            booknum = rs.getInt("booknum");   //booknum = rs.getInt(1);
            name   = rs.getString("name");    //name = rs.getString(2);
            author = rs.getString("author");
            price  = rs.getInt("price");
            sale   = (int)(price * (1 - dc)); //할인율이 적용된 금액
            sale   = ((int)(sale /100 + 0.5))*100;  //10의자리에서 반올림
            // 1555 --> 15.55 ---> (int)16.05 ---> 16 ---> 1600
%>
<tr>
<td>  <%= booknum %>  </td>
<td>  <%= name %>  </td>
<td>  <%= author %>  </td>
<td>  <%= comma(price) %>  </td>
<td>  <%= dc %>  </td>
<td>  <font color="red"><%= comma(sale) %></font>  </td>
<%
            counter++;
         }//end while
      }//end if
%>

</tr>
</table>
<BR>
<BR>
total records : <%= counter %>
<%
//데이터베이스 연동시 필요한 예외처리...
}catch(Exception e){
    System.out.println(e.toString());
}finally{
    if( rs != null )
        try{ rs.close(); }
        catch(SQLException e) {System.out.println(e.toString());}
    if( stmt != null )
         try { stmt.close(); }
        catch(SQLException e) {System.out.println(e.toString());}
    if( con != null )
         try{ con.close(); }
        catch(SQLException e) {System.out.println(e.toString());}
}
%>

출처 : http://blog.daum.net/javafighting/317707 복사

Posted by 행복한 프로그래머 궁금쟁이박
TAG 오라클

댓글을 달아 주세요

오라클 원격 접속하기


1. 오라클 서버에 리스너(Listener) 를 가동한다.

다른 컴퓨터에서 오라클에 접속하려면 리스너가 동작해야 한다. 오라클 9i라면, 설치시에 기본적으로 리스너를 설치하고, 서비스를 구성한다. Enterprise Edition이나 Standard Edition은 기본으로 구성하는 단계가 있는데, 혹시 구성 중에 취소했다면 안 만들어 졌을 수도 있다.


리스너는 네트워크를 이용하여 클라이언트에서 오라클 서버로 연결하기 위한 오라클 네트워크 관리자 이다. 오라클 서버에서 리스너를 시작시켜 주어야 클라이언트들이 접속 할 수 있다.


리스너 관련 명령어

c:\>lsnrctl start  리스너 시작하기

c:\>lsnrctl stop  리스너 정지하기

c:\>lsnrctl reload  리스너 재시작하기

c:\>lsnrctl status  리스너 상태보기

c:\>lsnrctl help  도움말


리스너 구성 파일은 $ORACLE_HOME/network/admin 아래에 있는 listener.ora 파일이며, 오라클 서버에서 클라이언트의 요청을 듣고 클라이언트와의 통신 환경을 설정한다.


listener.ora 파일이 없다면, cmd 창을 열어서

C:\> lsnrctl start

라고 치면 자동으로 만들어진다.

만들어진 리스너는 서비스로 등록되는데, 서비스 관리자에서 Oracle....TNSListener라는 이름이 바로 리스너 서비스다.

이 서비스의 시작 유형을 "자동" 으로 해 놓는 것이 편리하다.


서비스 관리자에서 이 서비스를 start 시키거나, cmd 창에서

C:\> lsnrctl start

하면 외부에서 접속할 수 있다.

2. 클라이언트에 오라클 클라이언트를 설치 한다.


리눅스용 오라클 클라이언트는 http://www.oracle.com/technology/global/kr/software/products/database/oracle10g/index.html 에서 다운 받을 수 있다. 되도록이면 설치되어 있는 오라클 버전하고 같은 것을 다운 받는다.
주) 리눅스용 오라클 클라이언트는 X 윈도 에서 설치가 가능하다.

3. 리눅스 시스템의 경우 .bash_profile 파일을 수정한다.

SQL PLUS 같은 터미널 접속 이라면 먼저 해당 계정의 .bash_profile 파일을 수정해 주어야 한다.
예를 들면 아래와 같다.

export ORACLE_BASE=/oracle/app/oracle
export ORACLE_HOME=/oracle/app/oracle/product/8.1.7
export ORACLE_OWNER=oracle
export ORACLE_SID=ORCL
export TMPDIR=$ORACLE_BASE/tmp
export PATH=$PATH:$ORACLE_HOME/bin:/usr/local/java/bin
export JAVA_HOME=/usr/local/java
export TNS_ADMIN=$ORACLE_HOME/network/admin
export NLS_LANG=American_America.KO16KSC5601
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

이 계정으로 접속을 했을 때 아무 곳에서나 오라클의 접속이 가능 하도록 패스 지정을 한 것이다.
 

접속 방법

사용자 이름   : <사용자계정>

암호          : <계정비밀번호>

호스트 스트링 : tnsnames.ora 에 설정된 호스트의 별칭

주) 웹을 이용한 접속 이라면 PHP 의 경우 오라클 클라이언트 설치 경로를 지정해 주어 PHP 를 다시 컴파일 해주어야 하며 JSP 같은 경우 라면 오라클 경로를 다시 잡아 주어야 한다.

4. 클라이언트에서 tnsnames.ora 파일을 수정한다.


tnsnames.ora 파일은 오라클 서버로 접속할 때 필요한 프로토콜 및 포트번호, 서버주소, 인스턴스 등을 설정해 주는 파일로써, C:\oracle\ora92\network\admin 디렉토리에 위치한다.

 

MY_DB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 126.138.95.21)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = oradb)
    )
  )


오라클 클라이언트는 원격 DB 접속을 위해 위의 파일 내용을 참조하게 된다.

MY_DB 는 원격 데이터베이스의 사용자 정의 명칭이다. 자신의 PC 에서만 유효한 이름이므로 아무렇게나 주어도 된다. HOST = 126.138.95.21 이 부분이 중요한데...실제 원격 DB 가 위치하고 있는 머신의 IP 주소를 입력하면 된다. 포트는 기본 값이 1521 이다.

SERVICE_NAME 이라는 것은 실제 데이터베이스 이름이라고 보면 된다. MY_DB 가 내 PC 에서만 유효한 것이라면 SERVICE_NAME 은 NETWORK 내에서 유일해야 하므로 실제 원격 머신 상에서 오라클 Database 를 Create할 때 결정되어진다. SERVICE_NAME 및 호스트 머신의 IP 주소에 대해서는 원격 Database 를 관리하는 DATABASE 관리자에게 문의하면 된다.


각 오라클의 버전별로 약간의 tnsname.ora 의 내용이 약간씩 다를 수 있으나 위에 설명한 내용은 9i 에서도 그대로 적용된다.


실제 연결을 위해서 tnsname.ora 를 직접 편집하는 것보다 Net Configuration Assistant 라는 프로그램을 이용하길 바란다. 이 프로그램을 이용하여 원격 DB 연결을 설정하면 실제 연결 테스트를 해 볼 수도 있고, 직접 작성으로 인한 tnsname.ora 파일의 버전간 차이 등의 문제를 피할 수 있다. 위의 프로그램은 오라클 클라이언트를 설치하면 프로그램 메뉴에서 찾아볼 수 있다. 해당 프로그램 사용법은 지면 관계상 생략하나 네이버에서 검색하면 쉽게 찾아볼 수가 있을 것이다.


그 후에 다시 로그아웃 하고 로그인을 한후 sqlplus 라고 입력하면 됩니다.

오라클의 설치도 쉽지 않지만 클라이언트의 설치도 간단치 않으므로 차근차근 실수 없이 진행 해야 합니다.

TNSPING으로 접속 TEST하는 방법

Windows 3.1용 SQL*Net을 설치한 경우에 Nettest.exe로써 Server에 접속 여부를 test했었으나, Windows 95용 SQL*Net을 설치하면 tnsping.exe라는 프로그램이 생긴다. 이 프로그램은 일반적인 TCP/IP 프로그램에서 제공하는 Ping Utility와 유사한 방식으로 DB Server에 Login 여부를 확인할 수 있다. SQL*Net 2.2이상에서만 제공이 되며, SQL*Net V1에서는 사용할 수 없다.


C:\oracle\ora92\bin\tnsping.exe

[ 사용 방법 ]

tnsnames.ora file에 tns services name 및 접속에 관련된 내용을 기술한다.  
예: MY_DB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 126.138.95.21)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = oradb)
    )
  )


tnsping utility 사용 예
 

c:\>tnsping oradb 5

TNS Ping Utility for 32-bit WINDOWS: Version 9.2.0.1.0 - Production on 18-NOV-2006 09:52:34  

Copyright (c) Oracle 1997 Corporation. All rights reserved.

사용된 매개변수 파일

C:\oracle\ora92\network\admin\sqlnet.ora

별칭 분석을 위해 TNSNAMES 어댑터 사용
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 126.138.95.21)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = oradb)))
확인 (50 밀리초) 
확인 (30 밀리초) 
확인 (30 밀리초) 
확인 (50 밀리초) 
확인 (30 밀리초)


주) tnsping 은 되는데 오라클 연결이 안될 때는 방화벽을 검사한다. 방화벽은 예외설정을 해도 되지 않고 사용안함 설정을 해야 한다. 또한 tnsnames.ora 파일에 HOST = 126.138.95.21 부분을 ip 주소가 아닌 host 명으로 했을 때 안되는 경우가 있다.

Posted by 행복한 프로그래머 궁금쟁이박
TAG 오라클

댓글을 달아 주세요

보통 PHP의 개발환경으로 리눅스를 기반으로 하기 마련인데, 얼마전에 솔라리스 10기반으로 설치해볼 기회가 있어서 설치 후 정리해봅니다. 생각보다 상당히 까다로웠던 기억이 나네요.

특히 Oracle 10g와의 연동부분에서 많이 해매었습니다. 왜냐하면 Oracle 9i까지는 OCI를 설치하면 오라클 설치디렉토리 내에 OCI라는 폴더가 생기는데 Oracle 10g 클라이언트의 유닉스버전은 그게 아니더군요. 웃긴건 윈도우용 Oracle 10g 클라이언트는 OCI라는 폴더가 또 생기더라는...

기본 환경은 다음과 같습니다.

Server: Web Server * 2, Database Server * 1
OS: SunSparc Solaris 10
Web Server: Apache 2.0.59
Script Language: PHP 5.2.2
Database: Oracle 10g Database Server

데이터베이스 서버는 별도로 이미 구축되어 있으며, 웹 서버 2대는 클러스터로 구축해서 만일의 경우를 대비하는 것입니다. 서버 장비에 대한 것은 깊은 지식이 없으므로 일단 패스~

웹서버 한대에 위의 환경을 구축하는 것을 기준으로 합니다.(오라클은 클라이언트가 이미 설치되어 있다고 가정합니다.) 그리고 오라클과의 연동을 위해서는 패키지 형식은 현재 지원이 안되고 컴파일 형식으로 설치를 진행해야 합니다.

1. 사전준비
우선 필요한 패키지를 다운로드 받아야 합니다. 솔라리스 관련 패키지는 http://www.sunfreeware.com에서 모두 받을 수 있습니다. 필요한 패키지는 다음과 같습니다.

libgcc: gcc를 설치하기 위해 필요
libiconv: gcc, apache를 설치하기 위해 필요
gcc: php를 컴파일하기 위해 필요
make: 보통은 운영체제 설치시 설치해줍니다. 설치 안되어 있다면 설치해야 php를 컴파일할 수 있습니다.
indent: flex를 설치하기 위해 필요
flex: php를 설치하기 위해 필요
autoconf: bison을 설치하기 위해 필요
m4: php, bison을 설치하기 위해 필요
bison: php를 설치하기 위해 필요
perl: php, automake를 설치하기 위해 필요
automake: php를 설치하기 위해 필요
gzip: php를 설치하기 위해 필요
tar: php를 설치하기 위해 필요. 보통은 운영체제시 기본으로 설치합니다.
GNU sed: php를 설치하기 위해 필요
expat: Apache를 설치하기 위해 필요
gdbm: Apache를 설치하기 위해 필요
db-4.2.52.NC: Apache를 설치하기 위해 필요
openssl: Apache를 설치하기 위해 필요


위의 패키지들이 설치되어 있는지 반드시 확인해보시길 바랍니다.(pkginfo 명령어) 설치되어 있으면 지나치고 설치안되어있으면 설치해줘야 합니다. 라이브러리들을 설치하는데는 반드시 순서가 있습니다. 즉, 특정 라이브러리를 설치하기 위해서는 다른 라이브러리가 먼저 설치되어야 할 경우들이 많습니다. 그런 사항은 위의 사이트에 잘 나와있으니 참조하시길 바랍니다.

2. Apache 2.0.59 설치
우선 Apache를 설치합니다. 요즈음은 동적 모듈 방식(DSO)으로 설치를 많이하는 추세이니 여기서도 동적 모듈을 이용하도록 설치합니다. 패키지형식은 모두 동적모듈방식입니다.

# gzip -d apache-2.0.59-sol10-sparc-local.gz
# pkgadd -d apache-2.0.59-sol10-sparc-local

vi /usr/local/apache/conf/httpd.conf  이파일 설정

#Group #-1 --> Group nogroup 으로 변경

3. Oracle 10g 설치 확인
Oracle 10g 클라이언트가 사전에 설치되어 있어야 합니다. 특히 Oracle Call Interface가 설치되어 있는지 반드시 확인해야 합니다.

Oracle 10g 유닉스버전은 OCI라는 디렉토리가 아닌 instantclient라는 개념으로 접근합니다. 만일 $ORACLE_HOME에 instantclient라는 디렉토리 자체가 없으면 아래의 URL에서 Basic역시 다운로드 받아야 합니다. 이때 SDK도 같이 다운로드 받아야 합니다.

http://www.oracle.com/technology/software/tech/oci/instantclient/index.html

설치에 대해서는 생략합니다. 여기서는 $ORACLE_HOME/instantclient라는 이름으로 설치되어있다고 가정합니다. 그리고 instantclient안에는 반드시 SDK라는 디렉토리로 SDK 모듈이 설치되어 있어야 합니다.

4. root profile 확인
PHP 컴파일은 ROOT 계정으로 진행할 것입니다. OCI 연결시 $ORACLE_HOME 변수와 $LD_LIBRARY_PATH를 찾으므로 반드시 설정해야 합니다.

.profile 예제
ORACLE_HOME=/path/to/oracle;export ORACLE_HOME;
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/instantclient;export LD_LIBRARY_PATH

5. PHP 5.2.2 설치
php 컴파일하는 것은 리눅스와 같습니다. configure -> make -> make install 차례로 진행합니다.

여기서 주의할 것은 configure 시 오라클 연동 옵션부분인데, 이전처럼 단순히 with-oci8={path} 로 하면 못찾습니다. 그리고 PHP 4.X 버전때랑 PHP 5.X 버전때랑도 약간 틀리니 주의하시기 바랍니다.

1) configure
[ PHP 5.0 이상 ]
./configure \
--prefix=/usr/local/php \
--with-oci8=instantclient,/oracle/app/oracle/product/10_client/instantclient \
--with-apxs2=/usr/local/apache2/bin/apxs

[ PHP 4.7 ]
./configure \
--prefix=/usr/local/php \
--with-oci8-instant-client=/oracle/app/oracle/product/10_client/instantclient \
--with-apxs2=/usr/local/apache2/bin/apxs

2) make & make install
명령어는 쉬우니 생략하고, 진행시 다음의 두가지 오류가 발생할 수 있습니다.
- make 시 oracle의 instandclient의 wrong ELF class: ELFCLASS64 관련 오류
- make install 시 아파치 연결때 /usr/local/bin/sed를 못찾는 오류

위의 두 오류에 대해서는 다음과 같이 해결합니다.
[ ELFCLASS64 관련 오류 ]
- instantclient는 설치하면 32비트용과 64비트용으로 설치됩니다. 보통 위의 오류는 64bit형으로 설치했을 때 발생합니다.
- $ORACLE_HOME내에 있는 instantclient를 instantclient64로 변경하고 instantclient32를 instantclient로 변경합니다. 그리고 SDK를 복사해서 넣어주고 make하면 됩니다.

[ /usr/local/bin/sed를 못찾는 오류 ]
- ln -s /usr/bin/sed /usr/local/bin/sed 로 소프트링크를 걸고 다시 시도하면 됩니다.

3) php.ini 복사
php.ini를 /usr/local/php/lib 밑에 복사해서 넣고 환경에 맞게 설정합니다. 그리고 httpd.conf안에 php5 모듈 올라왔는지 확인하고 AddType을 통해서 확장자 지정합니다. 이부분은 많은 자료가 이미 나와있으므로 생략합니다.

6. 최종확인
Apache를 구동하고 홈디렉토리로 가서 phpinfo를 출력하는 페이지를 만들어 확인합니다. OCI8항목이 있는지 확인하면 됩니다.

Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요

  1. BlogIcon moncler chaquetas 2013.01.05 21:49  댓글주소  수정/삭제  댓글쓰기

    Près de deux millions de catholiques?philippins ont défilé pieds nus dimanche dans les rues de Manille dans le cadre?de la procession annuelle du Nazaréen noir, http://www.moncleroutletespain.com/ moncler online, une statue de Jésus Christ qui, http://www.moncleroutletespain.com/ http://www.moncleroutletespain.com/?serait dotée de pouvoirs miraculeux, http://www.moncleroutletespain.com/ moncler chaquetas. La statue de bois noir, taillée au Mexique et acheminée aux Philippines au?début du 17ème siècle, http://www.moncleroutletespain.com/ moncler españa, quitte chaque 9 janvier l'Eglise de Quiapo de Manille, http://www.moncleroutletespain.com/ moncler outlet?pour une grande parade dans les rues de la capitale de l'archipel largement?catholique, http://www.moncleroutletespain.com/ moncler.Related articles:


    http://ahndoori.tistory.com/5 http://ahndoori.tistory.com/5

    http://jejuq.tistory.com/category/Mobile?page=15 http://jejuq.tistory.com/category/Mobile?page=15

1. 가장 먼저 오라클 홈페이지에서 데이터베이스를 다운받아야 한다.

   www.oracle.co.kr 에 가서 계정을 만든다. 그런 다음 메인 페이지에서 오른쪽 위에 다운로드가 보인다. 

다운로드 페이지에서 Accept License Agreement 에 체크한 뒤 다운로드 리스트에서 SPARC 을 지원하는 오라클 데이터베이스를 선택한다

사용자 삽입 이미지

이동하면 그 곳에 10gr2_db_sol.cpio.gz 가 보일 것이다. Accept 에 체크한 뒤 다운로드 받는다.

설치 시 오라클 계정으로 설치하기 위해 /export/home/oracle 폴더에 다운로드 받는 것을 권장한다.

사용자 삽입 이미지


2. 오라클은 모두 /export/home/oracle 에 설치해야 한다.

   오라클에서 권장하는 사양은 512MB 이상의 램, 1GB 이상의 스왑공간이 필요하다.

   시스템 커널 파라미터를 변경해야 한다. 주로 공유 메모리와 관련된 파라미터를 늘려야한다.  /etc/system 파일은 매우 중요하므로 백업받은 후 수정하도록 한다.

 

  -bash-3.00$ cp /etc/system /etc/systemold

  -bash-3.00$ vi /etc/system

 

  vi 편집기로 파일을 연 뒤 맨 아래 부분에 다음을 추가해준다.

 

  set semsys:seminfo_semmni=100

set semsys:seminfo_semmns=1024

set semsys:seminfo_semmsl=256

set semsys:seminfo_semvmx=32767

set shmsys:shminfo_shmmax=4294967295

set shmsys:shminfo_shmmin=1

set shmsys:shminfo_shmmni=100

set shmsys:shminfo_shmseg=10

사용자 삽입 이미지

위와 같이 수정한 뒤 저장한다. 그리고 reboot 을 시켜야 한다.

 

 -bash-3.00$ sync; sync; reboot

 

3. 오라클 계정을 생성한다. 오라클은 root 로 설치할 수 없다. 오라클 설치를 위해 oinstall 그룹, dba 그룹, oracle 유저를 생성하는 것을 권장한다.

 

   -bash-3.00$ groupadd  g 101 oinstall

   -bash-3.00$ groupadd  g 102 dba

   -bash-3.00$ useradd  -d /export/home/oracle g oinstall G dba m u 103 s /usr/bin/bash oracle

   -bash-3.00$ passwd oracle

 

4. 오라클 계정의 환경을 설정한다.

 

-bash-3.00$ /usr/openwin/bin/xhost +   ß 디스플레이 활성화

-bash-3.00$ su oracle

-bash-3.00$ mkdir oraapp     ß 오라클 어플리케이션이 설치될 곳.

-bash-3.00$ mkdir oradata    ß 오라클 데이터가 설치될 곳.

-bash-3.00$ chmod R 755 oraapp

-bash-3.00$ vi .profile

 

.profile 을 연 뒤 다음과 같이 수정한다. 편집기를 사용하면 편리하다.

 

DISPLAY=localhost:0.0; export DISPLAY

 ORACLE_HOME=/export/home/oracle/oraapp/product/10.2.0; export ORACLE_HOME;

 ORACLE_SID=orcl; export ORACLE_SID;

 ORACLE_OWNER=oracle; export ORACLE_OWNER;

 NLS_LANG=KOREAN_KOREA. K016KSC5601; export NLS_LANG;

 ORA_NLS=$ORACLE_HOME/ocommon/nls/admin/data; export ORA_NLS

 PATH=$PATH:$ORACLE_HOME/bin; export PATH

 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib


사용자 삽입 이미지

수정이 끝났으면 활성화시킨다.

 

-bash-3.00$ source .profile

 

5. 이제 파일의 압축을 풀고 설치를 시작해야 한다.

 

-bash-3.00$ cksum 10gr2_db_sol.cpio.gz

-bash-3.00$ gunzip 10gr2_db_sol.cpio.gz

-bash-3.00$ cpio idcmv < 10gr2_db_sol.cpio

 

runInstaller 를 실행하면 GUI 화면이 뜨고 이제 설치를 시작한다.

-bash-3.00$ ./runInstaller

    UNIX DBA 그룹을 dba 로 선택한다.

사용자 삽입 이미지

인벤토리 및 인증서 지정

사용자 삽입 이미지

제품별 필요조건 검사를 수행한다.

사용자 삽입 이미지

일부 권장사항 검사에 실패하였어도 설치에 문제가 없다.


구성옵션 선택에서 데이터베이스 생성을 선택한다.

사용자 삽입 이미지

설치 요약 화면이다. 설치를 눌러 설치한다.

사용자 삽입 이미지

설치중인 화면이다.

사용자 삽입 이미지

데이터베이스 생성 화면

사용자 삽입 이미지

데이터베이스 생성 완료

사용자 삽입 이미지

설치가 완료되고 실행할 스크립트를 보여주는 화면이 뜬다.

사용자 삽입 이미지

화면에 나온대로 root 로 로그인한 뒤 스크립트를 실행하고 돌아와서 확인버튼을 클릭한다.

반드시 루트 계정으로 실행한다.

 

 -bash-3.00$ su

-bash-3.00$ /export/home/oracle/oraInventory/orainstRoot.sh

-bash-3.00$ /export/home/oracle/oraapp/product/10.2.0/root.sh

 

모든 설치가 완료된 화면이다.

사용자 삽입 이미지

종료버튼을 눌러 종료하면 설치가 끝난다.

Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요

public String kor(String id)
{
String temp = "";
try
{
temp = new String(id.getBytes("8859_1"),"KSC5601");
}catch(Exception e){}
return temp;
}
이 함수는 디비에 들어가기전
한국어가 거치고 나면
디비저장시 한글이 되며 꺼내올때도 깨지지 않습니다.
이 거는 웹에서 한글이 디비에 들어갈때 깨지기에 이렇게 합니다.
이렇게 해서 저장하면 꺼낼때도 이상없이 웹에 뿌려지고 나옵니다.
그리구 이 함수를 거쳐서 오라클 디비에 넣어야 합니다.
그래야 한글 이 안깨집니다. 아마 다른 것에 저장할때도 자바는
이처리 해야합니다.
Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요

오라클

Database/ORACLE 2007.10.05 23:53
1. 사용자 계정의 잠금  

  ◈  명시적으로 사용자의 계정을 잠글 경우 사용 할 수 있습니다.

 -- 시스템 유저로 접속 합니다.
 SQLPLUS system/manager


 -- scott유저의 계정을 잠금
 -- 계정 잠금을 해제 할 때까지 scott유저로 접속 할 수 없습니다.
 SQL>ALTER USER scott
         ACCOUNT LOCK;
   사용자가 변경되었습니다.


 -- scott유저에 접속 할 수가 없습니다.
 SQL>conn scott/tiger
        ERROR:
        ORA-28000: 계정이 잠금되었습니다

    경고: 이제는 ORACLE에 연결되어 있지 않습니다.  



2. 사용자 계정 잠금 해제 

 -- 시스템 유저로 접속 합니다.
 SQLPLUS system/manager

 
 -- scott유저의 계정 잠금 해제
 SQL>ALTER USER scott
         ACCOUNT UNLOCK;
      사용자가 변경되었습니다.
 

 -- SCOTT유저에 다시 접속 할 수 있습니다.
 SQL> conn scott/tiger
        연결되었습니다.



3. 비밀 번호의 만료

 ◈ 사용자 암호를 재 설정 할 때 유용 합니다.

 -- 시스템 유저로 접속 합니다.
 SQLPLUS system/manager


 -- scott유저의 암호를 만료 시킵니다.
 SQL>ALTER USER scott
        PASSWORD EXPIRE
     사용자가 변경되었습니다.


  -- scott유저는 더이상 접속을 할 수 없습니다.
  SQL> conn scott/tiger
          scott에 대한 암호를 변경합니다
      새로운 암호: *****
      새로운 암호를 다시입력합니다: *****
      ERROR:
      ORA-00988: 암호가 틀립니다

    암호가 변경되지 않았습니다


  -- system user가 암호를 다시 생성해야 scott유저가 접속 할 수 있습니다.
  SQL> conn system/manager
        연결되었습니다.
   

 -- 암호 생성
 SQL>ALTER USER scott
        IDENTIFIED BY tiger;
 
   사용자가 변경되었습니다.
 

  -- 접속 가능
   SQL> conn scott/tiger;
   연결되었습니다.
Posted by 행복한 프로그래머 궁금쟁이박
TAG 오라클

댓글을 달아 주세요

솔라리스 9 IA 9/04, 10 IA 3/05에서 Oracle 설치

설치할 Oracle 버전

Oracle 10g Release 1

들어가기 전에

최종 갱신일: 2005-09-30

이 문서는 http://www.solanara.net/ 에서 최신버전을 구할 수 있다.

1. 설치 전에

전부 설치를 선택한다.

Software 1/2, Software 2/2, Language 시디를 모두 설치한다.

Oracle은 모두 /export/home/oracle에 설치할 것이다. 필자는 /export/home/oracle을 4GB 주었다.

오라클사에서 말하는 오라클 인스톨을 위한 필수 패키지는 SUNWarc SUNWlibms SUNWi1of SUNWbtool SUNWsprot SUNWi1cs SUNWhea SUNWsprox SUNWi15cs SUNWlibm SUNWtoo SUNWxwfnt 이다. 전체 설치시 모두 설치되어있다. 또한 솔라리스 9의 경우 최신의 커널 패치와 최신의 libm 패치를 해야 한다. 물론 솔라리스 9 9/04에서는 이미 설치되어있다.

오라클에서 권장하는 사양은 512MB이상의 램, 1GB이상의 스왑공간, /tmp이 400MB이상 남아있어야 한다. 임시공간이 문제될 것이라 생각되면 TEMP환경변수와 TMPDIR 환경변수를 수정해준다. 예) export TEMP=/disk2/tmp

시스템 커널 파라메터 변경해야 한다. 주로 공유메모리와 관련된 파라미터를 늘려주어야 한다. 자세한 사항은 솔라리스 매뉴얼의 Tunable Parameter부분을 참고한다. /etc/system 파일은 매우 중요하므로 백업받은 후 수정하자.

root@wl ~ # cp /etc/system /etc/systemold

root@wl ~ # vi /etc/system

set semsys:seminfo_semmni=100

set semsys:seminfo_semmns=1024

set semsys:seminfo_semmsl=256

set semsys:seminfo_semvmx=32767

set shmsys:shminfo_shmmax=4294967295

set shmsys:shminfo_shmmin=1

set shmsys:shminfo_shmmni=100

set shmsys:shminfo_shmseg=10

root@wl ~ # sync; sync; reboot


오라클 계정을 생성한다. 오라클은 root로 설치할 수 없다. 오라클에서는 설치를 위해 oinstall 그룹, dba 그룹, oracle 유저를 생성하는 것을 권하고 있다.

root@wl ~ # groupadd -g 101 oinstall

root@wl ~ # groupadd -g 102 dba

root@wl ~ # useradd -d /export/home/oracle -g oinstall -G dba -m -u 103 -s /bin/bash oracle

root@wl ~ # passwd oracle


오라클 계정의 환경을 설정한다. ORACLE_HOME과 같은 중요한 환경 변수를 설정한다.

root@wl ~ # /usr/openwin/bin/xhost + # 빼먹지 말자

root@wl ~ # su - oracle

oracle@wl ~ $ mkdir oraapp # 오라클 어플리케이션이 설치될 곳. 2.5GB정도 필요

oracle@wl ~ $ mkdir oradata # 오라클 데이터가 설치될 곳. 1.2GB이상 필요

oracle@wl ~ $ chmod -R 775 oraapp

oracle@wl ~ $ vi .profile

DISPLAY=localhost:0.0; export DISPLAY # 다른 호스트의 X윈도우를 사용하려면 해당 호스트의 IP를 localhost대신 적는다.

DISPLAY=192.168.0.8:0.0; export DISPLAY

ORACLE_BASE=/export/home/oracle/oraapp; export ORACLE_BASE

ORACLE_SID=orcl; export ORACLE_SID

if [ -x /usr/local/bin/dbhome ] # 오라클 설치시 root.sh를 실행하면 dbhome이 존재하며 실행 가능하게 된다.

then

  ORACLE_HOME=`dbhome orcl`; export ORACLE_HOME

  PATH=$PATH:$ORACLE_HOME/bin; export PATH

  LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib

fi

# TNS_ADMIN 환경변수는 설정하지 않는다.

oracle@wl ~ $ . .profile

oracle@wl ~ $ cksum solarisx86_DB_10_1_0_3_Disk1.cpio.gz

3520147492      634888056       solarisx86_DB_10_1_0_3_Disk1.cpio.gz

oracle@wl ~ $ gunzip solarisx86_DB_10_1_0_3_Disk1.cpio.gz # 파일은 오라클 다운로드 페이지에서 받는다. 주1)

oracle@wl ~ $ cpio -idcmv < solarisx86_DB_10_1_0_3_Disk1.cpio

# Solaris 10에서는 oraparam.ini 와 oraparam.var 를 수정해야 한다.

oracle@wl ~ $ vi /Disk1/install/oraparam.ini

Solaris=5.6,5.7,5.8,5.9,5.10

oracle@wl ~ $ vi /Disk1/install/oraparam.var

Solaris=5.8,5.9,5.10

oracle@wl ~ $ cd Disk1

oracle@wl ~/Disk1 $ ./runInstaller


주1) 오라클 다운로드 사이트: 가기

~DB~.cpio.gz: Oracle 10g 데이터베이스

~CCD~.cpio.gz: Oracle 10g 컴패니언 시디

~CLIENT~.cpio.gz: Oracle 10g 클라이언트

~CRS~.cpio.gz: Oracle 10g 클러스터링(Cluster Ready Services)

가 있는데 이중 ~DB~와 ~CCD~를 받는다. cksum (CRC32유틸. 솔라리스 기본 제공)으로 다운로드 한 파일의 이상 유무를 반드시 확인해본다.

2. 오라클 및 오라클 컴패니언 설치

위와같이 한후 마지막에 runInstaller를 실행했다면 GUI화면이 뜰 것이다. 자바로 되어있어 썩 모양이 좋지는 않지만 그럭저럭 봐줄만 한다. 각각의 화면마다 선택해야할 것은 다음과 같다. 빠른 설치를 위해 설정은 대부분 기본값으로 해 놓았다. (필요한 설정은 이전에 .profile을 수정할 때 모두 했다) 또한 이 내용은 Oracle Quick Installation Guide의 내용이기도 하다. 스크린 제목 내용


Welcome Next를 클릭한다.


Specify Inventory Directory and Credentials 오라클 인벤토리설정 화면이다. 기본값으로 놔둔다. Next를 클릭하면 루트 권한으로 orainstRoot.sh를 실행하라고 나오는데 화면을 참조해 실행해준다.


Specify File Locations 파일이 설치될 디렉토리이다. $ORACLE_BASE/product/10.1.0/db_1에 설치된다. Next를 클릭한다.


Select Installation Type Enterprise Edition을 선택하고 Next를 클릭한다.


Select Database Configuration Next를 클릭한다.


Specify Database Configuration Options Global Database Name이 orcl로 되어있는 것을 확인한다. Database Character Set은 KO16KSC5601(완성형)으로 선택되어있는데, 필요하다면 KO16MSWIN949 (확장완성형)로 수정한다. 예제 스키마를 생성할 것인가를 물어보는데 체크하는 것이 테스트용으로 설치하는 목적에 부합할 것이다. Next를 클릭한다.


Select Database Management Option Next를 클릭한다.


Specify Database File Storage Option 위에서 생성한 디렉토리를 선택해준다. 기본값은 $ORACLE_BASE/oradata 이다.


Specify Backup and Recovery Options Next를 클릭한다.


Specify Database Schema Passwords 각각의 계정에 대해 암호를 입력한 후 Next를 클릭한다.


Summary 이제까지 설정한 것을 보여준다. 확인 후 Next를 클릭한다.


Install 인스톨 화면이다. 기다리면 다음 화면으로 자동으로 넘어간다.


Configuration Assistants 설정 화면이다. 데이터 베이스 생성이 끝나면 안내 메시지가 나오는데, 전역데이터베이스이름, SID식별자, http://localhost:5500/em 과 SYS,SYSTEM암호는 반드시 외워놓는다. OK를 클릭한 후 Next를 클릭하면 다음 화면으로 넘어간다.


Setup Privileges 루트 유저로 $ORACLE_HOME/root.sh 을 실행하라는 메시지가 나온다. 루트로 실행해준다. 나오는 메시지 중에서 필요한 것은 다음과 같다.

ORACLE_OWNER= oracle

ORACLE_HOME=/export/home/oracle/oraapp/product/10.1.0/Db_1



End of Installation 주어진 내용을 읽어본 후 Exit를 클릭해 인스톨러를 마친다. (포트 리스트는 $ORACLE_HOME/install/portlist.ini 에 있다.) 이것으로 인스톨을 모두 끝냈다.

Ultra Search URL: http://localhost:5620/ultrasearch

Ultra Search Administration Tool URL: http://localhost:5620/ultrasearch/admin

iSQL*Plus URL: http://localhost:5560/isqlplus

iSQL*Plus DBA URL: http://localhost:5560/isqlplus/dba

Enteprise Manager 10g Database Control URL: http://localhost:5500/em



여기까지 하면 오라클의 설치가 끝난것이다. 여기까지만 설치하더라도 오라클의 운영에는 문제 없지만, 좀 더 편한 관리를 위해 컴패니언을 설치한다. (필자는 오라클은 컴패니언까지 인스톨해야 한다고 보고 있다)

oracle@wl ~ $ cksum solarisx86_CCD_10_1_0_3_Disk1.cpio.gz

4119132538      438221549       solarisx86_CCD_10_1_0_3_Disk1.cpio.gz

oracle@wl ~ $ rm -rf Disk1 # 기존에 압축 풀었던 오라클 데이터베이스 인스톨 파일을 지운다

oracle@wl ~ $ gunzip solarisx86_CCD_10_1_0_3_Disk1.cpio.gz

oracle@wl ~ $ cpio -idcmv < solarisx86_CCD_10_1_0_3_Disk1.cpio

oracle@wl ~/Disk1 $ ./runInstaller


3. 오라클 패치

오라클 패치는 오라클을 구매했을때 주는 CID를 이용해 메타링크(http://metalink.oracle.com) 에 가입한 후 받을 수 있다. 직접 패치하는것도 좋지만, 오라클 전문가의 도움을 받는것도 좋을 것이다.

다음은 패치# 2617419(OPatch 1.0.0.0.55), 4751926 (CPUJan2006)를 설치하는 예를 보인 것이다.

oracle@saturn4 ~ $ echo $ORACLE_HOME

/export/home/oracle/oraapp/OraHome_1

oracle@saturn4 ~ $ echo $PATH

/usr/local/bin:/usr/sfw/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/ccs/bin:/export/home/oracle/oraapp/OraHome_1/bin

oracle@saturn4 ~ $ echo $LD_LIBRARY_PATH

/usr/local/xml/lib:/usr/lib:/usr/local/lib:/usr/ucblib:/usr/ccs/lib:/usr/sfw/lib:/export/home/oracle/oraapp/OraHome_1/lib

oracle@saturn4 ~ $ unzip p2617419_10102_GENERIC.zip

... # OPatch 디렉토리 생성됨

oracle@saturn4 ~ $ cp -r OPatch/ ./oraapp/OraHome_1/

oracle@saturn4 ~ $ unzip p4751926_10103_SOLARISx86.zip

... # README.html, 4751926 디렉토리 생성됨. README.html은 읽어볼것.

oracle@saturn4 ~ $ cd 4751926

oracle@saturn4 ~/4751926 $ /export/home/oracle/oraapp/OraHome_1/OPatch/opatch apply


Oracle Interim Patch Installer version 1.0.0.0.55

Copyright (c) 2006 Oracle Corporation. All Rights Reserved..


We recommend you refer to the OPatch documentation under

OPatch/docs for usage reference. We also recommend using

the latest OPatch version. For the latest OPatch version

and other support related issues, please refer to document

293369.1 which is viewable from metalink.oracle.com


Oracle Home = /export/home/oracle/oraapp/OraHome_1

Location of Oracle Universal Installer components = /export/home/oracle/oraapp/OraHome_1/oui

Location of OraInstaller.jar  = "/export/home/oracle/oraapp/OraHome_1/oui/jlib"

Oracle Universal Installer shared library = /export/home/oracle/oraapp/OraHome_1/oui/lib/intelsolaris/liboraInstaller.so

Location of Oracle Inventory Pointer = /var/opt/oracle/oraInst.loc

Location of Oracle Inventory = /export/home/oracle/oraapp/OraHome_1/inventory

Path to Java = /export/home/oracle/oraapp/OraHome_1/jre/1.4.2/bin/java

Log file = /export/home/oracle/oraapp/OraHome_1/.patch_storage//*.log


Creating log file "/export/home/oracle/oraapp/OraHome_1/.patch_storage/4751926/Apply_4751926_03-21-2006_11-49-00.log"


Invoking fuser to check for active processes.


Invoking fuser on "/export/home/oracle/oraapp/OraHome_1/bin/oracle"

Invoking fuser on "/export/home/oracle/oraapp/OraHome_1/bin/lsnrctl"

Invoking fuser on "/export/home/oracle/oraapp/OraHome_1/bin/tnslsnr"

Backing up comps.xml ...


OPatch detected non-cluster Oracle Home from the inventory and will patch the local system only.



Please shut down Oracle instances running out of this ORACLE_HOME

(Oracle Home = /export/home/oracle/oraapp/OraHome_1)

Is this system ready for updating?

Please respond Y|N >

Y 1)

Executing the Apply pre-patch script (/export/home/oracle/4751926/custom/scripts/pre)...

Applying patch 4751926...


Patching archive files...


Patching jar files...


Patching copy files...


Creating new directory "/export/home/oracle/oraapp/OraHome_1/cpu/CPUJan2006/MODPLSQL/owa_all/90"

Creating new directory "/export/home/oracle/oraapp/OraHome_1/olap/admin"

Creating new directory "/export/home/oracle/oraapp/OraHome_1/cpu/CPUJan2006/MODPLSQL/owa_all/30"

Creating file to hold list of directories that were mkdir'ed: "/export/home/oracle/oraapp/OraHome_1/.patch_storage/4751926/opatch_dirs_created.lst"

Running make for target client_sharedlib.


Running make for target ioracle.


Running make for target iexp.


Running make for target iimp.


Running make for target iexpdp.


Running make for target iimpdp.


Running make for target libnmuc.


Running make for target libnmemso.


Running make for target ilsnrctl.


Running make for target itnslsnr.


Running make for target ictxload.




Inventory is good and does not have any dangling patches.



Updating inventory...


Verifying patch...

  Verifying that patch ID is in Oracle Home inventory.


  Verifying copy files.


  Verifying jar files.


  Verifying archive files.


OPATCH_VERIFY_OK: Patch has been applied.


Backing up comps.xml ...


********************************************************************************

********************************************************************************

**                                ATTENTION                                   **

**                                                                            **

** Please note that the Security Patch Installation (Patch Deinstallation) is **

** not complete until all the Post Installation (Post Deinstallation)         **

** instructions noted in the Readme accompanying this patch, have been        **

** successfully completed.                                                    **

**                                                                            **

********************************************************************************

********************************************************************************

Executing the Apply post-patch script (/export/home/oracle/4751926/custom/scripts/post)...


OPatch succeeded.

oracle@saturn4 ~/4751926 $ cd $ORACLE_HOME/cpu/CPUJan2006

oracle@saturn4 ~/oraapp/OraHome_1/cpu/CPUJan2006 $ sqlplus /nolog

SQL> connect / as sysdba

SQL> STARTUP

SQL> @catcpu.sql 2)

SQL> QUIT

oracle@saturn4 ~/oraapp/OraHome_1/cpu/CPUJan2006 $ cd $ORACLE_HOME/rdbms/admin

oracle@saturn4 ~/oraapp/OraHome_1/rdbms/admin $ sqlplus /nolog

SQL> connect / as sysdba

SQL> STARTUP

SQL> @utlrp.sql 3)

SQL> select OBJECT_NAME from DBA_OBJECTS where status = 'INVALID'; 4)


no rows selected


SQL> QUIT

oracle@saturn4 ~/oraapp/OraHome_1/rdbms/admin $


1) 오라클관련 인스턴스가 모두 종료되었는지 물어보는 프롬프트. 준비되었으면 Y를 입력하고 엔터를 친다.

2) 오랫동안 걸리는 패치가 끝났다. 패치 이후 스크립트를 실행시킨다.

3) 만약 있을지도 모르는 INVALID 객체를 제거하기 위해 실행한다.

4) no rows selected 가 나오면 정상이다.


4. 오라클 인스턴트 클라이언트 설치

Oracle Instant Client는 오라클 10g에서 새롭게 선 보이는 배포버전이다. 오라클 OCI 라이브러리와 SDK, SQL*Plus, JDBC드라이버만을 지원해준다.

파일이름                                                 크기(바이트)   CRC32

instantclient-basic-solarisx86-10.1.0.3-20050404.zip     30,141,480     4208528557

instantclient-jdbc-solarisx86-10.1.0.3-20050404.zip       4,572,527      556902813

instantclient-sqlplus-solarisx86-10.1.0.3-20050404.zip      266,435      793421160

instantclient-sdk-solarisx86-10.1.0.3-20050404.zip          293,993     1919831458


root@wl ~ # unzip instantclient-basic-solarisx86-10.1.0.3-20050404.zip

root@wl ~ # unzip instantclient-sqlplus-solarisx86-10.1.0.3-20050404.zip

root@wl ~ # unzip instantclient-sdk-solarisx86-10.1.0.3-20050404.zip

root@wl ~ # unzip instantclient-jdbc-solarisx86-10.1.0.3-20050404.zip

root@wl ~ # mv instantclient10_1 /usr/local/instantclient10_1

root@wl ~ # vi /usr/local/instantclient10_1/tnsnames.ora

ORCL =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = orcl)

    )

  )

root@wl ~ # vi /etc/profile

# for Oracle Instant Client

if [ -d /usr/local/instantclient10_1 ]

then

  LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/instantclient10_1; export LD_LIBRARY_PATH

  PATH=$PATH:/usr/local/instantclient10_1; export PATH;

  NLS_LANG=Korean_Korea.KO16KSC5601; export NLS_LANG;

  TNS_ADMIN=/usr/local/instantclient10_1; export TNS_ADMIN;

  SQLPATH=/usr/local/instantclient10_1; export SQLPATH;

fi

root@wl ~ # sqlplus 사용자아이디/사용자패스워드@//호스트주소:포트/DB이름


* 오라클 인스턴트 클라이언트는 라이브러리 파일 크기가 크기 때문에, 가상 메모리를 많이 소모한다.

5. 오라클 관련 어플리케이션 설정

모든 오라클 관련 어플리케이션은 ORACLE_HOME 환경변수가 있어야 동작한다. 따라서 톰캣이나 아파치/PHP을 사용할 때에도 웹서버를 띄우기 전에 ORACLE_HOME이 환경변수에 존재하는지 확인해야 한다.

한글문제 해결의 기본은 NLS_LANG 환경 변수를 지정해주는 것이다. NLS_LANG=Korean_Korea.KO16KSC5601 또는 NLS_LANG=American_America.KO16MSWIN949 의 조합으로도 사용할 수 있다. 오라클 데이터베이스에 접속하기 전에 NLS_LANG 환경 변수가 존재하며, 올바르게 설정되었는지 반드시 확인해야 한다.

오라클 시작/종료


# 오라클 데이터베이스 시작.

oracle@wl ~ $ sqlplus /nolog # 'dbstart' 스크립트를 이용할 수도 있다.

SQL> connect sys/패스워드 as sysdba

SQL> startup

SQL> exit

oracle@wl ~ $ lsnrctl start # 리스너 시작 (외부에서 접속하기 위해서는 필요하다)

oracle@wl ~ $ searchctl start # Ultra Search 시작

oracle@wl ~ $ isqlplusctl start # iSQL*Plus 시작

oracle@wl ~ $ emctl start dbconsole # OEM(Oracle Enterprise Manager) 시작


# 인스톨 이후. 오라클을 시작한 상태에서 실행한다.

# PL/SQL 모듈 재 컴파일

oracle@wl ~ $ sqlplus "/ AS SYSDBA"

SQL> @?/rdbms/admin/utlrp.sql

# 스태틱 라이브러리 생성

oracle@wl ~ $ $ORACLE_HOME/bin/genclntst


# 종료

oracle@wl ~ $ emctl stop dbconsole

oracle@wl ~ $ isqlplusctl stop

oracle@wl ~ $ searchctl stop

oracle@wl ~ $ lsnrctl stop

oracle@wl ~ $ sqlplus /nolog # 'dbshut' 스크립트를 이용할 수도 있다.

SQL> connect sys/패스워드 as sysdba

SQL> shutdown immediate

SQL> exit

oracle@wl ~ $


Java와 Oracle연동

* 자바용 오라클 JDBC드라이버는 크게 두가지가 있다. 하나는 THIN을 지원해주는 드라이버고 다른 하나는 OCI기반의 드라이버이다. THIN드라이버의 경우 오라클 라이브러리를 설치할 필요 없다는 장점이있다. (성능은 비슷한것으로 판단된다) 아래는 THIN드라이버를 기준으로 한다.

* Java 1.4인 경우 $ORACLE_HOME/jdbc/lib/ojdbc14.jar 과 $ORACLE_HOME/jdbc/lib/orai18n.jar 를 CLASS_PATH 에 환경변수 넣어준다.

* Java 1.2, Java 1.3인 경우 $ORACLE_HOME/jdbc/lib/classes12.jar 과 $ORACLE_HOME/jdbc/lib/nls_charset12.jar 를 환경변수 CLASS_PATH에 넣어준다.


PHP 와 Orale연동

* PHP컴파일시 ./configure부분을 다음으로 대체한다. 반드시 설치하기 전에 오라클에 설치되어있어야 하며 컴파일 할때 환경 변수 ORACLE_HOME 이 설정되어있어야 한다.

root@wl ~/php-5.0.4 # . ~oracle/.profile

root@wl ~/php-5.0.4 # ./configure \

 --prefix=/usr/local/php \

 --with-apxs2=/usr/local/apache2/bin/apxs \

 --with-mysql=/usr/local/mysql \

 --with-mysqli=/usr/local/mysql/bin/mysql_config \

 --with-oci8 \

 --enable-sigchild \

 --with-iconv \

 --with-libxml-dir=/usr/local/xml \

 --enable-modules=so \

 --enable-mbstring \

 --enable-mbregex \

 --with-gd \

 --enable-gd-native-ttf \

 --with-jpeg-dir=/usr/sfw \

 --with-png-dir=/usr/sfw \

 --with-zlib-dir=/usr/local

root@wl ~/php-5.0.4 # make

root@wl ~/php-5.0.4 # make install


* PHP 4.3.11, PHP 5.0.4부터 오라클 인스턴트 클라이언트(Oracle Instant Client)를 공식 지원한다. 아래는 PHP 5.2.x에서의 인스턴트 클라이언트를 이용한 방법이다. 4.3.x, 5.0.x에서는 설정 방법이 약간 다르다.


root@wl ~/php-5.2.3 # ./configure \

 --prefix=/usr/local/php \

 --with-apxs2=/usr/local/apache2/bin/apxs \

 --with-mysql=/usr/local/mysql \

 --with-mysqli=/usr/local/mysql/bin/mysql_config \

 --with-oci8=instantclient,/usr/local/instantclient10_1 \

 --enable-sigchild \

 --with-iconv \

 --with-libxml-dir=/usr/local/xml \

 --enable-modules=so \

 --enable-mbstring \

 --enable-mbregex \

 --with-gd \

 --enable-gd-native-ttf \

 --with-jpeg-dir=/usr/sfw \

 --with-png-dir=/usr/sfw \

 --with-zlib-dir=/usr/local

root@wl ~/php-5.2.3 # make

root@wl ~/php-5.2.3 # make install


* 필자가 확인한 결과 PHP 5.0.x에서는 오라클의 커넥션이 끊어지지 않는 현상이 있다. 꼭 솔라리스에 국한된 문제는 아니며, OCI라이브러리를 사용하던 인스턴트 클라이언트를 사용하던 결과는 같다. 상용 서비스에서 오라클이 필요하다면 PHP 4.4.x를 사용하도록 한다. 설치방법은 PHP 5.0.x와 같다. 꼭 PHP 5를 사용해야 한다면, PHP 4.4.0의 OCI익스텐션 소스를 PHP 5.0.x소스에 덮어써 해결할 수 있다고 한다. PHP버그ID 32361 번 (http://bugs.php.net/bug.php?id=32361)에서 확인할 수 있다. 이는 PHP 5.1.2에서 해결되었다.

Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요