반응형

SQL Developer 새 접속하려는데 IO오류 17002가 발생하는 경우 오라클 리스너를 확인해 봅니다.


Oracle Error 17002 "Io Exception: The Network Adapter could not establish the connection"


1. 아래 명령어를 통해 리스너 상태를 확인해 봅니다.


1
lsnrctl status



리스너가 죽어있는 경우 아래 처럼 메시지가 나옵니다.


1
2
3
4
5
6
7
8
9
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 21-AUG-2017 14:10:08
 
Copyright (c) 19912013, Oracle.  All rights reserved.
 
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
TNS-12541: TNS:no listener
 TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Linux Error: 111: Connection refused




2. 확인 사살 겸 한번 리스너를 정지합니다.


1
lsnrctl stop



3. 리스너를 다시 시작합니다.


1
lsnrctl start



반응형
반응형

오라클에서 문자를 날짜형으로 바꿀 때 TO_DATE 함수를 사용합니다.


1
select TO_DATE('20171225123031''YYYYMMDDHH24MISS'FROM DUAL;




날짜 함수 중에 월 단위 덧셈 함수 입니다.

1
SELECT ADD_MONTHS(to_date('2017-01-27''YYYY-MM-DD'),1FROM dual;



반응형
반응형
오라클에서는 날짜를 문자열로 변환할 때 TO_CAHR 함수를 씁니다.

사용법은 다음과 같습니다.

1
SELECT TO_CHAR(SYSDATE, '날짜포맷'FROM DUAL;





자주쓰는 날짜포맷은 다음과 같습니다.

년도

YYYY 2017
YY 17


MONTH NOVEMBER
MM 06
MON NOV


DD 31

요일

D 6
DY FRI
DAY FRIDAY

시간

HH 23
HH12 11
AM AM
PM PM


MI 21


SS 20


반응형
반응형

오라클을 사용하다 보면 테이블이나 컬럼들의 목록을 조회 해야할 때가 있습니다.


1. 테이블 목록과 코멘트 조회 쿼리 입니다.


1
2
3
4
5
6
7
8
SELECT
    b.table_name,
    b.comments
FROM
    user_tables a
    LEFT OUTER JOIN all_tab_comments b ON a.table_name = b.table_name
WHERE
    b.table_type = 'TABLE';



2. 컬럼 목록과 코멘트 조회 쿼리 입니다. (조금 길군요.)


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
SELECT
    tab_columns.table_name,
    tab.comments AS tablecomment,
    tab_columns.column_id,
    tab_columns.column_name,
    (
        CASE
            WHEN data_type LIKE '%CHAR%' THEN data_type
             || '('
             || data_length
             || ')'
            WHEN
                data_type = 'NUMBER'
            AND
                data_precision > 0
            AND
                data_scale > 0
            THEN data_type
             || '('
             || data_precision
             || ','
             || data_scale
             || ')'
            WHEN
                data_type = 'NUMBER'
            AND
                data_precision > 0
            THEN data_type
             || '('
             || data_precision
             || ')'
            WHEN data_type = 'NUMBER' THEN data_type
            ELSE data_type
        END
    ) data_type,
    DECODE(
        nullable,
        'N',
        'Not Null',
        'Null'
    ) nullable,
    data_default,
    (
        SELECT
            DECODE(
                SUM( (
                    SELECT
                        DECODE(
                            constraint_type,
                            'P',
                            1,
                            'R',
                            2,
                            0
                        )
                    FROM
                        user_constraints
                    WHERE
                        constraint_name = cons_columns.constraint_name
                ) ),
                1,
                'PK',
                2,
                'FK',
                3,
                'PK,FK',
                ''
            )
        FROM
            user_cons_columns cons_columns
        WHERE
                table_name = tab_columns.table_name
            AND
                column_name = tab_columns.column_name
    ) constraints,
    comments.comments
FROM
    user_tab_columns tab_columns,
    user_col_comments comments,
    all_tab_comments tab
WHERE
        tab_columns.table_name = comments.table_name (+)
    AND
        tab_columns.table_name = tab.table_name
    AND
        tab_columns.column_name = comments.column_name (+)
ORDER BY
    tab_columns.table_name,
    column_id



3. 2번 쿼리 조회결과 입니다.


반응형
반응형

오라클에서 Insert 값중에 &가 포함되어 있는경우 변수로 인식해서 오류가 발생하게 됩니다.


1
insert into NOTICE (title) values ('&title');



그런 경우 세가지 해결방법이 있습니다.


1. SET DEFINE OFF;

 - &를 통한 변수를 사용하지 않게다고 선언하는 것입니다.


2. SET DEFINE [다른문자열];

 - &가 아닌 다른문자열을 통해 변수를 사용하겠다고 선언하는 것입니다.


3. SET ESCAPE ON;

 - &를 통한 변수 사용은 그대로 두면서 역슬래시 문자열(\)을 통해 &를 사용하면 문자로 인정해 주는 것 입니다.


1
insert into NOTICE (title) values ('\&title');



반응형
반응형

0. 먼저 데이터베이스에 접속합니다.

1
sqlplus / as sysdba



1. 유저를 생성하는 명령어 입니다.


1
CREATE USER [유저명] IDENTIFIED BY [비밀번호] DEFAULT TABLESPACE [테이블스페이스명] TEMPORARY TABLESPACE TEMP;



2. 생성한 유저에게 권한을 부여하는 명령어 입니다.


1
GRANT CONNECT, RESOURCE, DBA TO [유저명];




- CONNECT : 데이터베이스에 연결할 수 있는 권한입니다.

- RESOURCE : DDL과 DML을 사용할 수 있는 권한입니다.

- DBA : 데이터베이스 관리자 권한입니다.

반응형
반응형

ORA-00054: 리소스가 사용 중이어서 NOWAIT가 지정되었거나 시간 초과가 만료된 상태로 획득합니다


이런 오류가 발생할 경우 아래 쿼리를 실행 합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
    a.sid,
    a.serial#,
    a.status
FROM
    v$session a,
    v$lock b,
    dba_objects c
WHERE
        a.sid = b.sid
    AND
        b.id1 = c.object_id
    AND
        b.type = 'TM'
    AND
        c.object_name = [테이블명];



아래 처럼 결과가 나옵니다.


1
2
3
4
       SID    SERIAL# STATUS
---------- ---------- --------
       355       5657 INACTIVE
 



그럼 다시 아래와 같이 쿼리를 실행합니다.


1
alter system kill session '355,5657';



아래와 같이 결과가 나오면서 해결 됩니다.


1
System altered.



반응형
반응형

Database 별로 문자열을 더하는 방법이 모두 다릅니다.


오라클은


1
SELECT 'A' || 'B' FROM DUAL:




MySql 은


1
SELECT CONCAT('A''B');




MsSql 은 두 가지 모두 된다고 합니다.


1
2
SELECT 'A' + 'B';
SELECT CONCAT('A''B');



반응형
반응형

ORA-12705 Cannot access NLS data files or invalid environment specified



oci_connect 에서 ORA-12705 Cannot access NLS data files or invalid environment specified


오류가 발생하는 경우에 아래 쿼리를 실행합니다.


SELECT * FROM V$NLS_PARAMETERS;

 

[NLS_LANGUAGE]_[NLS_TERRITORY].[NLS_CHARACTERSET] 의 값을 윈도우 환경변수 NLS_LANG 변수로 추가해주고 컴퓨터를 재시작 합니다.

반응형
반응형

GRANT CREATE PROCEDURE TO 유저명

반응형

+ Recent posts