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 이라고 되어 있는 부분 수정한다.
나의 경우는 이건 내가 원하는 이름으로 되어있었다. shit
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를 모두 변경해야 정상 반영되는 거였고,
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 용량이 부족하단 오류가 발생해서 더 이상 뜨거워진 머리를 주체하지 못하고 그냥 아무것도 건들지 않은 가상환경을 다시 불러와서 다시 하기로 했다…