태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

이것은 오라클 패치 과정이 정상적으로 수행되지 않아 발생하는 에러 입니다.
다음과 같이 조치하면 됩니다.

1. 오라클 서버에 sys 계정으로 접속합니다.
    > sqlplus "sys/sys암호 as sysdba"

2. 다른 사용자의 접속을 방지하기 위해서
    SQL> shutdown immediate;
    SQL> startup migrate;

3. 문제가 되는 칼럼을 추가합니다.
    SQL> alter table sys.mon_mods$ add ( drop_segments number default 0 );

4. 카탈로그를 다시 정리해야 합니다. (아래의 SQL 들은 ORACLE_HOME/rdbms/admin 에 있습니다.)
    SQL> @catalog.sql
    SQL> @catpatch.sql

5. 서버를 내렸다가 다시 올리면 됩니다.
    SQL> shutdown ;
    SQL> startup ;

끝.
Posted by bomsoft
TAG Oracle
/*****************************************************************
특정 테이블에 row가 추가/변경/삭제된 경우에 작동되는 트리거 샘플입니다.
추가/변경/삭제가 되면 그 row의 key 값을 지정한 테이블 (tb_log)에 저장하는 간단한 예입니다.
*****************************************************************/

CREATE OR REPLACE TRIGGER trigger_name
    AFTER INSERT OR UPDATE OR DELETE ON table_name
    FOR EACH ROW

BEGIN
   IF INSERTING THEN
         INSERT INTO Tb_log VALUES ( :NEW.table_key, '0');
   ELSIF UPDATING THEN
         INSERT INTO Tb_log VALUES ( :NEW.table_key, '1');
   ELSIF DELETING THEN
         INSERT INTO Tb_log VALUES ( :OLD.table_key, '2');
   END IF;
   EXCEPTION
       WHEN OTHERS THEN
       RETURN;
END;
/
Posted by bomsoft
TAG Oracle, RP, SQL, Trigger

데이터베이스 유저 아이다와 암호가 "user1", "passwd" 라고 가졍합니다.

String hostname= "host1";  // 오라클 데이테베이스가 운영되고 있는 서버명, 혹은 아이피.
String portnum = "1521";   // 접속 포트 번호, 일반적으로 1521 입니다.
String dbname = "orcl";   // 오라클 데이터베이스 인스턴스 이름.
String dbuser= "user1";
String dbpass= "passwd";

public java.sql.Connection get_connection (String hostname, String portnum, String dbname, String dbuser, String dbpass)
   
throws Exceptions
{      
    String dburl = "jdbc:oracle:thin:@" + hostname + ":" + portnum + ":" + dbname ;
    Class.forName("oracle.jdbc.driver.OracleDriver");
    java.sql.Connection conn = DriverManager.getConnection(dburl, dbuser, dbpass);
    return conn;
}

Posted by bomsoft
TAG java, jdbc, Oracle, RP

[설명]  TABLE_1에 다음과 같이 중복된 데이터가 있다면, SEQNO = 1234 인 두개의 ROW중에서 하나만 삭제하고 싶은 경우에...

SEQNO    DATA_1
-------------------
1234       1000
1234       1000
1235       1200
1236       1250
--------------------

[샘플 코드]
DELETE FROM TABLE_1 A
WHERE ROWID > (SELECT MIN(ROWID)
                           FROM TABLE_1 B
                            WHERE A.SEQNO = B.SEQNO) ;

와 같이 하면 됩니다.

Posted by bomsoft

Oracle 데이터베이스를 노아카이브 모드에서 아카이브 모드로 전환하는 방법입니다.

1) init.ora 파일에 아카이브 모드와 관련된 파라메터를 설정하십시오
    LOG_ARCHIVE_START=true
    LOG_ARCHIVE_DEST=d:ora92databasearchive          -- 아카이브 파일이 저장될 위치
    LOG_ARCHIVE_FORMAT=ARC%S.%T                           -- 아카이브 파일의 이름 형식

    [ %s ] 자동으로 생성될 아카이브 파일의 일련번호를 결정해 줍니다.
    (예) 1, 2, 3,,,

    [ %S ] 자동으로 생성될 아카이브 파일의 일련번호를 0 값으로 채워서 결정해 줍니다.
    (예) 00001, 00002, 00003 ……

    [ %t ] 데이터베이스가 하나의 인스턴스인지 또는 여러 개의 인스턴스(OPS 환경)로 구성되어 있는지를 구분하여 표시해 줍니다.
    (예) 1, 2, 3, ,,,

    [ %T ] 데이터베이스가 하나의 인스턴스인지 또는 여러 개의 인스턴스(OPS 환경)로 구성되어 있는지를 0 값으로 채워서 결정해 줍니다.
    (예) 001, 002, 003,,,

2) 데이터베이스를 아카이브 모드로 전환하기 위해서는 데이터베이스를 다시 시작해야 하며 마운트(mount) 단계에서  DATABASE를 변경하는 명령어를 실행해야 합니다.

    SQL> startup mount;
    SQL> ALTER DATABASE ARCHIVELOG;   -- 반대는 ALTER DATABASE NOARCHIVELOG;
    SQL> alter database open;

3) 전환작업이 완료되었으면 환경설정이 제대로 되었는지 확인해 보십시오.

    SQL> CONNECT / AS SYSDBA
    SQL> ARCHIVE LOG LIST ;
    Database log mode Archive Mode
    Automatic archival Enabled
    Archive destination C:oracleora92databasearch
    Oldest online log sequence 51
    Current log sequence 53

    SQL> SET LINESIZE 1000
    SQL> SELECT GROUP#, SEQUENCE#, ARCHIVED, STATUS FROM V$LOG;
    GROUP# SEQUENCE# ARC STATUS
    ---------- ---------- ----- ----------------
    1 52 YES INACTIVE
    2 53 NO CURRENT
    3 51 NO INACTIVE

    -- ARC 컬럼의 값이 "YES"는 아키이브 모드라는 것을 의미합니다.

Posted by bomsoft
TAG Oracle