[출처] 오라클 테이블 복사 쿼리 |작성자 수유산장
테스트용 테이블 만들때 유용하게 쓸수 있죠..
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
주의할점은 테이블구조만 복사된다는 것이다.
프라이머리키나 인덱스등은 복사가 안돼니 따로 설정해 주어야 한다.
출처 : http://cafe.naver.com/javalove.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=294&
안녕하세요 영원한 초보 crow입니다. 두번째 강좌입니다..^^
김호님 감사합니다 허접하기 짝이 없는 강좌가 올라갈 줄이야 꿈에도 몰랐습니다.
앞으로 더욱 알차게 실무에 바로 쓸 수 있게 올리겠습니다.
그럼 첫번째 강좌에 이어 오늘은 테이블스페이스를 만들어 보고, 크기 조정하고, 지우고...
그리고 테이블 스페이스가 지웠졌을 때 복구하는 이런 것들을 해보죠.
아무래도 데이타가 쌓이는 곳이 이곳이다 보니 쪼까 중요하자나요..
일단 오라클을 실행하구요..
안녕하세요 영원한 초보 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 |
보시는대로 /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/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> 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. |
[oracle@crow ORCL]$ svrmgrl SVRMGR> connect internal Connected. |
위처럼 파일을 지우고요. 아래처럼
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으로 연락주세요... 변변치 않는 실력에 답변까지 하기가 좀 뭐하지만 최선을 다해 답변해드리겠습니다.. 감사합니다.. 다음 강좌에서는 아카이브 모드와 노아카이브모드에대해서 알아보져.. 그럼 안녕히계세요..
출처 : 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 |
데이타 파일 위치와 이름들이 보이시죠.. 디비를 한번 만들어보신 분들은 그 사용 목적이 뭔지 아실껍니다.. 모르시는 분들도 그냥 이런게 있구나만 알고 계십시요. 이 강좌는 오라클 백업과 복구이기 때문에 자세한 설명은 다음에 제가 오라클 디비를 만들어 볼 때 해드리거나 아니면 다른 참고 자료를 읽어보세요.. 제가 잘가는 database.sarang.net에 가보시면 오라클뿐만아니라 여러가지 많은 디비들의 자료가 있습니다. 그럼 계속 나가보겠습니다.. 데이터파일에 관한 정보는 v$datafile과 v$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 |
컨트롤 파일 위치 정보 입니다.. 컨트롤 파일은 데이타 화일들의 위치나 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 <--이건 아직 사용대기중입니다.. |
로그파일 위치와 파일이름이 출력되었습니다. 리두로그파일은 변화된 모든 데이타를 저장하며 데이타베이스 복구 작업의 경우에만 사용됩니다. 참고로 데이타베이스 대한 정보는 v$database 로 보실 수 있습니다. 그리고 각 v$view 에 대한 필드명을 알고 싶으면, 알고 있겠지만 desc v$database, v$datafile(테이블명); 아시겠져.. 오늘 강좌를 이걸로 마치겠습니다 다음 강좌에서는 테이블스페이스를 하나 만들고 테이블을 만들어서 데이타를 넣어서 그걸 가지고 백업해보겠습니다.. 그럼 이만..^^