2010년 5월 20일

오라클 명령어

** oracle 8i
- 먼저 로그인을 합니다.
% sqlplus internal
=> 아마도 오라클이 있는 머신에서 로그인을 시도한 듯 싶다.
내가 사용하는 방식은
% svrmgrl ( 윈도우머신에서는 당연히 먹을거구, 왜냐면 설치시 path 가 잡힌다, 유닉스에서는 오라클유저로 로그인을 해야 쓸수 있당)
% connect internal

- 오라클 시작 및 종료
SQL>startup restrict; open까지 실행하고 일반사용자는 사용할 수 없음
SQL>startup force; 자동종료후 다시시작
SQL>startup nomount;
SQL>alter database mount;
SQL>alter database open;
SQL>shutdown normal(종료)[ transactional(처리후 정지), immediate(롤백후 정지), abort(정전경우)]

-- 디비에 뭐가 있나..
SQL>select * from v$database;
SQL>select * from all_users; 현재 생성된 사용자
SQL>select * from v$sga;
SQL>show sga 메모리 사용보기
SQL>show parameter;
SQL>select * from dba_users;

- 데이터베이스를 DBA만 접근해서 사용자 생성
%>sqlplus internal(sys의미)
SQL>startup open restrict
SQL>create user 사용자이름
2>identified by passwd;
SQL>grant resource, connnect to 사용자이름
SQL>exit

* 기본적으로 사용되는 유저와 비밀번호가 있다. sys, system 은 DBA 를 권한을 가지는 막강권한이고... scott는 많이 보았을 것이다. emp...
유저 비밀번호

sys change_on_install
system manager
scott tiger

- SQL Plus 실행명령어
나온 것들은 실행해 본적이 없는거 같구, 주로 유닉스환경에서 sqlplus를 실행한후, ed 혹은 edit 를 통해 vi 편집을 하고 / 해서 실행하는 것을 주로 사용했다. 이 내용을 저장하고 싶으면 'spool 파일이름' 을 해주면 sqlplus 를 실행한 디렉토리에 파일이름으로 실행내용이 저장된다. 저장내용을 좀더 이쁘게 하고 싶다면
col name format a30 이거 정도 사용하면 된다. a다음 숫자는 해당 컬럼 길이 만큼 지정해준다.
'spool off' 하면 정지된다.
/ 실행
run
help
host
timing

SQL Plus 편집명령어
append text
change/old/new
clear buffer
del 현재라인삭제
del x x번재 라인 삭제
del y z
del * 현재라인 삭제
del last
get /경로/파일명
input
input text
list no
list y z
list last
save /경로명/파일명
start 실행

- 사용자 생성, 변경, 삭제
%sqlplus system/manager
SQL>create user 사용자indetified by 암호
2>default tablespace system ( <- 별로 안좋은 설정. tablespace 만들고 한다. )
3>temporary tablespace temp
4>quota 1M on system;
변경
SQL>alter user 사용자 identified by 암호;
삭제
SQL>drop user 사용자 cascade; (가지고 있는 모든객체화 함께 삭제)
권한과 룰
create session, table, index, view, sequence, cluster
drop "
alter "
grant [시스템권한] to [사용자명] with admin option;

보통은 사용자 추가후...
grant resource, connect to 사용자; 로 사용했다.
- public
%sqlplus system/manager
SQL>grant create session to 사용자 with admin option;
---------------- 부여받은 권한은 다른 사용자에게 다시 부여할 수 있다.
취소
SQL>revoke create table, create session from 사용자;

- 객체권한의 종류
select
update
insert
alter
delete
execute
index create index on [테이블명] 문장을 사용할 수 있는 권한
references 외부키를 정의할 수 있는 권한

- 권한부여
SQL>grant select on emp to tom with grant option;
SQL>grant insert(empno,ename),uptedate(ename) on emp to tom with grant option;
SQL>grant select on emp to tom;
SQL>grant insert(empno,ename), update(empno,ename) on emp to tom;

취소
revoke [객체권한] on [객체명] from [사용자명] cascade constraints;
public
SQL>revoke select on emp from tom;

- 롤의 종류
connect : create session, create table, create index등의 8가지의 권한으로 생성
resource : create table 등 20여가지 권한
dba :데이터베이스의 모든권한
sysoper : system 사용자가 가진 권한
sysdba : sys사용자가 가진 권한이며 internal 사용자권한

create role [롤명] not identified;
identified by [패스워드];

SQL>create role init_role;
SQL>grant create session, create table, create view, create sequence to init_role;
SQL>grant init_role to insa, account, inventory;

%sqlplus system/manger
SQL>create user 사용자
2>identified by 비밀번호
3>default tablespace default_테이블스페이스
4>temporary tablespace temp;
SQL>create role def_role;
SQL>grant create session to def_role;
SQL>grant def_role to A;
SQL>connect A/A_password

SQL>connect scott/tiger;
SQL>grant select on emp to A;
SQL>grant select on dept to A;
SQL>connect A/A_password

SQL>select * from scott.emp;
SQL>select * from scott.dept;
SQL>connect system/manager
SQL>exit

- 데이터 타입
char 고정된 문자열 최대2000바이트
varchar2 가변길이 문자열. 최대4000바이트
nchar 국가언어지원 최대 2000바이트
nvarchar2 가변길이 국가언어지원 최대4000바이트
long 가변길이 문자열 최대2G
raw 바이트문자열 최대 2G
long raw 이진 문자열 최대2G
number 고정숫자 10(-38)~10(+38)
date 날자시간 BC 4712 - CE 4712
blob 구조화 안된 이진데이터 최대4G (Large Object) ==>이미지
clob 구조화 안된 문자데이터 최대4G ==> 논문
nclob 국가언어지원 4G
bfile 구조화 안된 외부파일 4G
rowid 테이블에 행이 저장

SQL> create table internal_lob
2>(room_no NUMBER,
3>layout BLOB,
4>text CLOB)
5>LOB(layout, text)
6>STORE AS(STORAE ( INITAL 100k
7> NEXT 100k
8> OCTINCREASE 0)
9>chunk 20480
10>pctversion 20
11>nocache
12>nologgin
13>index(storeage (initial 100k
next 100k)));
SQL>create table external_doc (id number, doc bfile);
SQL>insert into external_doc values(1001,bfilename('/disk1','사업계획.hwp'));

- 디렉토리객체
%mkdir /oracle/bfile/data

SQL>create directory bfile_path as '/oracle/bfile/data';
SQL>grant read on directory bfile_path to scott;
SQL>create table bfile_doc (id number, doc bfile);
SQL>insert into bfile_doc values(1002,bfilename('bfile_path','사업계획.hwp'));

임시 LOB
dbms_lob.createtemporary(lob_temp, ture, dbms_lob.transaction);

먼저 권한이 주어져야 한다.
%sqlplus system/manger
SQL>grant create session to iampro with admin option;
SQL>grant create table to iampro with admin option;
SQL>grant create view to iampro;
exit

테이블생성
SQL>create table salary (code char(3), name varchar2(15), phone number(12));
SQL>insert into salary values ('001','주종면',4417613);
SQL>insert into salary values ('002','주영현',4237615);
SQL>insert into salary values ('003','홍경옥',4243612);
SQL>commit;
SQL>select * from salary;
SQL>alter table salary add( bigo varchar2(20));
SQL>alter table salary modify(code char(5));
SQL>update salary set phone='11111111'; 모든 컬럼에 같은값 적용
SQL>drop table salary;

제약조건
create table [테이블명](컬럼1 [데이터형] primary key,
컬럼2 [테이터형] referenes [테이블명](컬럼명),
컬럼3 [테이터형] not null,
컬럼4 [데이터형] unique, ==>각 행에서 유일한 값
컬럼5 [데이터형] check([컬럼5]) in (조건1,조건2,조건3,...),);

제약조건 확인
SQL>select * from user_constrainsts where table_name='EMP';

- 전체테이블보기
select table_name from dba_tables

- 각테이블의 컬럼내용보기
SQL>desc sawon;

- 똑같은 구조의 테이블작성
SQL>create table emp_temp as select * from emp;

- 다른파일로 테이블이동
SQL>create tablespace insa datafile 'c:\oracle\oradata\insa01.dbf' size 10m;
SQL>create table emp (empno number(4), name varchar2(10)) tablespace insa;
SQL>create tablespace account datafile 'c:\oracle\oradata\acc01.dbf' size 10m;
SQL>create table jeon (jeonno number(4), text varchar2(10)) tablespace acd;
SQL>alter table emp move tablespace account;

- 사용하지 않는 컬럼 표시하기
alter table emp set unused column bigo;

- 사용하지 않는 컬럼 삭제하기
alter table emp drop column bigo cascade constraints;

- 테이블분석
SQL>analyze table sawon compute statistics;
SQL>select num_rows, blocks, empty_blocks, avg_space_freelist_blocks, chain_cnt, avg_low_len 2>from user_tables where table_name ='SAWON';
SQL>analyze table sawon delete statistics;

- 로깅정보보기 == 대소문자 구별(대문자로만)
SQL>select table_name, logging from dba_tables where table_name='EMPN';

- 밸런스트리 인덱스
SQL>create index i_empno_emp on emp(empno);
SQL>drop index i-empno_emp;

비트맵 인덱스(update등이 자주 일어나지 않고 인덱스가 크고 생성시간이 오래 걸릴때 사용)
SQL>create bitmap index i_loc_sawon on sawon(loc);
SQL>select * from sawon where loc = '부산' or loc='서울';

함수기반 인덱스
SQL>alter table nemp add(new_sal number(7));
SQL>alter table nemp add(old_sal number(7));
SQL>create index i_nemp on nemp(new_sal - old_sal);
SQL>select from nemp whre ( new_sal - old_sal)>1000;

SQL>create index employees_fb_idx on employees (upper(last_name));

- 역방향 인덱스
SQL>create index i_empno on nemp(empno) reverse;

- 내림차순 인덱스
SQL>create index i_empno on nemp(empno desc);

객체타입
SQL>create type emp_type(empno number, ename varchar2(10) no char(15),
2>member function age return number);
SQL>create type body emp_type member function age return nuber is
2>begin retrun true; end age;

화일의 실행
SQL>@d:\oracle\ora81\rdbms\admin\utlxplan.sql
스냅샷(하나의 네트워크에 2개이상의 데이터베이스 설치시 각각의 사본을 가지고 갱신처리)
SQL>create snapshot emp_pusan refresh fast as select * from emp@seoul;

물리적뷰생성을 위한 권한
%sqlplus system/manager
SQL>grant create materialized view to gracian;
SQL>grant alter any materialized view to gracian;
SQL>grant query rewrite to gracian;
SQL>grant global query rewrite to gracian;

물리적뷰생성
SQL>create materialized view sales_view build immediate refresh fast
2>enable query rewrite as select prod_code, sum(amount) from
3>where city_code='ALT' group by prod_code;

실행계획보기
SQL>set autotrace on;
SQL>set autotrace off;


- 디맨션생성
SQL>create dimension time_dimension
2>level sdate is timetab.sdate
3>level month is timetab.month
4>level qtr is timetab.quarter
5>leve yr is timetab.year
6>hierarchy calendar
7>(sdate child of
8> month child of
9> qtr child of yr)
10>attribute month
11>determines month_name;

디맨션 검증
SQL>execute dbms_olap.validate_dimension('time_dimension','gracian',false,ture);

- 외부프로시저 실행
권한
SQL>create libary path_dir as '/disk1/library/util.so';
SQL>grant execute on path_dir to gracian;

$ORACLE_HOME/network/admin/tnsname.ora 에서
extproc = description =(ADDRESS =(PROTOCOL =IPC)(KEY=extproc_key))
(CONNECT_DATA = (SID) = [DB명])));

$ORACLE_HIME/newtowr/admin/lisener.ora 에서
LISTENER = .....
(ADDRESS_LIST =
(PROTOCOL = IPC)(KEY=extproc_key)))
.....
(SID_LIST =
(SID_DESC =
(SID_NAME = [DB명])
(ORACLE_HOME = $ORACLE_HOME)
(PROGRAM = extproc)));

외부프로시저를 포함하는 PL/SQL블럭
SQL>create or replace funciton ext_func
2>x binary_integer,
3>y binary_integer)
4>return binary_interger
5>as external
6>library path_dir
7>name 'cgen'
8>language c;
실행
SQL>execute ext_func;

- 범위분할
SQL>create tablespace data_199901 datafile '$ORACLE_HOME/data_199901.dbf' size 500k;
SQL>create tablespace data_199902 datafile '$ORACLE_HOME/data_199902.dbf' size 500k;
SQL>create tablespace data_199903 datafile '$ORACLE_HOME/data_199903.dbf' size 500k;
SQL>create tablespace data_199904 datafile '$ORACLE_HOME/data_199904.dbf' size 500k;
SQL>create table psales(year char(4), mon char(2), dd char(2), empno char(3),
2>count number(5), amount number(8))
3>partition by range(year, mon)
4>(partition p1 values less than('1999','02') tablespace data_199901,
5> partition p2 values less than('1999','03') tablespace data_199902,
6> partition p3 values less than('1999','04') tablespace data_199903,
7> partition p4 values less than(maxvalue,maxvalue) tablespace data_199904);

SQL>alter table psales enable row movement;
SQL>update psales set year = '1998' where year='1999';

해시분할
SQL>create tablespace tbs1 datafile '$ORACLE_HOME/tbs1.dbf' size 500K;
SQL>create tablespace tbs2 datafile '$ORACLE_HOME/tbs2.dbf' size 500K;
SQL>create tablespace tbs3 datafile '$ORACLE_HOME/tbs3.dbf' size 500K;
SQL>create table product (id number(3), name vrchar2(30))
2>partition by hash(id) partition 8 sotre in (tbs1,tbs2,tbs3);
or
SQL>create table product (id number(3), name varchar2(30))
2>partition by hash (id)(partition p1 tablespace tbs1,
partition by hash (id)(partition p2 tablespace tbs2,
partition by hash (id)(partition p3 tablespace tbs3);

인덱스의 분할
글로벌 인덱스
SQL>create table gsales(no number(5), person varchar2(30), amont number(8), week number(2))
2>partition by range(week)
3>partition p1 values less than (4),
4>partition p2 values less than (8),
5>partition p3 values less than (12));
SQL>create index gsales_gidx on gsales(week, no)
2>global
3>partition by range(week)
4>(partition g_p1 values less than(8),
5>partition g_p2 values less than (maxvalue));

로컬인덱스
SQL>create table lsales(no number(5), person varchar2(30), amont number(8), week number(2))
2>partition by range(week)
3>partition p1 values less than (4),
4>partition p2 values less than (8),
5>partition p3 values less than (12));
SQL>create index lsales_gidx on lsales(week, no)
2>local
3>partition by range(week)
4>(partition l_p1 tablespace idx1,
5>(partition l_p2 tablespace idx2,
6> partition l_p3 tablespace idx3);

글로벌 프리픽스 인덱스
SQL>create table gpsales(no number(5), person varchar2(30), amont number(8), week number(2))
2>partition by range(week)
3>partition p1 values less than (4),
4>partition p2 values less than (8),
5>partition p3 values less than (12));
SQL>create index gpsales_gidx on lpsales(week, no)
2>glabal
3>partition by range(week)
4>(partition g_p1 values less than(8),
5> partition g_p2 values less than (maxvalue));

로컬 프리픽스 인덱스
SQL>create table lpsales(no number(5), person varchar2(30), amont number(8), week number(2))
2>partition by range(week)
3>partition p1 values less than (4),
4>partition p2 values less than (8));
SQL>create index lpsales_gidx on lpsales(week, no)
2>local
3>partition by range(week)
4>(partition g_p1 tablespace idx1,
5> partition g_p2 tablespace idx2);

분할삭제
SQL>alter table gsales drop partition p2;

분할이름변경
SQL>alter table gsales rename partition p1 to g1;
SQL>alter index gsales_gidx rename partition g_p1 to gp1;

분할추가
SQL>alter table gsales add partition p4 values less than (16) tablepace data_199903;

SQL>alter table product add partition;
SQL>alter table product add partition p4 tablespace tbs3;

분할합치기
SQL>alter table psales merge partition p1,p2 inti partition p1_2;

해시분할 검색속도향상
SQL>alter table product coalesce partition;

SQL>alter index lsales_gidx rebuild partition l_p2 tablespace tbs3;

하나의 테이블을 여러개로 분할
SQL>alter table sales split partition p12 at ('1999','02')
2>into(partition p21 tablespace tbs2, partition p22 tablespace tbs3);

하나의 인덱스를 여러개로 분할
SQL>alter index gsales_gidx split partition g_p2 at ('15')
2>into(partition g_p11 tablespace tbs2, partition g_p12 tablespace tbs1);

분할테이블의 익스텐트 저장구조 삭제
SQL>alter table lsales truncate partition p2 drop storage;

분할객첵의 익스포트/임포트
%exp gracian/garcian1234 tables = (emp, psales:p3, psales:p4)
%imp gracian/gracian1234 file=expdat.dmp tables=(emp,psales:p3)

- 복합분할(하나의 테이블스페이스당(tbs1,tbs2,tbs3) 4개의 분할(q1,q2,q3,q4)가 만들어 전체12개
SQL>create table orders(ordid number, orderdate date, productid number,quantity number)
2>partition by range(orderdate) subpartititon by hash(produectid) subpartiton 4
3>store in (tbs1,tbs2,tbs3)
4>partition q1 values less than ('01-jan-1999'),
5>partition q2 values less than ('01-feb-1999'),
6>partition q3 values less than ('01-mar-1999'),
7>partition q4 values less than (maxvalue));

SQL>create table ord_lob(orderdate date, pic blob) lob(pic) store as (tablespace tbs1)
2>partiton by range(orderdate)
3>(partition p1 values less than ('01-jan-1999') tablespace tbs2,
4>(partition p2 values less than ('01-feb-1999') tablespace tbs3);

SQL>select * from dba_users;
SQL>select * from user_tables;
SQL>select * from all_indexes;
SQL>select * from dba_tablespaces;
SQL>select * from dba_free_space;

SQL>select * from v$controlfile;
SQL>select * from v$log;
SQL>select * from v$logfile;

- rollback 테이블스페이스
SQL>update emp set sal = sal * 10;
SQL>rollback;

SQL>select * from dba_rollback_segs;
SQL>select * from v$rollstat;

- temporary 테이블스페이스
SQL>select * from tab order by name;

- user 테이블스페이스

테이블스페이스 생성
SQL>create tablespace insa datafile '/disk2/oracle/insa_01.dbf' size 1M;

테이블스페이스 크기추가
SQL>alter tablespace insa add datafile '/disk2/oracle/insa_02.dbf' size 1M;

데이터 파일 크기 변경
SQL>alter tablespace insa datafile '/disk2/oracle/insa_01.dbf' resize 3M;

데이터 파일 자동변경
SQL>alter tablespace insta datafile '/disk2/oracle/insa_02.dbf'
2>autoextend on next 1M maxsize 10M;

테이블 스페이스삭제
SQL>drop tablespace insa including contents;
SQL>exit 한후에 디렉토리의 화일을 직적삭제...

- 롤백세그먼트
SQL>create rollback segment rbs_big;
SQL>alter rollback segment rbs_bigONLINE;;

SQL>alter rollback segment rbs_big offline;
SQL>drop rollback segment rbs_big;

익스텐트
SQL>create table big_dept (id number, name varchar2(10))
2>storage(initial 1M next 1M minextents 1 maxextents 121 pctincrease 50);

SQL>create tablespace kashmir
2>datafile '/disk1/myfile1.dbs' size 10M
3>default storage (initial 10k next 10k minextents 1 maxextents 121 pctincrease 50);

SQL>alter table s_emp allocate extent size 1M;

- 기본테이블스페이스
SQL>create user gracian identified by gracian1234 default tablespace system;

현재 기본테이블스페이스확인
SQL>select username, default_tablespace from dba_users;

- 로컬리 테이블스페이스
SQL>create tablespace account datafile '/disk1/oracle/account_01.dbf' size 1M
2>extent management local uniform size 50k;

- 트랜스포트블 테이블스페이스
SQL>drop tablespace insa;
SQL>create tablespace insa datafile '/disk2/oracle/insa_01.dbf' size 1M;
SQL>alter tablespace insa read only;

%exp file = trans.dmp transport_tablespace=y tablespace=insa
triggers=n constraints=n

%cp /disk2/oracle/insa_01.dbf /disk1/oracle8/insa_01.dbf
%cp /disk2/oracle/trans.dmp /disk1/oracle8/trans.dmp

%imp file = trans.dmp transport_tablespace=y datafile=(/disk1/oracle8/insa_01.dbf)

SQL>alter tablespace insa read write;

- 컨트롤 파일의 복사본
SQL>alter database backup controlfile to trace;

스키마 튜닝 ==> 최적의 테이블과 인덱스

- 행이주와 행연결현상줄이기
SQL>create table s_emp (id number(3), name varchar2(20))
2>storage(initial 10k next 10k minextents 1 maxextents 121 pctincrease 50 pctfree 10 pctused 40);

행이주 행을 삭제하고 다시저장
%sqlplus internal
SQL>analyze table s_emp list chained rows;
SQL>create table new_chain as select * from s_emp where rowid in
2>(select head_rowid from chained_rows where table_name = 'S_EMP');

SQL>delete from s_emp where rowid in
2>(select head_rowid from chained_rows where table_name = 's_emp');

SQL>insert into s_emp select * from new_chain;
SQL>drop table new_chain;

SQL>analyze table big_emp list chained rows;
SQL>select count(*) from chained_rows; ==>0 이면 이상없음

- 테이블삭제후 재생성
%exp userid=gracian/gracian1234 files=emp.dmp
%sqlplus gracian/gracian1234
SQL>drop table s_emp delete cascade;
SQL>exit
%imp userid=gracian/gracian1234 file=emp.dmp

- 애플리케이션 튜닝

튜닝도구
explain plan
SQL*trace와 tkprof

DBMS_STAT 패키지
SQL>exec dbms_stat. grther_table_stats
2>('gracian','emp',null,60,true,'forall columns',2,'default',true);
SQL>exec dbms_stats.create_stat_table('gracian','emp_stat','insa');

SQL>exec dbms_stats.export_table_stats('gracian','emp',null,'emp_stat','19990522_emp',true);

%exp gracian/gracian1234 files=emp.dmp tables=emp_stat
%cp emp.dmp /disk2/shinhan/emp.dmp
%su - shinhan
%cd /disk2/shinhan/emp.dmp
%imp gracian/gracian files=emp.dmp

SQL>exec dbms_stats.import_table_stats('gracian','emp_stat');

- 인스턴스 튜닝

데이터버퍼캐시영역
SQL>select name, value from v$sysstat where name in
2>('consistent gets','db block gets','physical reads');
==>버퍼캐시영역의 사용비율은 = 1-(physical reads / (db block gets + consistent get))
할당된 블럭수 줄이고 < 70% < 할당된 블럭 수를 더 많이 할당

공유풀영역
SQL>select sum(pins) pins, sum(reloads) reloads from v$librarycache;
==>ratio = (reloads / pins) * 100 => 1 이면 공용풀의 크기를 크게한다.

SQL>select sum(gets) gets, sum(getmisses) getmisses from v$rowcache;
==>ratio = (getmisses /gets) * 100 >= 10% 이면 shared_pool_size를 더크게

라지풀영역
SQL>select * from v$sysstat where pool = 'larget pool';

로그 버퍼영역
SQL>select name, value from v$sysstat where name='redo log space requests';

롤백 세그먼트 경합
SQL>select r.name, s.gets, s.waits from v$rollstat s, v$rollname r where s.usn = r.usn;
==>ratio = (waits /gets) * 100 => 2 이면 경합발생 보통4개 8 개 50개로 사용자/4로 계산

- 데이터베이스 튜닝
디스크경합
SQL>select d.name, f.phyrds, f.phywrts from v$datafile d, v$filestat f where d.file# = fi.file#;

잠금상태의 튜닝 ==>락 발생확인
SQL>connect ora8i/ora8i
SQL>update emp set sal = sal * 10;
다른윈도우창으로
%sqlplus system/manager
SQL>select b.username username, c.sid sid, c.owner object_owner,
2> c.object object, b.lockwait, a.sql_text sql
3>from v$sqltext a, v$session b, v$access c
4>where a.address = b.sql_address and
5> a.hash_value = b.sql_hash_value and
6> b.sid=c.sid and c.owner != 'SYS';

SQL>select file_name, tablespace_name from dba_data_files;
- 풀백업

##소스 $ORACLE_HOME/dbs/whole_backup.sql
#!/bin/sh
#혹 백업 스크립트
#1단계:오라클 데이터베이스 인스턴스를 종료합니다.
$ORACLE_HOME/bin/sqlplus internal << EOF
shutdown immediate
exit
#
#2단계:데이터베이스와 관련된 모든 물리적 파일을 복사한다.
cp $ORACLE_HOME/dbs/oradata/ORA81/*.dtl $ORACLE_HOME/backup/*.ctl
cp $ORACLE_HOME/dbs/oradata/ORA81/*.log $ORACLE_HOME/backup/*.log
cp $ORACLE_HOME/dbs/*.dbf $ORACLE_HOME/backup/*.dbf
cp $ORACLE_HOME/dbs/*.ora $ORACLE_HOME/backup/*.ora
#
#3단계:완료후 데이터베이스를 다시 사작한다.
$ORACLE_HOME/bin/sqlplus internal << EOF
startup
exit
EOF

추가로 주기적인 백업을 하도록 cron 에 등록한다.
%setenv EDITOR vi
%crontab -e
* 23 1 * * whole_backup.sql

- 오픈백업
##소스 $ORACLE_HOME/dbs/open_backup.sql
#!/bin/sh
#오픈 백업 스크립트
$ORACLE_HOME/bin/sqlplus internal << EOF
alter tablespace system begin backup;
!cp /disk01/system01.dbf /disk02/backup/system01.dbf
!cp /disk01/system02.dbf /disk02/backup/system02.dbf
alter tablespace system end backup;

alter tablespace tools begin backup;
!cp /disk01/tools01.dbf /disk02/backup/tools01.dbf
alter tablespace tools end backup;

alter tablespace rbs begin backup;
!cp /disk01/rbs01.dbf /disk02/backup/rbs01.dbf
alter tablespace rbs end backup;

alter tablespace users begin backup;
!cp /disk01/users01.dbf /disk02/backup/users01.dbf
alter tablespace users end backup;

alter tablespace prod begin backup;
!cp /disk01/prod01.dbf /disk02/backup/prod01.dbf
!cp /disk01/prod02.dbf /disk02/backup/prod02.dbf
alter tablespace prod end backup;

alter database backup controlfile to '/disk02/backup/control.ctl';
alter database backup controlfile to trace;

!cp $ORACLE_HOME/dbs/oradata/ORA81/redo*.log /disk02/backup/redo*.log
exit
EOF

- EXPORT

- 데이터베이스 전체모드
%exp userid=sytem/manager full=y

- 사용자모드
%exp userid=system/manager owner=sales

- 테이블모드
%exp userid=scott/tiger tables=(scott.dept, tom.emp)

%exp scott/tiger FILE=scott.dmp owner=scott

- 전체복구
%sqlplus internal
SQL>shutdown immediate;
%cp /disk1/backup/*.ctl /disk2/oracle/*.ctl
%cp /disk1/backup/*.log /disk2/oracle/*.log
%cp /disk1/backup/*.dbf /disk2/oracle/*.dbf
%cp /disk1/backup/*.ora /disk2/oracle/*.ora
%sqlplus internal
SQL>startup mount;
SQL>recover database;
SQL>alter database open;

- 테이블스페이스복구
%sqlplus internal
SQL>shutdown immediate;
%cp /disk1/backup/insa_01.dbf /disk2/oracle/insa_01.dbf
%cp /disk1/backup/insa_02.dbf /disk2/oracle/insa_02.dbf
%sqlplus internal
SQL>startup mount;
SQL>alter database datafile '/disk1/oracle/insal_01.dbf offline;
SQL>alter database datafile '/disk1/oracle/insal_02.dbf offline;
SQL>alter database open;
SQL>alter tablespace insa offline;
SQL>recover tablespace insa;
SQL>alter tablespace insa online;

- 데이터파일복구
%sqlplus internal
SQL>shutdown immediate;
%cp /disk1/backup/insa_01.dbf /disk2/oracle/insa_01.dbf
%sqlplus internal
SQL>startup mount;
SQL>alter database datafile '/disk1/oracle/insal_01.dbf offline;
SQL>alter database open;
SQL>recover datafile '/disk1/oracle/insa_01.dbf';

- 트랜잭션 모니터링
SQL>select sid, serial#, opname, to_char(start_time, :HH24:MI:SS') as '작업시간',
2>(sofar/totalwork) * 100 '작업률' from v$session_longops;

- 프로파일작성
SQL>create profile account_profile limit sessions_per_user 1 connect_time 10 idle_time 60;
SQL>create prfoile, rssource_name, limit from db_profiles where profile ='ACCOUNT_PROFILE';

- 세션죽이기
SQL>select sid, serial#, username from v$session;
SQL>alter system kill session '12,211';

INFILE절
infile myfile.data
infile 'disk2/sales.dat'

SQL>spool /disk1/dept.txt
SQL>select * from dept;
SQL>spool off
SQL>exit

- JDBC
import jdbc.sql.*;

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

Connection conn = DriverManager.getConnection
("jdbc:oracle:thin:@192.9.200.65:1521:ora81","gracian","gracian1234");

- Driver Manager 오브젝트

DriverManager.getDriver ==>함수에 등록된 드라이브 정보를 가져온다.
(ex)string dbURL = "jdbc:oracle:thin:scott/tiger@192.9.200.65:1521:ORA81"
Driver driver = DriverManager.getDriver(dbURL);

DriverManager.getDrivers ==> 모든 드라이브정보
(ex)Driver drvier[] = DriverManager.getDrivers();

DriverManager.registerDriver ==>드라이브 정보를 등록
(ex)DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

DriverManager.deregisterDriver ==> 등록된 정보를 제거
(ex)DriverManager.deregisterDriver(oracle.jdbc.driver.OracleDriver());

DriverManager.getConnection
(ex)DriverManager.getConnection("jdbc:oracle:thin:@192.9.200.65:1521:ora81","gracian","gracian1234")

- JDBC 인터페이스
Connection : 자바애플리케이션으로 디비접속
connection.close() 접속해제
connect.setAutoCommit(false); true이면 SQL문이 실행후 자동으로 Commit됨
connect.commit();
Statement stmt = connect.reateStatement();
connect.rollback();

connect.cancel();
connect.close(); SQL문이 사용한 모든자원해제

- execute()예제
String sql = 'select empno from emp''
Statement sqlStatement = connection.createStatement();
boolean result = sqlStatement.execute(sql);

executeQuery()예제
String sql = 'select empno from emp';
ResultSet results = sqlStatement.executeQuery(sql);
String text = "";
while(results.next()){
text +=results.getString(1)
}
textArea.setText(text);

- executeUpdate()예제
String sql = 'update emp set sal = sal * 10 where deptno =10';
int records = sqlStatement.executeUpdate(sql);

getMoreResults(), getResultSet(), getUpdateCount(()예제
if(connection.getMoreResults()){
ResultsSet results = connection .getResultSet();
}else{
int updateCount = connection.getUpdateCount();
}

setMaxRows(), getMaxRows()예제
connection.setMaxRows(500);
int max = connection.getMaxRows();

- CallableStatement : out 매개변수를 가지는 소토어드 프로시저를 실행
getBoolean()
boolean = call.getBoolean(1);
getDate()
Date d = call.getDate(1);
getInt()
int I = call.getInt(1);
getString()
String st = call.getString(1);
wasNull() 지정된 out매개변수에 널 값이 변환됐는지 확인
int I = call.getInt(1)
boolean b = call.wasNull();

- DatabaseMetaData : 데이터베이스에 대한 정보를 줍니다.
DatabaseMetaData 오브젝트생성 반드시 필요
String riverName = "oracle.jdbc.driver.OracleDriver";
Driver driver = (Driver)Class.forName(driverName).newInstance();
String dbURL = "jdbc:oracle:thin:scott/tiger@192.9.200.65:1521:ORA81";
connection = driver.connect(dbURL,p);

DatabaseMetaData db = connect.getMetaData();

- getSchemas()예제 : 모든테이블,인덱스,뷰 객체리스트
ResultsSet schemas = db.getSchemas();
while(schemas.next()){
String s = schemas.getString(1);
}

- getColumns()예제:테이블의 모든 컬럼정보
ResultSet Columns = db.getColumns(null, scott, EMP);
while(columns.next()){
String s = columns.getString(3);
}

- getIndexInfo()예제:특정컬럼과 관련된 인덱스 리스트정보 false는 모든정보 true는 unique(유일한값)
ResultSet index = db.getIndexInfo(null, scott, EMP, false, false);
while(columns.next()){
String s = columns.getString(3);
}

- getPrimaryKeys()예제
ResultSet keys = db.etPrimaryKeys(null, scott, EMP);

- getTables();
ResultSet tables = db.getTables(null, scott, null, null);

- getProcedures();
ResultSet procedures = db.getProcedures(null, scott, null, null);

- getURL();
String dirverName = "oracle.jdbc.driver.OracleDriver";
Driver driver = (Driver)Class.forName (driverName).newInstance();
String dbURL = "jdbc:oracle:thin:scott/tiger@192.9.200.65:1521:ORA81";
connection = driver.connect(dbURL, p);
...
String s_url = db.getURL();

- getUserName()
String s_user = db.getUserName();

- PreparedStatement : 동적 SQL문과 스토어드 프로시저를 실행
clearParameters()
prepare.clearParameters();
execute()
prepare.execute();
executeQuery()
Results RESULTS = prepare.executeQuery*(;
executeUpdate()
int Count = prepare.executeUpdate();
setInt()
prepare.setInt(1,1);l
setString()
prepare.setString(1, "This is JAVA test !");

ResultSet : Select문 실행 후 결과를 보여줌
Statement : DML문과 스토어드 프로시저를 실행

간단한 전체예제...
import java.sql.*;
import java.lang.*;
import java.io.*;
import java.util.*;

class sawon
{
public static void main(String args []) throws SQLException, ClassNotFoundException {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:iampro","gracian","gracian1234");

Statement stmt = conn.createStatement();

ResultSet rset = stmt.executeQuery("select * from sawon");

while(rset.next())
System.out.println(rset.getString(1));
}
}

댓글 없음:

댓글 쓰기