'Oracle/Administoration'에 해당되는 글 8건
전체 쿼리조회
Oracle/Administoration
set line 120
set pagesize 50
col name for a20
col value for a10
col deflt for a10
col type for a10
col description for a50
select a.ksppinm name, b.ksppstvl value,b.ksppstdf deflt,
decode (a.ksppity, 1, 'boolean',
                2, 'string',
                3, 'number',
                4, 'file',
                a.ksppity) type,
a.ksppdesc description
from sys.x$ksppi a, sys.x$ksppcv b
where a.indx = b.indx and a.ksppinm like '\_%' escape '\'
order by name

 

강조부분을 빼야 all 조회

원하는것만 찾을려면 where절에 추가해넣으면 된다. 

오라클 Hidden 파라미터 조회
Oracle/Administoration

vi hidden.sql
set lines 132
col KSPPINM for a50
col KSPPSTVL for a10
select a.ksppinm,b.ksppstvl from x$ksppi a, x$ksppsv b
where a.indx=b.indx
and a.ksppinm = '&a'
and substr(a.ksppinm,1,1)='_';
를 os상에 sql로 만들어놓고 oracle 접속후 실행

 

'_in_memory_undo' 입력

tablespace에 속한 table 조회(owner)
Oracle/Administoration
Tablespace에 속한 Table을 조회 할 수 있다.
SQL> select table_name,tablespace_name
  2  from dba_tables
  3 where owner='SCOTT'
SQL> /

TABLE_NAME		       TABLESPACE_NAME
------------------------------ ------------------------------
DEPT			       USERS
EMP			       USERS
BONUS			       USERS
SALGRADE		       USERS
PROFESSOR		       USERS
DEPARTMENT		       USERS
STUDENT 		       USERS
EMP2			       USERS
DEPT2			       USERS
CAL			       USERS
GIFT			       USERS

TABLE_NAME		       TABLESPACE_NAME
------------------------------ ------------------------------
GOGAK			       USERS
HAKJUM			       USERS
EXAM_01 		       USERS
P_GRADE 		       USERS
REG_TEST		       USERS
P_01			       USERS
P_02			       USERS
PT_01			       USERS
PT_02			       USERS
P_TOTAL 		       USERS
TEST_NOVALIDATE 	       USERS

TABLE_NAME		       TABLESPACE_NAME
------------------------------ ------------------------------
TEST_VALIDATE		       USERS
TEST_ENABLE		       USERS
PRODUCT 		       USERS
PANMAE			       USERS
MEMBER			       USERS
REG_TEST2		       USERS
FRUIT			       USERS
DAECHUL 		       USERS
JUMSU			       USERS
TARAN			       SPIDER
H_TARAN 		       SPIDER

33 rows selected.
찾았다....taran테이블과 h_taran테이블..
No archive mod에서 archive mode 변경하기
Oracle/Administoration
archive mode에서 주의해야 할 몇가지가 있습니다.
1. 별도의 저장공간이 필요합니다.
archive redo log는 online redo log file을 복사하는것이기 때문에 online redo log file 외 별도의 공간이 필요합니다.

2. Archive hang 이라는 문제가 발생하여 서비스가 중단 될 수도 있습니다.
여러 가지 이유로 Archiver Process 가 Archive Redo Log File 을 저장할 수 없게 될 경우
(예를 들어 저장 공간이 가득 찰 경우나 권한이 없을 경우 등) 전체 Database 가 중단이 되는 현상이 발
생하게 됩니다. 이런 현상을 Archive Hang 이라고 합니다.

3. 관리가 까다롭습니다.
Archive Log Mode의 원리를 정확히 모를 경우 관리하기가 힘들며 관리가 잘 못될 경우
장애가 발생해도 복구를 할 수 없게 됩니다.
SQL> archive log list;
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /app/oracle/data/arc2
Oldest online log sequence     17
Current log sequence           19
SQL>
현재 database open 상태에서 조회해보니 no archive log로 출력됩니다.
이제 archive redo log를 저장할 디렉토리를 만들고 archive mode로 변경해보겠습니다.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
database를 종료시키고 parameter file에 archive log file을 저장할 경로를 지정해야 합니다.
SQL> !vi $ORACLE_HOME/dbs/initykdb.ora
----------------------------------------------------
*.log_archive_dest_1='location=/app/oracle/data/arc1'
*.log_archive_dest_2='location=/app/oracle/data/arc2'
*.log_archive_format=%s_%t_%r.arc
해당 경로와 디렉토리 네임은 마음대로 지정해주셔도 됩니다
밑에 %s는 logfile의 시퀀스넘버, %t는 스레드, %r은 인카네이션(ex filename 1-1-2)이고
설정을 완료했으면 wq! 저장 종료하셔서 나오면 됩니다.
SQL> !
[oracle@dbserver ~]$ cd /app/oracle/
[oracle@dbserver oracle]$
[oracle@dbserver oracle]$ mkdir data
원하시는 경로로 가서 원하는 네임으로 디렉토리(parameter file에 설정해놨던)를 생성하시면 됩니다.
[oracle@dbserver oracle]$ cd data/
[oracle@dbserver data]$ mkdir arc1 arc2
data 디렉토리에 들어가서 arc1 arc2를 생성한다.
[oracle@dbserver data]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Tue Nov 4 17:59:37 2014

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup mount
ORACLE instance started.

Total System Global Area  422670336 bytes
Fixed Size                  1336960 bytes
Variable Size             276826496 bytes
Database Buffers          138412032 bytes
Redo Buffers                6094848 bytes
Database mounted.
SQL>
SQL> alter database archivelog;

Database altered.

SQL> alter database open;

Database altered.

SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /app/oracle/data/arc2
Oldest online log sequence     17
Next log sequence to archive   19
Current log sequence           19
SQL>
세팅은 완료됐고 이제 mount로 database를 올려서 archive mode로 변경후 나머지 open하면 된다.
SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /app/oracle/data/arc2
Oldest online log sequence     19
Next log sequence to archive   21
Current log sequence           21
SQL>

database를 올리고 archive 스퀀스 넘버를 확인해보니 17번이다.
좀 더 제대로 된 확인을 위해 강제로 log switch를 일으켜서 다시 확인해봤다.
확인해 보니가 시퀀스번호가 19번으로 올라가있다.
SGA size cannot be greater than maximum shared memory segment size (0) 에러
Oracle/Administoration

해당 에러는 오라클을 인스톨하기전에

sysctl.conf 파일 맨 밑에 공유메모리 값을 넣어줬을텐데


최대 공유메모리 값보다 초과되서 출력된 에러다.


11g 기준으로 여러개 돌아다니는 공유메모리 설정값이 있을텐데

기본값으로 엔진 및 db를 install할때 참고하길 바란다.



kernel.shmall = 2097152

oracle dbca [ora-00119] invalid specification for system parameter local_listener 에러
Oracle/Administoration

오라클 압축을 풀고 엔진을 무사히 설치한다음


리눅스 터널을 통해 DBCA를 날려주면 데이터베이스 인스톨창으로 넘어간다.


모든 과정을 마치고 설치를 하면 2%정도에서 에러를 띄운다.


ora-00119 invalid specification for system parameter local_listener


오라클 엔진 설치과정 전에

서버쪽 /etc/hosts에 아래와 같이 서버의 실제 아이피가 hostname으로 잡혀 있어야 함.

로컬호스트에 hostname이(리스너에서 사용한 이름) 물려 있으면 에러난다.



[oracle@dbserver ~]$ vi /etc/hosts


127.0.0.1          localhost localgist.localdomain localhost4 localhost4.localdomein4

                      localhost localgist.localdomain localhost6 localhost6.localdomein6


192.168.24.136                    dbserver             dbserver

빨간색 된 부분을 추가해준다.

ip확인은 ifconfig eth0 날려주면 나오는 출력내용중에 inet부분이다.


다시 dbca 엔진설치를 하면 문제없이 설치가 된다.


오라클 사용자 권한생성 및 권한주기
Oracle/Administoration




오라클 유저 만들기

CREATE USER [username] IDENTIFIED BY [password]
DEFAULT TABLESPACE [tablespace_name]
TEMPORARY TABLESPACE TEMP;


생성한 USER에 권한주기

GRANT connect, resource, dba TO [user_name];

(모든권한)


GRANT CREATE SESSION TO 유저명        

GRANT CREATE DATABASE LINK TO 유저명
GRANT CREATE MATERIALIZED VIEW TO 유저명
GRANT CREATE PROCEDURE TO 유저명
GRANT CREATE PUBLIC SYNONYM TO 유저명
GRANT CREATE ROLE TO 유저명
GRANT CREATE SEQUENCE TO 유저명
GRANT CREATE SYNONYM TO 유저명
GRANT CREATE TABLE TO 유저명            
GRANT DROP ANY TABLE TO 유저명        

GRANT CREATE TRIGGER TO 유저명
GRANT CREATE TYPE TO 유저명
GRANT CREATE VIEW TO 유저명

GRANT 
 CREATE SESSION
,CREATE TABLE
,CREATE SEQUENCE  
,CREATE VIEW
TO 유저명;

생성한 USER로 ORACLE에 접속하기

sqlplus nextree/nextree


계정 삭제하기

drop user 사용자계정 cascade;

 


clonedb를 이용해서 dblink 하기
Oracle/Administoration

dblink란

같은 host상의 1)클라이언트db와 2)서버db를 별명(alias)을 통해 두 db간의 다리를 만들어주는 기술


oracle dblink로 할수 있는건

서로 다른 컴퓨터로 export , import 명령어를 사용해서 옮기지만 dblink를 걸어주면 명령어만으로 쉽게 서버간 데이터이동을 할수있다.

그리고 backup & recovery 할때도 엄청 요긴하게 쓰이는 기술이니 알아두면 나중에 발목잡힐 일이 없다.


처음 리눅스 os를 깔고 oracle을 설치하면 리스너라는(listener.ora)파일이 없을것이다.

oracle 11g 기준으로 경로는 /app/oracle/product/11g/bin/에 있다.


cd /app/oracle/product/11g/bin/ 들어가서

터미널에

[oracle@dbserver ~ bin]$ ./netca 라고 치면 설치가능하다.

만약에 한글이 깨져보인다면 설치취소를 누르고

export LACG=C 명령어를 터미널에 쳐주고 다시 netca를 실행시켜주자.

*netca를 이용하지 않아도 vi로 해당위치의 파일을 만들어주고 내용을 입력해줘도 가능하다.

vi /app/oracle/product/11g/network/admin/listener.ora

vi /app/oracle/product/11g/network/admin/tnsnames.ora 이런식으로 새파일을 만들어 입력가능함


/app/oracle/product/11/network/admin/listener.ora를 열어보면

------------------------------------------------------------------------------------------------

# listener.ora Network Configuration File: /app/oracle/product/11g/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = testdb)
      (ORACLE_HOME = /app/oracle/product/11g)
      (PROGRAM = extproc)
    )
  )
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )

-------------------------------------------------------------------------------------------------

위에껀 기존부분이고 아래 listener2 부분을 기존내용 밑에 추가해주면 된다.(* 괄호주의)

-------------------------------------------------------------------------------------------------

LISTENER2 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
       (ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 1522))
    )
  )
SID_LIST_LISTENER2 =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = testdb2)
      (ORACLE_HOME = /app/oracle/product/11g)
    )

  )

-------------------------------------------------------------------------------------------------

*참고로 HOST부분에 네임으로 적으려면 /etc/hosts에 아이피와 네임이 같이 적혀있어야한다.

vi를 열어서 살펴보자.

vi /etc/hosts

-------------------------------------------------------------------------------------------------

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.24.136          dbserver        dbserver

-------------------------------------------------------------------------------------------------

빨간색부분의 아이피와 옆에 리눅스를 설치했던 네임을 적어주면 된다. 그리고 :wq! 종료


그리고 vi /app/oracle/product/11g/network/admin/tnsnames.ora를 열어보면

-------------------------------------------------------------------------------------------------

TESTDB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.24.136)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = testdb)
    )    
  )

--------------------------------------------------------------------------------------------------

위의내용은 기존내용이고 이 부분아래서부터 밑의 clonedb를 추가해주자

--------------------------------------------------------------------------------------------------

clonedb =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.24.136)(PORT = 1522)) -<포트번호는 listener와 동일한 포트로
    )       
    (CONNECT_DATA =
      (SERVICE_NAME = testdb2) -<clonedb의 네임적어주셔야 합니다.
    )
   )

--------------------------------------------------------------------------------------------------

*중요한 몇가지

1.listener와 tnsnames의 본 클라이언트db(testdb), 서버db(testdb2)의 port 같은 서버끼리 똑같아야 한다.

2.분명히 clonedb(testdb2)안만들고 listener와 tnsnames만 건드시는 분들 분명히 계십니다~

  다른서버가 분명히 하나 더 있어야 가능한 기술이니까 숙지하세요~

3.이건 주관적인건데 listener의 host는 아이피로 통일하거나 네임으로 통일하거나 같아야합니다

tnsnames.ora도 마찬가지로 네임으로 통일할려면 통일하고 안할려면 둘다 아이피로 적어주세요.


모두 :wq! 저장하고 나와서 리스너 명령어로 stop,start,status등 실행되는지 전부 확인해볼수 있습니다.


[oracle@dbserver ~]$lsnrctl -<리스너 접속명령어 확인을 누르면

--------------------------------------------------------------------------------------------------

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 16-JUL-2014 14:38:53

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Welcome to LSNRCTL, type "help" for information.

LSNRCTL>

--------------------------------------------------------------------------------------------------

접속되었고 몇가지 명령어를 나열해 보자면 보통은

status listener(testdb꺼) ,status listener2(clonedb testdb2꺼) 이 명령어는 현재 리스너의 현재상태를 출력해주는 명령어다

그외에 멈추는 명령어 stop listener , 다시 재동가하는 명령어 start lestener 요 3가지만 알아도 많이 배운상태다 이미.


내용이 길어지기 때문에 현제 clonedb의 testdb만 정상적으로 재가동되는 결과 출력물만 기재하겠다.

LISTENER> 에서 나갈려면 EXIT 명령어를 써주면 나갈수가 있다.


제대로 작동되는지 확인해볼려면

[oracle@dbserver ~]#tnsping clonedb(testdb2용임)

--------------------------------------------------------------------------------------------------

TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 16-JUL-2014 14:44:35

Copyright (c) 1997, 2009, Oracle.  All rights reserved.

Used parameter files:


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)

(HOST = 192.168.24.136)(PORT = 1522))) (CONNECT_DATA = (SERVICE_NAME = testdb2)))
OK (10 msec)

-------------------------------------------------------------------------------------------------

위의 ok가 떨어졌으면 정상적으로 리스너가 작동한다는 뜻이다.

그리고 당연하겠지만 본 클라이언트(운영서버)에서 디비링크를 확인하려면 clonedb(복구서버testdb2)의 db가 켜져있어야한다.

exprot ORACLE_SID=testdb2 (클론서버로 접속)입력해주고 db를 키자. 그리고 다시 export ORACLE_SID=testdb로 실행경로를 바꿔준다.


이제 거의 tnsnames.ora와 listener.ora쪽은 건들일이 없고 본클라이언트 서버 들어가서 서로연결해줄 링크를 만들면 끝이다.

[oracle@dbserver ~]$sqlplus / as sysdba
[oracle@dbserver ~]startup


명령어가 여러가지가 있는데 한번 살펴보자


<링크생성하기>

SQL>creata database link testdb02 /링크이름은 하고싶은걸로 하면된다.
  2 connect to scott
  3 identified by tiger                  /클론db와 연결할 계정과 암호
  4 using 'testdb2';                    /tnsnames.ora에 적어뒀던 걸로 하면된다.
DATABASE LINK CREATE


이것으로 링크는 정상적으로 만들어졌고 실행해보자.


SQL> select * from scott.hwangyk@testdb02

해주면 결과가 출력이 된다. 성공적으로 링크가 됐다.


지금까지 만들었던 dblink를 조회해보는 명령어

SQL>SELECT * FROM ALL_DB_LINKS;


만들어놨던 DBLINK를 삭제하는 명령어

SQL>DROP DATABASE LINK 링크명



링크를 만들때 직접 만들수 있는 방법도 있다.

이래저래 안걸리면 직접넣기


SQL>CREATE DATABASE LINK 링크이름
  2  CONNECT TO 아이디 IDENTIFIED BY 비번
  3  USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=호스트명)(PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=SID)))';