달력

3

« 2024/3 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2013. 6. 21. 17:07

오라클 리스너 에러 그거/DB2013. 6. 21. 17:07

퇴근 5분전에 회사에서 보안 뭐시기 때문에 프로그램을 설치하라 그래서 설치하고 퇴근..

다음날 와서 보니.. PC 에 설치한 Oracle DB 에 접속이 안되는 문제가...


원인을 확인해보니. listener 가 죽어있다..

서비스에서 아무리 재시작을 해도 계속 죽는다...


프로그램 설치 후에 발생한 문제라서, 보안 담당자한테 물어봤더니

"PC 의 호스트네임이 바뀝니다" 라는... 이런 써글..


product\11.2.0\dbhome_1\NETWORK\ADMIN 경로에 보면


listener.ora 파일이 있는데,


LUCKYDB_LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

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

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

    )

  )


원래 이랬던 내용이다..


리스너에서 PC 의 호스트네임을 사용한다는...


그래서 아래와 같이 바뀐 호스트네임으로 바꿔주고.


LUCKYDB_LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

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

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

    )

  )



lsnrctl LUCKYDB_LISTENER start

했더니.. 잘 뜨네...

근데 문제는!!!

EM(Enterprise Manager)가 뜰 생각을 않는다..

이건 뭘 고쳐야 되는겨.. 아쒸.. ㅜㅜ


:
Posted by 뽀기
2013. 4. 30. 14:46

테이블 데이터 복사 그거/DB2013. 4. 30. 14:46

A 테이블

ID        VARCHAR2 (63) NOT NULL,

CONTENT   VARCHAR2 (1000) NOT NULL,

CRE_DATE      DATE NOT NULL,

UPD_DATE      DATE NOT NULL,

TYPE      VARCHAR2 (5) NOT NULL,

USER_ID       VARCHAR2 (63),

GUBUN     CHAR (1),

ETC           VARCHAR2 (10),

DOMAIN_ID     VARCHAR2 (63) DEFAULT 'DEFAULT' NOT NULL


A 테이블의 데이터

ID 

CONTENT 

CRE_DATE 

UPD_DATE 

TYPE 

USER_ID 

GUBUN 

ETC 

DOMAIN_ID 

 EX00001

내용 

2013/04/30 

 2013/04/30

 ERROR

LUCKY 

DOMAIN1 

 EX00002

내용 

2013/04/30 

 2013/04/30 

 ERROR

 LUCKY 

U

N

DOMAIN2 

... 

... 

... 

... 

... 

 ...

 ...

 ...

.. 

 EX00100

 내용 

 2013/04/30 

 2013/04/30 

 ERROR

 LUCKY 

U

N

DOMAIN1 



위와 같은 상황에서


A 테이블의 데이터 중에 DOMAIN_ID 가 'DOMAIN1' 인 데이터를 B 테이블을 새로 만들어서 복사하고자 할 경우


create table B 

as

select 

ID, CONTENT, CRE_DATE, UPD_DATE, TYPE, USER_ID, GUBUN, ETC, DOMAIN_ID

from A where domain_id = 'DOMAIN1'


구문을 사용하면 된다.



이걸 이용해서, A 테이블에서 DOMAIN_ID 가 'DOMAIN1' 인 데이터에 대해서 

DOMAIN_ID 를 'DOMAIN2' 로 A 테이블에 복사하고자 할 경우에는


1. DOMAIN1 데이터를 B 테이블에 임시 복사

2. B 테이블의 데이터를 A 테이블에 DOMAIN2 로 변경해서 복사


를 하면 된다.



QUERY 는 아래처럼~


create table B as select * from a where domain_id = 'DOMAIN1';

insert into A values(id, content, cre_date, upd_date, type, user_id, gubun, etc, domain_id)

   select id, content, sysdate, sysdate, type, user_id, gubun, etc, 'DOMAIN2' from B;


==> 더 간단하게는... 아래와 같이~



insert into A values(id, content, cre_date, upd_date, type, user_id, gubun, etc, domain_id)

   select id, content, sysdate, sysdate, type, user_id, gubun, etc, 'DOMAIN2' from A where domain_id = 'DOMAIN1';



:
Posted by 뽀기
2012. 1. 31. 15:28

Oracle 11g EM 비밀번호 만료 오류 그거/DB2012. 1. 31. 15:28


1. 우선 sqlplus로 접속합니다.(dba 권한이 있는 user 로)

sqlplus "system/password"



2. 계정의 상태를 확인합니다.

SQL> select * from dba_users;

USERNAME    ACCOUNT_STATUS    EXPIRY_DATE
SYSMAN         EXPIRED                   2012.01.03
DBSNMP         EXPIRED                   2012.01.03


3. 위 두계정의 잠금을 풀어줍니다.

SQL> alter user sysman identified by 'new password';
SQL> alter user dbsnmp identified by 'new password';



끝!!!!!
 
:
Posted by 뽀기

oracle 11g 를 설치해서 쓰던 도중...

"비밀번호가 만료되었습니다." 라고 에러가 나서 확인해보니...

따로 설정을 바꾸지 않는 이상 기본으로 180일의 비밀번호 만료 기간이 설정된다고 하는군요!

SQL> SELECT RESOURCE_NAME, LIMIT FROM DBA_PROFILES WHERE PROFILE='DEFAULT';

RESOURCE_NAME                    LIMIT
-------------------------------- ----------------------------------------
.......

PASSWORD_LIFE_TIME               180

.......

PASSWORD_GRACE_TIME              7
바로 PASSWORD_LIFE_TIME               180 요 부분입니다.

아래와  같이 변경해줍니다.
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

프로파일이 변경되었습니다.

이미 비밀번호가 만료된 사용자는 다음과 같이 확인할 수 있습니다.
SQL> SELECT USERNAME, ACCOUNT_STATUS, LOCK_DATE, EXPIRY_DATE FROM DBA_USERS WHERE USERNAME='USERNAME';

USERNAME                       ACCOUNT_STATUS                   LOCK_DAT
------------------------------ -------------------------------- --------
EXPIRY_D
--------
USERNAME                       EXPIRED
11/10/04

이 사용자는 아래와 같이 비밀번호를 변경하여 줍니다.
SQL> alter user USERNAME identified by USERNAME;
사용자가 변경되었습니다.

비밀번호 만료가 해제됐는지 확인해봅니다.
SQL> SELECT USERNAME, ACCOUNT_STATUS, LOCK_DATE, EXPIRY_DATE FROM DBA_USERS WHERE USERNAME='USERNAME';

USERNAME                       ACCOUNT_STATUS                   LOCK_DAT
------------------------------ -------------------------------- --------
EXPIRY_D
--------
USERNAME                       OPEN

'그거 > DB' 카테고리의 다른 글

테이블 데이터 복사  (0) 2013.04.30
Oracle 11g EM 비밀번호 만료 오류  (0) 2012.01.31
파티션 테이블 조회하기  (0) 2011.07.26
[DB] MSSQL 실행된 쿼리 조회하기...  (0) 2010.01.29
MSSQL 에서 페이징하기  (0) 2009.07.06
:
Posted by 뽀기
2011. 7. 26. 15:54

파티션 테이블 조회하기 그거/DB2011. 7. 26. 15:54

SELECT *  FROM TABLE_NAME PARTITION (PARTITION_NAME);

:
Posted by 뽀기
2010. 1. 29. 18:59

[DB] MSSQL 실행된 쿼리 조회하기... 그거/DB2010. 1. 29. 18:59


오라클의 archive를 조회하는 것 처럼.

MSSQL에서도 이미 실행된 쿼리들을 조회할 수 있답니다.


select
db_name(st.dbid) DBName
,qs.total_elapsed_time
,creation_time
,last_execution_time,text
from sys.dm_exec_query_stats qs cross apply sys.dm_exec_sql_text(qs.plan_handle)st
join sys.dm_exec_cached_plans cp on qs.plan_handle = cp.plan_handle
where creation_time >= '2010-01-01 00:00:00'
--and db_name(st.dbid) is not null and cp.objtype = 'proc' --조건: 종류
and text like '%delete%'
order by last_execution_time desc;

이렇게 하면 된답니다.

실행된 파라미터까지 정확히 나오지는 않는듯 합니다.....
@1 이런식으로 나오네요..

:
Posted by 뽀기
2009. 7. 6. 21:05

MSSQL 에서 페이징하기 그거/DB2009. 7. 6. 21:05


ORACLE, MYSQL에서 페이징은 수도 없이 해봤는데...(그렇다고 잘아는건 아니지만)
MSSQL에서는 정말 오랜만에(처음일 수도 있다는...) 페이징 쿼리를 만들었다...
이게 제대로 동작을 하는것 같긴 한데..

테이블은 아래와 같이 3개가 있다.

tbl_user : 사용자 정보
tbl_rcv_fax : 팩스 수신 목록
tbl_fax_pool : 팩스 번호 관리

테이블 3개를 조인해야 되는 조건인데..
처음에는 테이블을 전부 조인한 후에 페이징을 했더니.. 쿼리 실행하면 미친다 -_-;
그래서, 실제 필요한 데이터에 대해서(팩스 수신 목록)만 먼저 페이징을 했다.
그리고, 나중에 조인을 했다.. 그랬더니.. 잘된다. ㅎㅎ

tbl_fax_pool.group_id = tbl_user.group_id
tbl_fax_pool.fax_num = tbl_rcv_fax.rcv_fax_num

요런 조인이다.







-- FAX 수신 목록 조회
select RCV.RNUM,
 USR.USER_ID, USR.NAME_KOR, USR.GROUP_ID, USR.ORG_CD,USR.ORG_NM, POOL.FAX_NUM,
 RCV.SEQ_NO, RCV.RCV_TIME, RCV.SVR_IP, RCV.FILE_URL, RCV.FILESIZE, RCV.TOTAL_PCOUNT,
 RCV.RCV_FAX_NUM, RCV.CALLER_ID, RCV.MAIL_FLAG, RCV.PORT_NUM
from
( -- RCV 수신 목록 테이블에서 추출한 데이터와 POOL, USER 테이블과 조인
 select * from ( -- T1 RNUM을 이용해 페이징 처리
  select top
    (
     select count(seq_no) from tbl_rcv_fax with(index(pk_tbl_rcv_fax),nolock)
     where rcv_time between '2009-06-09' and '2009-06-23'
    ) -- 수신 목록 테이블에서 해당 날짜의 전체 개수 추출
   ROW_NUMBER() OVER (ORDER BY SEQ_NO DESC) AS RNUM,
   seq_no, rcv_time, svr_ip, file_url,
   filesize, total_pcount, rcv_fax_num,
   caller_id, mail_flag, port_num
  from tbl_rcv_fax WITH(INDEX(PK_tbl_rcv_fax), NOLOCK)
  where rcv_time BETWEEN '2009-06-09' AND '2009-06-23'
  order by seq_no desc
 ) T1
 WHERE T1.RNUM >= 21 AND T1.RNUM <= 30  -- 여기에 각 페이지별로 보여줄 시작/끝 번호를 넣어주면 된다.
) RCV, TBL_FAX_POOL POOL, TBL_USER USR
WHERE RCV.RCV_FAX_NUM = POOL.FAX_NUM AND POOL.GROUP_ID = USR.GROUP_ID
ORDER BY RCV.RNUM


아래는 실행계획의 일부이다. 솔직히 실행계획 볼 줄 모른다.
그래도. 쿼리는 빨리 되는것 같다. -_-;


:
Posted by 뽀기
2009. 4. 30. 17:21

ORA-01843 : 지정한 월이 부적합합니다. 그거/DB2009. 4. 30. 17:21


통계 데이터를 뽑으려고 테이블에다가 쿼리를 날렸는데.

계속 요딴 에러가 나는거다 -_-;


select a.ifid, a.ifnm, a.frsysid, a.tosysid, frsysid || '=>' || tosysid as ifdesc, b.createdate
    from ifrule a, msg_log b
    where a.ifid = b.ifid
    and (substr(a.tranid,0,2) <> 'EX' and substr(a.tranid,0,2) <> 'te' or a.tranid is null)
    and a.useyn = 'Y'
    and (a.ifnm not like '%테스트%' and a.ifnm not like '%TES%')
    and a.ifid != 'IM_CIS-ZZ_0001'
    and b.createdate >= '2009-04-01' and b.createdate <= '2009-04-30'
    order by ifdesc

요런 쿼리를 날렸는데..

아무리 눈을 까고 봐도, createdate 에 준 날짜가 잘못된게 없는데...

자꾸 에러를 틱틱~ 뱉어내니. 환장할 노릇..

뒤져봤더니..

alter session set nls_date_format='yyyy-mm-dd';
alter session set nls_timestamp_format = 'yyyy-mm-dd HH24:MI:SSXFF';

요런걸 해야 된단다...

그래서, 위에거(alter session set nls_date_format='yyyy-mm-dd';) 만 하고 실행했는데..

그래도 에러를 틱틱 뱉고 GR 이다 -_-;

혹시나... 해서 테이블을 봤다.

desc msg_log;
Name                           Null     Type
----------------------------- --------- ------------
GID                            NOT NULL VARCHAR2(32)
IFID                           NOT NULL VARCHAR2(30)
RESPONSECODE                            VARCHAR2(10)
RESPONSEMESSAGE                         VARCHAR2(200)
IFSTATUS                                VARCHAR2(1) 
DEST                                    VARCHAR2(100)
ELP02                                   TIMESTAMP(6)
ELP03                                   TIMESTAMP(6)
ELP06                                   TIMESTAMP(6)
ELP07                                   TIMESTAMP(6)
ELPIP                                   VARCHAR2(15)
CREATEDATE                     NOT NULL TIMESTAMP(6)
FRSYSIP                                 VARCHAR2(16)

이런. 쉬뚜...

CREATEDATE가 TIMESTAMP 다. -_-;

그래서 아래꺼(alter session set nls_timestamp_format = 'yyyy-mm-dd HH24:MI:SSXFF';)도 했다.

잘된다.

ㅜㅜ
:
Posted by 뽀기

Atab
ifid varchar(15)
snuserid varchar(6)

Btab
ifid varchar(15)
frempid varchar(6)
frsysgn varchar(10)
createempid varchar(6)

declare
  -- cursor 선언(update 할 값을 select 한다.)
  cursor ifinfo_cur is
    select a.ifid ifid, a.snuserid userid from Atab a, Btab b
        where a.ifid = b.ifid and (b.frempid is null or b.createempid is null);

begin
  -- loop 을 돌면서 위에서 얻은 값을 적용한다.
  for ifinfo_rec in ifinfo_cur loop
    update Btab set aa = ifinfo_rec.userid where ifid = ifinfo_rec.ifid;
  end loop;
end;

'그거 > DB' 카테고리의 다른 글

MSSQL 에서 페이징하기  (0) 2009.07.06
ORA-01843 : 지정한 월이 부적합합니다.  (0) 2009.04.30
TOAD에서 Explain plan 사용하기  (0) 2007.08.02
[Oracle] recursive select  (0) 2007.08.02
테이블의 FK 잠깐 꺼 놓는 방법  (0) 2007.08.01
:
Posted by 뽀기
2007. 8. 2. 18:10

TOAD에서 Explain plan 사용하기 그거/DB2007. 8. 2. 18:10


1. TOAD 에서 설정하기
   TOAD 툴 메뉴에서

View -> Options -> Oracle -> General -> Explain name for Table name


   위 메뉴로 이동한다.

   explain plan에서 사용할 plan table 명을 적는 곳이 있는데,
   초기에는 TOAD_PLAN_TABLE 이라고 적혀있는데,
   자신에 맞는 PLAN_TABLE 로 변경한다.

2. 사용할 plan table이 없다면 아래 스크립트를 이용하여 생성한다.

CREATE TABLE PLAN_TABLE
(
  STATEMENT_ID     VARCHAR2(30 BYTE),
  TIMESTAMP        DATE,
  REMARKS          VARCHAR2(80 BYTE),
  OPERATION        VARCHAR2(30 BYTE),
  OPTIONS          VARCHAR2(30 BYTE),
  OBJECT_NODE      VARCHAR2(128 BYTE),
  OBJECT_OWNER     VARCHAR2(30 BYTE),
  OBJECT_NAME      VARCHAR2(30 BYTE),
  OBJECT_INSTANCE  INTEGER,
  OBJECT_TYPE      VARCHAR2(30 BYTE),
  OPTIMIZER        VARCHAR2(255 BYTE),
  SEARCH_COLUMNS   NUMBER,
  ID               INTEGER,
  PARENT_ID        INTEGER,
  POSITION         INTEGER,
  COST             INTEGER,
  CARDINALITY      INTEGER,
  BYTES            INTEGER,
  OTHER_TAG        VARCHAR2(255 BYTE),
  PARTITION_START  VARCHAR2(255 BYTE),
  PARTITION_STOP   VARCHAR2(255 BYTE),
  PARTITION_ID     INTEGER,
  OTHER            LONG,
  DISTRIBUTION     VARCHAR2(30 BYTE)
);

위 테이블을 생성하면, 1번의 plan table 명에 테이블명을 적는다.
:
Posted by 뽀기