[Oracle][oracle 환경설정 및 db imp(복원)-3] Oracle DB 복구(삽질) 2부
virtual machine share폴더에 sql 스크립트를 넣고, 리눅스에서 실행해보려는데
share폴더가 없길래 폴더를 찾아보기로했다.
디렉토리 검색, 찾기
- 전체 폴더에서 찾기
find / -name 폴더명 -type d
- 현재폴더(하위 디렉토리까지) 에서 찾기
find ./ -name 폴더명 -type d
열심히 찾아봤는데 거의 모든 디렉토리에 대해서 허가 거부 당했다.
디렉토리 읽기 권한이 없어서 허가 거부당해서 찾을 수 없다는걸 알고 sudo find를 사용하기로 함!
사용자가 sudo 명령 사용하기 위해 root 계정으로 사용자에게 sudo 권한주기
먼저 su root 명령어로 root 계정으로 전환하고,
/etc/sudoers 파일을 vi 명령으로 열어서
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
해당 부분에 문제가 없는지 확인했다. 주로%wheel 부분이 주석처리되어있다거나 하는 문제가 있다고 한다.
문제가 없으므로 wheel group은 모든 command를 수행할 권한이 있으니까 아래 명령으로 내가 작업하는 user를 wheel 그룹에 추가했다. (당연히 root만 수행할 수 있음)
usermod --append -G wheel {username}
그다음 내 user로 돌아와서 share폴더를 find 명령으로 찾고,
알아보니까 share폴더에 넣은 스크립트 sql파일의 소유자가 root, 디렉토리들도 root 소유라서 안찾아지는 거였다.
sql 파일의 소유자가 root다 보니 소유자를 변경시킬까, 파일 권한을 변경할까 하다가, 권한을 변경하기로 했다.
sudo chmod 777 {파일이름} 명령을 통해 777(전체 사용자 읽기, 쓰기, 실행 권한)권한을 주고,
그다음 mv 명령으로 원하는 위치에 옮겨놓았다.
자 다시 초심으로 돌아가,
사실 내가 생성한 user가 스크립트 파일만 실행시키면 생성,권한 부여 모든게 정확히 이루어질거니까, user 생성하기 전, 그러니까 내가 처음 인계받았을 적의 가상환경을 다시 불러와 작업하기로했다.
다시 처음부터 복구작업 시작!,
1. SID, instance_name, db_name 일치 확인
구버전 oracle에서 확인하면 모든게 abcd21로 일치했는데,
내 가상환경을 다시 불러왔으니 확인해보기로했다.
SQL> select name from v$database; // dbname확인
SQL> select instance_name from v$instance // instancename 확인
$ env | grep ORACLE // SID 및 ORACLE 환경설정 확인
쉣 instance_name이 이상하다. db복구 프로젝트 첫 시도때는 db_name을 변경해서 일치시켰지만, 내가 추후에 실행할 스크립트 sql파일을 보고나니까 instance_name과 sid를 db_name에 맞추는게 낫겠다는 생각이 들어 그렇게 진행했다.
순서는 listener 수정 → spfile||pfile 수정
2. listener.ora 수정하기
/app/network/admin/ 디렉토리에 listener.ora 파일이 있다.(app : 오라클 설치 디렉토리)
vi listener.ora 명령을 통해 SID_name 이라고 되오있는 부분 수정한다.
나의 경우는 이건 내가 원하는 이름으로 되어있었다.
3. spfile || pfile 수정하기
spfile로 로그인하고있지 않았다.
pfile 이름도 initsource.ora 로 sid가 택도없이 source로 되어있는 것 확인,
vi initsource.ora 명령어로 내용바꾸고 rename 해가지고 어거지로 pfile을 변경해서!
접속
sqlplus / as sysdba
startup pfile=$ORACLE_HOME/dbs/init{내가 새로 바꾼 sid}.ora
이렇게 수동으로 pfile을 지정해주면 로그인이 된다. 근데
instance_name을 확인한 결과 아직도 source 그대로이다…..
알고보니 listener.ora, pfile,
애초에 세션에서 설정된 oracle sid를 모두 변경해야 정상 반영되는거였고,
세션 oracle sid 변경
echo 'export ORACLE_SID=새로 지정할 sid' >> ~/.bashrc
source ~/.bashrc
위 명령어를 통해 변경했다.
이제야 드디어 sid, instance_name, db_name을 맞췄다!
4. 스크립트 파일 .sql 실행시키기
@@경로\\sql파일.sql
위와 같이 입력하면 스크립트 파일을 생성할 수 있다.
받아온 스크립트 파일을 실행했더니 아래의 오류가 발생했돠
ora-01119 : error in creating database file
ora-27040: file create error, unable to create file
imp 전, 스크립트를 실행하는 상황이였고, 검색해보니, exp했던 환경과 경로가 안맞는 문제이다.
나의 경우는 경로가 당연히 안맞을 테니까 스크립트 파일 수정하고 다시함
그런데, 하나의 tablespace에서
ora-01658 unable to create initial extent for segment in tablespace users
에러가 났다, tablespace 공간이 부족하다는건데, 내가 imp 하기전 실행시킨 스크립트 파일안에서 100m로 지정해준 크기가 db내용이 많아지면서 부족한가보다
→ 우선 tablespace name과 data file name 확인
tablespace_name 확인
SELECT TABLESPACE_NAME, BLOCK_SIZE
FROM DBA_TABLESPACES
;
data file_name 확인
SELECT FILE_NAME, FILE_ID, TABLESPACE_NAME
FROM DBA_DATA_FILES
WHERE TABLESPACE_NAME = '<방금 찾은 tablespace 이름>'
;
방금 확인한 data file_name을 가지 Datafile 크기를 변경할 수 있다.
Datafile 크기 변경
ALTER DATABASE
DATAFILE '/export/home/oracle/app/oracle/oradata/orcl/users01.dbf'
RESIZE 10M;
imp ignore옵션을 주고 다시 진행해봤는데 다른 부분(imp 초기에) 또 tablespace 용량이 부족하단 오류가 발생해서 더이상 뜨거워진 머리를 주체하지못하고 그냥 아무것도 건들지 않은 가상환경을 다시 불러와서 다시 하기로 했다…