Oracle for UNIX FAQ : http://www.orafaq.com/faqunix.htm
1. 오라클을 꼭 유닉스에서 돌려야 하나?
===> 돌려라. Why 가장 믿을 만하니깐,...
라고 이야기 함.
2. ORATAB
===> oratab 파일은 보통 /etc 나 /var/opt/oracle
에 위치한다. 모든 디비가 등록된다.
database_sid:oracle_home_dir:Y|N
위의 포맷으로 써지는데, sid, home 은 말그대로구, Y/N 은 부팅시 자동으로 올릴 것인지 말 것인지를 결정한다.
자동
부팅은 좋은 방법은 아닐지 싶다. 디비가 꺼진다는 것은 심각한 상황이고 왠만하믄 메뉴얼하게 해놓는 것이 나을지 싶다.
주석처리는 # 으로
한다.
예)
#
$ORACLE_SID:$ORACLE_HOME:[N|Y]
#
ORCL:/u01/app/oracle/product/8.0.5:Y
#
위의 말은 자동 부팅한다는 이야기구, 그럼 자동으로 띄울 수 있는 정보를 유닉스 서버에게
줘야한다.
/etc/rc2.d/S99dbstart 또는 다른 파일에 다음 내용의 파일을 만든다.
su - oracle -c "/path/to/$ORACLE_HOME/bin/dbstart" # Start DB's
su
- oracle -c "/path/to/$ORACLE_HOME/bin/lsnrctl start" # Start listener
su -
oracle -c "/path/tp/$ORACLE_HOME/bin/namesctl start" # Start OraNames
(optional)
유닉스, 리눅스 둘다 비슷할 것으로 생각되는데,...
리눅스 기준으로 이야기 하믄, 처음 부팅시에 /etc/initab 이라는 파일을
읽으면서 부팅이 시작되고, /etc/rc.d 에 있는 내용을 실행시키게 된다. rc.d 에는 rc1.d, rc2.d 와 같은 구성으로 되어
있고, 이중 하나에 파일을 집어 넣는다.
3. 설치된 오라클 제품을 어떻게 알아 낼까?
===> ora7, 8
cd
$ORACLE_HOME/orainst
./inspdver
===> 8i 이상
cd
$ORACLE_HOME/install
cat unix.rgs
4. 테이프로 직접 Export 하려면 어떻게 하는가?
===> VOLSIZE= 를 지정해
준다. 단위는 m, k, b , default 는 bytes 이다.
예) exp userid/password file=/dev/rmt0
table=emp volsize=1.2G
유닉스에서의 파일시스템은 마운드로 사용된다. 시디롬을 써도 마운트하고, 테이프를 써도 마운트
한다. 테이프가 /dev/rmt0 여기를 차지하고 있는 것이고, 그곳을 지정해주면 알아서 쓴다. 단, 복구 안되니깐, 잘 써야 겠지...
5. export 를 하고 싶은데, 내 데이터 베이스에 충분한 공간이 없다. 어떻게 하는 것이 좋을까?
===> 돈많으면 사라...
===> compress 를 사용한다.
# Make a pipe
mknod expdat.dmp p # or mkfifo pipe
# Start
compress sucking on the pipe in background
compress < expdat.dmp >
expdat.dmp.Z &
# Wait a second or two before kicking off the
export
sleep 5
# Start the export
exp scott/tiger file=expdat.dmp
===> 네트웍..
Host A:
mknod FIFO.dmp p
exp u/p
FILE=FIFO.dmp 옵션들...
Host B:
mknod FIFO2.dmp p
rsh host1 dd if=FIFO.dmp > FIFO2.dmp
&
imp u/p FILE=FIFO2.dmp 옵션들...
6. 유닉스는 파일이 2기가를 넘지 못한다. 이를 어떻게 해결할 것인가?
===> split 명령을 사용하여 파일을 자른다.
cd /tmp/data
rm exp.dmp
mknod exp.dmp p # mkfifo on certain
Unix flavours
split -b2047m
exp scott/tiger
file=/tmp/data/exp.dmp record=n tables=tableX
cd /tmp/data
rm exp.dmp
mknod exp.dmp p
cat xaa xab xac xad
>/tmp/data/exp.dmp &
imp scott/tiger file=/tmp/data/exp.dmp commit=y
tables=tableX
7. exp/imp 를 빨리 해치우고 싶다면?
===> exp/ imp 는 오라클은 프로그램이 오동작으로부터 SGA 를 보호하기 위해 two task mode 로 실행된다. 따라서, 이것을 single 모드로 바꾸면 속도가 향상된다. 당연히 안 권하겠지. 시간이 심각한 문제가 아니라면 그냥 두는게 나을거 같기도 하다.
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk
singletask
# make -f ins_rdbms.mk expst
# make -f
ins_rdbms.mk impst
# make -f ins_rdbms.mk sqlldrst
# mv
expst $ORACLE_HOME/bin/
# mv impst $ORACLE_HOME/bin/
# mv
sqlldrst $ORACLE_HOME/bin/
8. 유닉스 쉘 스크립트를 통해 select 를 하고 싶다.
===>
#!/bin/sh
VALUE=`sqlplus -silent user/password@instance
<
set pagesize 0 feedback off verify off heading off echo
off
select max(c1) from t1;
exit;
END`
if [ -z "$VALUE" ];
then
echo "No rows returned from database"
exit 0
else
echo $VALUE
fi
===>
#!/bin/ksh
sqlplus -s >junk1 /nolog <
connect user/password@instance
column num_rows new_value num_rows
format 9999
select count(*) num_rows
from table_name;
exit
num_rows
EOF
echo "Number of rows are: $?"
===>
sqlplus -s /nolog |& # Open a pipe to SQL*Plus
print -p --
'connect user/password@instance'
print -p -- 'set feed off pause
off pages 0 head off veri off line 500'
print -p -- 'set term off time
off'
print -p -- "set sqlprompt '"
print -p -- "select sysdate from
dual;"
read -p SYSDATE
print -p -- "select user from
dual;"
read -p USER
print -p -- "select global_name from
global_name;"
read -p GLOBAL_NAME
print -p -- exit
echo
SYSDATE: $SYSDATE
echo USER: $USER
echo GLOBAL_NAME:
$GLOBAL_NAME
9. 자동 on-line 백업을 합시다. ( online 백업이란 오라클 켜놓고 하는 백업입니당 )
1) 어떤 tablespace 가 있는지 확인해서
SELECT TABLESPACE_NAME FROM
SYS.DBA_TABLESPACES;
2) 각 tablespace 를 백업 모드로 만든다.
ALTER TABLESPACE
... BEGIN BACKUP;
3) 각 데이터 파일을 알아내고, 각 파일을 pax, tar, ufsdump, dd, cpio 등의
방법으로 카피한다.
대상이 되는 파일은 데이터 파일, 컨드롤 파일, 로그 파일이다.
SELECT
NAME FROM SYS.V_$DATAFILE;
SELECT NAME FROM SYS.V_$CONTROLFILE;
SELECT MEMBER FROM SYS.V_$LOGFILE;
$ find . -depth -print | cpio -ocBv >/dev/tapedevice
$ dd
if=/dev/raw_device of=/dev/tape_device BS=8k
$ pax -w -f archive.pax
*
4) 각 tablespace 의 백업모드를 해제한다.
ALTER TABLESPACE ... END BACKUP;
** script : cp 한 경우,
rem
-----------------------------------------------------------------------
rem
Filename: backup.sql
rem Purpose: Generate script to do a simple on-line
database backup.
rem Notes: Adjust the copy_cmnd and copy_dest variables
and run from
rem sqlplus. Uncomment last few lines to do the
actual backup.
rem Author: Frank Naude, Oracle FAQ
rem
-----------------------------------------------------------------------
set serveroutput on
set trimspool on
set line 500
set head
off
set feed off
spool backup.cmd
declare
copy_cmnd constant varchar2(30) := 'cp'; -- Use "ocopy"
for NT
copy_dest constant varchar2(30) := '/backup/'; -- C:\BACKUP\ for
NT
dbname varchar2(30);
logmode varchar2(30);
begin
select name,
log_mode
into dbname, logmode
from sys.v_$database;
if logmode <> 'ARCHIVELOG' then
raise_application_error(-20000,
'ERROR: Database must
be in ARCHIVELOG mode!!!');
return;
end if;
dbms_output.put_line('spool
backup.'||dbname||'.'||
to_char(sysdate,
'ddMonyy')||'.log');
-- Loop through tablespaces
for c1 in (select tablespace_name
ts
from sys.dba_tablespaces)
loop
dbms_output.put_line('alter tablespace '||c1.ts||' begin backup;');
--
Loop through tablespaces' data files
for c2 in (select file_name
fil
from sys.dba_data_files
where
tablespace_name = c1.ts)
loop
dbms_output.put_line('!'||copy_cmnd||' '||c2.fil||' '||copy_dest);
end
loop;
dbms_output.put_line('alter tablespace '||c1.ts||' end backup;');
end loop;
-- Backup controlfile and switch logfiles
dbms_output.put_line('alter
database backup controlfile to trace;');
dbms_output.put_line('alter
database backup controlfile to '||''||
copy_dest||'control.'||dbname||'.'||
to_char(sysdate,'DDMonYYHH24MI')||''||';');
dbms_output.put_line('alter
system switch logfile;');
dbms_output.put_line('spool
off');
end;
/
spool off
set head on
set feed on
set serveroutput off
-- Unremark/uncomment the following line to run the backup script
--
@backup.cmd
-- exit
10. sgadef.dbf 파일은??
===> ${ORACLE_HOME}/dbs 에 있는 파일이다. User process 가 DB 에 접속했을때, Oracle shadow processes 에게 SGA 주소를 알려준다. 당연히, 지우면 데이터베이스가 다운된다.
11. 오라클에 어떤 패치가 되었을까??
===> owhat 을 사용한다.
$ cd $ORACLE_HOME/bin
$ owhat oracle
Oracle patches in
/app/oracle/product/7.3.4/bin/oracle:
sf.c VLFS patch
08/1/96
sksa.c VLFS patch 08/1/96
sp.c VLFS patch
08/1/96
ssf.c VLFS patch 08/1/96
12. 프로세스 모니터링
truss -rall -wall -p
truss -p $ lsnrctl dbsnmp_start
truss 는 sun 머신에서 사용한다. HP-UX : tusc , Linux : strace , SCO Unix : trace
===> 시스템 로그를 보려면,
tail -f /var/adm/SYSLOG
tail -f
/var/adm/messages
tail -f /var/log/syslog
13. 모든 디비에게 일을 시키는 스크립트.
===> 모든 디비는 ORATAB 에 리스트 되어 있으므로, 읽어서 해결한다.
#!/bin/ksh
ALL_DATABASES=`cat /etc/oratab|grep -v
"^#"|grep -v "N$"|cut -f1 -d: -s`
for DB in $ALL_DATABASES
do
unset TWO_TASK
export
ORACLE_SID=$DB
export ORACLE_HOME=`grep "^${DB}:" /etc/oratab|cut
-d: -f2 -s`
export PATH=$ORACLE_HOME/bin:$PATH
echo
"---> Database $ORACLE_SID, using home $ORACLE_HOME"
sqlplus -s
system/${DB}password @<<-EOF
select * from
global_name;
exit;
EOF
done
14. 오라클이 테이블스페이스 삭제시 데이터 파일을 삭제하지 않는 이유는?
===> 불편하다고 생각했는데, 읽어보니 당연한 이야기네... 오라클이 실행되는 동안에 오라클 프로세스와 관련있는 파일을 삭제하는 것은 좋지 않다. shutdown 되었을때 삭제된다.
15. 환경변수
LD_LIBRARY_PATH : 라이브러리 파일 있는 곳 예:
/usr/lib:/usr/openwin/lib:$ORACLE_HOME/lib:/usr/games/lib
ORACLE_BASE :
기본 HOME. 보통 오라클이 설치될때 버전번호 들어가기 전까지의 디렉토리를 의미한다. 즉, 처음 설치한
곳.
ORACLE_HOME : 사용중인 오라클 HOME
ORACLE_SID : ORACLE Server
system identifier (SID) or instance name. 보통 데이터베이스 이름이 사용되며, 디비를 식별해내는 이름이니깐
상당히 중요하당.
ORACLE_PATH : 명령어를 실행할때 어디를 가장 먼저 봐야 하는지 설정한다. 보통은 쉘상에서 사용하니깐,
ORACLE_PATH 가 안잡혀서 문제라기 보담, PATH 에 오라클 관련 bin path 가 잡히지 않는 것이 문제다.
ORACLE_TERM : 문자모드 에서 무엇을 사용하는가?
ORAENV_ASK : This will not
ask for ORACLE_SID, it will take it as it is specified. This variable is
normally set to "NO" before oraenv is invoked from a script.
TNS_ADMIN : TNSNAMES.ORA, SQLNET.ORA 와 같은 TNS (Transparent Network
Substrate) 파일이 어디 있는지.
ORACLE_TRACE Trace Oracle's Unix shell scripts as
they execute (using set -x).
TWO_TASK : 원격머신에 접속하기 위한 방법이다.
sqlplus scott/tiger@db1 , export TWO_TASK=db1; sqlplus scott/tiger 는
동일한 의미이다.
TMPDIR : 오라클 사용자가 쓸수 있는 최소 20 메가의 디렉토리 공간을 의미한다. 리눅스에서는 보통
/usr/tmp 를 쓴다.
16. 오라클 프로세스 찾는 요령
ps -ef | grep inherit : 모든 사용중인 리스너
ps -ef | grep smon : 모든 사용중인
디비
ipcs | grep oracle : ipcrm 을 통해 삭제된 Semaphores 와 shared memory segments.
주의!!
ls -la . | awk '{total += $5}; END {print total}' : 현재 디렉토리의 파일의 총
사이즈.
ls -laR . | awk '{total += $5}; END {print total/1024/1024 " Meg"}' :
현재 디렉토리 및 서브까지 포함한 파일 총 사이즈
ls -laR | awk '{print $5 "\t" $9}' | sort -n |
tail : 현재 디렉토리 및 서브에서 가장 큰 파일
'Databases' 카테고리의 다른 글
mysql configure (0) | 2009.09.03 |
---|---|
오라클 정시간되면 쿼리 자동실행 (0) | 2009.09.03 |
MYSQL 서버 설치 (0) | 2009.08.17 |
Oracle® Database SQL Developer Installation Guide Release 1.2 (0) | 2009.08.17 |
mysqldump 백업 M [출처] mysqldump 백업|작성자 마루아라 (0) | 2009.08.07 |