오라클 테이블 복사 쿼리

|


 


테스트용 테이블 만들때 유용하게 쓸수 있죠..

CREATE TABLE TEST_MEMBER AS SELECT * FROM MEMBER

 

검색을 걸어서 필요한 데이타만 복사할수도 있죠.

CREATE TABLE TEST_MEMBER AS SELECT * FROM MEMBER WHERE IDX<10000

 

테이블 구조만 복사하고 싶다면..

CREATE TABLE TEST_MEMBER AS SELECT * FROM MEMBER WHERE 1=2

검색조건을 이렇게 한다면 테이타는 복사가 안되겠죠..

 

테이블이 이미 만들어진 경우는

INSERT INTO TEST_MEMBER SELECT * FROM MEMBER


주의할점은 테이블구조만 복사된다는 것이다.

프라이머리키나 인덱스등은 복사가 안돼니 따로 설정해 주어야 한다.

And

crow의 오라클 백업/복구 제2회

|
출처 : http://cafe.naver.com/javalove.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=294&

안녕하세요 영원한 초보 crow입니다.   두번째 강좌입니다..^^
 
김호님 감사합니다 허접하기 짝이 없는 강좌가 올라갈 줄이야 꿈에도 몰랐습니다.
 
앞으로 더욱 알차게 실무에 바로 쓸 수 있게 올리겠습니다.
 
 
그럼 첫번째 강좌에 이어 오늘은 테이블스페이스를 만들어 보고, 크기 조정하고, 지우고...
 
그리고 테이블 스페이스가 지웠졌을 때 복구하는 이런 것들을 해보죠.
 
아무래도 데이타가 쌓이는 곳이 이곳이다 보니 쪼까 중요하자나요..
 
일단 오라클을 실행하구요..
[oracle@crow oracle]$ svrmgrl
 
SVRMGR> connect internal
 
SVRMGR> startup
전 시간에 배운걸 이용해서 테이블 스페이스가 어디있는지 확인하겠습니다.
SVRMGR> select tablespace_name, bytes, file_name from dba_data_files;
TABLESPACE_NAME                BYTES      FILE_NAME                                                   
-------------------------------------------------------------------------------
SYSTEM                              183500800   /home/oracle/oradata/ORCL/system01.dbf          
OEM_REPOSITORY                  5242880   /home/oracle/oradata/ORCL/oemrep01.dbf      
RBS                                     26540032   /home/oracle/oradata/ORCL/rbs01.dbf             
TEMP                                   10485760   /home/oracle/oradata/ORCL/temp01.dbf           
USERS                              2087409664   /home/oracle/oradata/ORCL/users01.dbf       
INDX                                    10485760   /home/oracle/oradata/ORCL/indx01.dbf          
DRSYS                                 83886080   /home/oracle/oradata/ORCL/drsys01.dbf       

7 rows selected.
보시는대로 /home/oracle/oradata/ORCL 에 다 있군요..
 
그러면 test라는 테이블 스페이스를 하나 만들어 보겠습니다.
SVRMGR> create tablespace test
     2> datafile '/home/oracle/oradata/ORCL/test_01.dbf'
     3> size 10K;
Statement processed.
 
SVRMGR> select tablespace_name, bytes, file_name from dba_data_files;
TABLESPACE_NAME                BYTES      FILE_NAME                            
------------------------------ ---------- ------------------------------------------
SYSTEM                            183500800     /home/oracle/oradata/ORCL/system01.dbf     
OEM_REPOSITORY                5242880     /home/oracle/oradata/ORCL/oemrep01.dbf     
RBS                                   26540032     /home/oracle/oradata/ORCL/rbs01.dbf          
TEMP                                 10485760     /home/oracle/oradata/ORCL/temp01.dbf     
USERS                            2087409664     /home/oracle/oradata/ORCL/users01.dbf       
INDX                                  10485760     /home/oracle/oradata/ORCL/indx01.dbf        
DRSYS                               83886080     /home/oracle/oradata/ORCL/drsys01.dbf           
TEST                                      10240     /home/oracle/oradata/ORCL/test_01.dbf <==여기보이시죠 
8 rows selected.
보시는대로 test라는 테이블 스페이스를 만들고요,
 
/home/oracle/oradata/ORCL/ 에 test_01.dbf라는 이름의 파일을 만들었습니다.. 
 
아.. 그리고 크기는 10kbyte 로 만들어놨습니다..
 
여기서 꼭 /home/oracle/oradata/ORCL/ 에 만들 필요는 없습니다. 
 
전 그저 쉽게 하기 위해 이렇게 하는겁니다..^^
 
그럼 테이블 스페이스의 크기를 늘려볼까요?
SVRMGR> alter tablespace test add datafile '/home//oracle/oradata/ORCL/test_02.dbf' size 30K;
Statement processed.
  SVRMGR> !ls -al /home/oracle/oradata/ORCL total 2363008 drwxr-x--x 2 oracle dba 4096 Apr 13 06:02 . drwxr-x--x 3 oracle dba 4096 Nov 27 05:54 .. -rw-r----- 1 oracle dba 4315136 Apr 13 06:03 control01.ctl -rw-r----- 1 oracle dba 4315136 Apr 13 06:03 control02.ctl -rw-r----- 1 oracle dba 83888128 Apr 13 05:48 drsys01.dbf -rw-r----- 1 oracle dba 10487808 Apr 13 05:48 indx01.dbf -rw-r----- 1 oracle dba 5244928 Apr 13 05:48 oemrep01.dbf -rw-r----- 1 oracle dba 26542080 Apr 13 05:48 rbs01.dbf -rw-r----- 1 oracle dba 512512 Apr 13 05:48 redo01.log -rw-r----- 1 oracle dba 512512 Apr 13 06:02 redo02.log -rw-r----- 1 oracle dba 183502848 Apr 13 05:48 system01.dbf -rw-r----- 1 oracle dba 10487808 Apr 13 05:48 temp01.dbf -rw-r----- 1 oracle dba 12288 Apr 13 05:53 test_01.dbf <== 첫번째 만든 테이블 스페이스 -rw-r----- 1 oracle dba 32768 Apr 13 06:02 test_02.dbf <== 크기를 늘린 테이블 스페이스 -rw-r----- 1 oracle dba 2087411712 Apr 13 05:48 users01.dbf
흠 그럼 데이타 파일 크기를 늘리죠.
SVRMGR> !ls -al /home/oracle/oradata/ORCL/test_02.dbf
-rw-r-----   1 oracle   dba         53248 Apr 13 06:05 /home//oracle/oradata/ORCL/test_02.dbf
크기가 늘어났군요..
 
그럼 지워볼까요..
SVRMGR> drop tablespace test;
Statement processed.
지금은 테이블 스페이스 안에 데이타가 없어서 그냥 이렇게 지워졌지만..
 
데이타가 들어있다면
drop tablespace test including contents;
이렇게 하세요..
 
그럼 어디 데이타 파일도 지워졌나 보죠.
SVRMGR> !ls -al /home//oracle/oradata/ORCL/
total 2363032
drwxr-x--x   2 oracle   dba          4096 Apr 13 06:02 .
drwxr-x--x   3 oracle   dba          4096 Nov 27 05:54 ..
-rw-r-----   1 oracle   dba       4315136 Apr 13 06:11 control01.ctl
-rw-r-----   1 oracle   dba       4315136 Apr 13 06:11 control02.ctl
-rw-r-----   1 oracle   dba      83888128 Apr 13 05:48 drsys01.dbf
-rw-r-----   1 oracle   dba      10487808 Apr 13 05:48 indx01.dbf
-rw-r-----   1 oracle   dba       5244928 Apr 13 05:48 oemrep01.dbf
-rw-r-----   1 oracle   dba      26542080 Apr 13 05:48 rbs01.dbf
-rw-r-----   1 oracle   dba        512512 Apr 13 05:48 redo01.log
-rw-r-----   1 oracle   dba        512512 Apr 13 06:08 redo02.log
-rw-r-----   1 oracle   dba      183502848 Apr 13 05:48 system01.dbf
-rw-r-----   1 oracle   dba      10487808 Apr 13 05:48 temp01.dbf
-rw-r-----   1 oracle   dba         12288 Apr 13 06:08 test_01.dbf <==
-rw-r-----   1 oracle   dba         53248 Apr 13 06:08 test_02.dbf <==데이타파일은 이렇게 2개 살아있죠
-rw-r-----   1 oracle   dba      2087411712 Apr 13 05:48 users01.dbf
이 데이타 파일을 지워보겠습니다..
SVRMGR> !rm -f /home//oracle/oradata/ORCL/test_* 

SVRMGR> !ls -al /home//oracle/oradata/ORCL/ total 2362964 drwxr-x--x 2 oracle dba 4096 Apr 13 06:12 . drwxr-x--x 3 oracle dba 4096 Nov 27 05:54 .. -rw-r----- 1 oracle dba 4315136 Apr 13 06:12 control01.ctl -rw-r----- 1 oracle dba 4315136 Apr 13 06:12 control02.ctl -rw-r----- 1 oracle dba 83888128 Apr 13 05:48 drsys01.dbf -rw-r----- 1 oracle dba 10487808 Apr 13 05:48 indx01.dbf -rw-r----- 1 oracle dba 5244928 Apr 13 05:48 oemrep01.dbf -rw-r----- 1 oracle dba 26542080 Apr 13 05:48 rbs01.dbf -rw-r----- 1 oracle dba 512512 Apr 13 05:48 redo01.log -rw-r----- 1 oracle dba 512512 Apr 13 06:08 redo02.log -rw-r----- 1 oracle dba 183502848 Apr 13 05:48 system01.dbf -rw-r----- 1 oracle dba 10487808 Apr 13 05:48 temp01.dbf -rw-r----- 1 oracle dba 2087411712 Apr 13 05:48 users01.dbf
자 이렇게 해서 지워졌습니다..
SVRMGR> shutdown immediate;
SVRMGR> exit
데이타 베이스를 종료하고 나왔습니다..
 
지금까지 테이블스페이스를 만들어보고, 조정하고, 지워봤습니다.
 
자, 이제 temp 라는 테이블 스페이스를 유실시킨 후 복구 실습을 한번 해보겠습니다.
 
역시 오라클을 시동하시구요,
[oracle@crow oracle]$ svrmgrl
SVRMGR> connect internal
SVRMGR> startup
그럼 먼저 temp 테이블 스페이스의 크기와 경로를 알아보구요
SVRMGR> select tablespace_name, bytes, file_name from dba_data_files;
TABLESPACE_NAME                BYTES      FILE_NAME                                                             
------------------------------ ----------ㅡ------------------------------------------------
SYSTEM                            183500800     /home/oracle/oradata/ORCL/system01.dbf                 
OEM_REPOSITORY                5242880     /home/oracle/oradata/ORCL/oemrep01.dbf               
RBS                                   26540032     /home/oracle/oradata/ORCL/rbs01.dbf  
--------------------------------------------------------------------------------          
TEMP                                 10485760     /home/oracle/oradata/ORCL/temp01.dbf<==여기 보이시죠 
--------------------------------------------------------------------------------
USERS                            2087409664     /home/oracle/oradata/ORCL/users01.dbf                     
INDX                                  10485760     /home/oracle/oradata/ORCL/indx01.dbf                        
DRSYS                               83886080    /home/oracle/oradata/ORCL/drsys01.dbf                      
7 rows selected.
경로는 아까 본 거기이고 크기는 1M 네요.
SVRMGR> shutdown abort  <== failure가 되었다고 가정하는 것입니다.
ORACLE instance shut down.
  SVRMGR> exit Server Manager complete.
  [oracle@crow ORCL]$ ls control01.ctl drsys01.dbf oemrep01.dbf redo01.log system01.dbf users01.dbf control02.ctl indx01.dbf rbs01.dbf redo02.log temp01.dbf [oracle@crow ORCL]$ mv temp01.dbf temp01.org <== rm으로 지워도 되지만 일부러 이름을 바꿨습니다. 사실 temp라는 테이블스페이스는 없으면 안되는 테이블스페이스거든요..^^ 어쨌든 현재 temp01.dbf라는 파일이 유실되었다는 가정은 되었습니다..
[oracle@crow ORCL]$ svrmgrl 
 
SVRMGR> connect internal
Connected.
  SVRMGR> startup mount; <==마운트까지만 스타트하고요
SVRMGR> alter database open; alter database open * ORA-01157: cannot identify/lock data file 4 - see DBWR trace file ORA-01110: data file 4: '/home/oracle/oradata/ORCL/temp01.dbf' ==============파일유실이 발생했습니다.============
SVRMGR> alter database datafile '/home/oracle/oradata/ORCL/temp01.dbf' offline drop; Statement processed.
위처럼 파일을 지우고요.
 
아래처럼
SVRMGR> alter database open;
Statement processed.
이렇게 데이타베이스를 open 합니다
 
그리고 나서
SVRMGR> drop tablespace temp including contents;
Statement processed.
이렇게 temp 스페이스를 지웁니다..
 
그런다음 아래와 같이
SVRMGR> create tablespace temp datafile '/home/oracle/oradata/ORCL/temp01.dbf' size 1M;
Statement processed.
아까 경로 와 크기를 알아둔 거 있자나요. 그걸 그대로 이용해서 하나 다시 만들어줍니다..그럼 끝..
 
이제 오라클을 종료하고요..
 SVRMGR> shutdown immediate
스타트업을 합니다..
 SVRMGR> startup 
ORACLE instance started.
Total System Global Area                         71998864 bytes
Fixed Size                                          64912 bytes
Variable Size                                    54984704 bytes
Database Buffers                                 16777216 bytes
Redo Buffers                                       172032 bytes
Database mounted.
Database opened.
잘 실행되네요..
 
다시 종료시키죠..
 SVRMGR> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SVRMGR> exit
Server Manager complete.
파일이 복구되어있는지 ls로 확인해 보면..
 [oracle@crow ORCL]$ ls
control01.ctl  drsys01.dbf    oemrep01.dbf   redo01.log     system01.dbf   temp01.org
control02.ctl  indx01.dbf     rbs01.dbf      redo02.log     temp01.dbf     users01.dbf
[oracle@crow ORCL]$ rm -f temp01.org <== 테스트가 끝났으므로 이젠 필요없는 파일을 지웁니다..
이렇게 테스트가 끝났습니다.  테이블스페이스 유실이었을때 이렇게 하면 됩니다..
 
그런데 여기서 중요한 건 경로와 크기를 잘 알아야 한다는 것이겠죠..  이걸 어떻게 기억하낭^^
 
 
오늘은 이만 합니다..^^
 
좀 난해하면 crow@dreamsta.com으로 연락주세요... 변변치 않는 실력에 답변까지 하기가 좀 뭐하지만
 
최선을 다해 답변해드리겠습니다..
 
감사합니다..
 
다음 강좌에서는 아카이브 모드와 노아카이브모드에대해서 알아보져..
 
그럼 안녕히계세요..

And

crow의 오라클 백업/복구 제1회

|
출처 : http://cafe.naver.com/javalove.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=294&











안녕하세요? 백업/복구 과정 강좌를 맡게 된 영원한 초보 crow입니다..   정식 명칭은 10의 redcrow 이구요 저도 초보라 강좌가 강좌답게 갈런지 의심스럽네요..^^ ..   현재 (주)DWS에서 허접한 개발자로 있구요 ^^   처음 게임프로그래머로 시작을 했고 IT쪽은 이제 1년이 쪼금 안됐네요..   나이요 절라 많아요 73년12월10일생이에요. 음력으로여^^     아무쪼록 귀엽게 봐주시구요..   백업은 저도 몇 달 전에 학원에서 듣고 써 먹지를 못했습니다..   학원에서 배운 그대로 여러분에게 전달은 안되겠지만 한번 최선을 다해 보도록 하겠습니다..     저도 테스트를 해봐야 하기에 컴터는 펜Ⅲ650 / 128M (리눅스 6.2/오라클 8i) 에 설치를 해놓았습니다..   그리고 일단, 여러분.. 디비는 만들어보셨는지 ^^   오라클을 설치하면 기본적으로 디비가 하나 만들어지지만,   그거말고 여러분이 디비를 하나 만들줄 알아야 합니다..   전 여러분이 디비를 만들줄 안다는 가정하에서 들어가겠습니다..   왜냐하면요.. 오라클 데이타베이스에 전반적인 메모리 구조와 프로세서 구조를 설명을 해야 하는데..   저도 사실 가물가물하거든요 오라클을 안만진지가 어언~~~~~~~몇 개월돼서..^^       그럼 일단 오라클 데이타 베이스에 데이타파일, 컨트롤파일, 리두로그파일 들이 어디에 있는지 알아보죠   이 파일들이 꼭 있어야 백업이 가능하고 복구가 가능합니다.   오늘은 이 파일들을 가지고 놀아보겠습니다.   그리고 이 파일들을 가지고 백업을 하는건 다음시간에 하기로 하구요..     데이타 베이스에 데이터파일은   v$datafile, v$datafile_header, dba_data_files   이 값들을 추출해서 볼 수 있습니다..   데이터파일이란 테이블스페이스를 구성하는 파일로 실제로 데이타가 저장되는 곳입니다.     한번 실습해보죠..
  일단 오라클이 시동이 안되어있다면 이렇게 시동하세요.

[oracle@crow oracle]$ svrmgrl 
Oracle Server Manager Release 3.1.5.0.0 - Production
 
(c) Copyright 1997, Oracle Corporation.  All Rights Reserved.
 
Oracle8i Release 8.1.5.0.2 - Production
With the Java option
PL/SQL Release 8.1.5.0.0 - Production
 
SVRMGR> connect internal
Connected.
 
SVRMGR> startup
ORACLE instance started.
Total System Global Area                         71998864 bytes
Fixed Size                                          64912 bytes
Variable Size                                    54984704 bytes
Database Buffers                                 16777216 bytes
Redo Buffers                                       172032 bytes
Database mounted.
Database opened.

참고로 오라클 종료 명령어는 shutdown입니다.
 
이제 값을 추출해 보죠.

SVRMGR> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/home/oracle/oradata/ORCL/system01.dbf
/home/oracle/oradata/ORCL/oemrep01.dbf
/home/oracle/oradata/ORCL/rbs01.dbf
/home/oracle/oradata/ORCL/temp01.dbf
/home/oracle/oradata/ORCL/users01.dbf
/home/oracle/oradata/ORCL/indx01.dbf
/home/oracle/oradata/ORCL/drsys01.dbf

7 rows selected.

데이타 파일 위치와 이름들이 보이시죠..  디비를 한번 만들어보신 분들은 그 사용 목적이 뭔지 아실껍니다..
 
모르시는 분들도 그냥 이런게 있구나만 알고 계십시요.
 
이 강좌는 오라클 백업과 복구이기 때문에 자세한 설명은
 
다음에 제가 오라클 디비를 만들어 볼 때 해드리거나 아니면 다른 참고 자료를 읽어보세요..
 
제가 잘가는 database.sarang.net에 가보시면 오라클뿐만아니라 여러가지 많은 디비들의 자료가 있습니다.
 
 
그럼 계속 나가보겠습니다..
 
데이터파일에 관한 정보는 v$datafilev$datafile_header, dba_files 에 있습니다.
 
또 있던거 같은데 생각이 나질 않네요...^^;
 
우리는 지금 데이타파일의 위치와 이름만 알면 되니까 이거면 충분합니다.
 
그리고 컨드롤파일의 위치와 파일 이름은 v$controlfile, 
 
리두로그는 v$logfile, v$log를 통해서 볼 수 있습니다..

SVRMGR> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
/home/oracle/oradata/ORCL/control01.ctl
/home/oracle/oradata/ORCL/control02.ctl

2 rows selected.

컨트롤 파일 위치 정보 입니다..
 
컨트롤 파일은 데이타 화일들의 위치나 Online/Offline 상태, 온라인 로그화일들의 위치와 
 
가장 최근의 system change number 값과 가장최근에 발행한 CheckPoint 시간과 
 
각종 오라클 관련 정보를 저장하는곳입니다.

SVRMGR> select * from v$logfile;
GROUP#     STATUS  MEMBER
=======================================================
1                 STALE   /home/oracle/oradata/ORCL/redo01.log <--현재 이것만 사용하고 있습니다..
2                             /home/oracle/oradata/ORCL/redo02.log <--이건 아직 사용대기중입니다..

2 rows selected.

로그파일 위치와 파일이름이 출력되었습니다.
 
리두로그파일은 변화된 모든 데이타를 저장하며 데이타베이스 복구 작업의 경우에만 사용됩니다.
 
참고로 데이타베이스 대한 정보는 v$database 로 보실 수 있습니다.
 
그리고 각 v$view 에 대한 필드명을 알고 싶으면, 
 
알고 있겠지만 
 
desc v$database, v$datafile(테이블명);
 
아시겠져..
 
 
오늘 강좌를 이걸로 마치겠습니다 
 
다음 강좌에서는 테이블스페이스를 하나 만들고 테이블을 만들어서 데이타를 넣어서 
 
그걸 가지고 백업해보겠습니다..
 
그럼 이만..^^
And