update hr.employees
set salary = salary * 1.1
where employee_id = 100;
select b.lock_element_addr, b.status, e.mode_held, e.local
from v$bh b, v$gc_element e
where b.lock_element_addr = e.gc_element_addr
and b.file# = 5
and b.block# = 207;
select sid, serial#,event, blocking_instance,blocking_session
from v$session
where event like '%TX%';
select inst_id,sid, serial#,event, blocking_instance,blocking_session
from gv$session
where event like '%TX%';
select instance_name, status from gv$instance;

update hr.employees
set salary = salary * 1.1
where employee_id = 100;

select inst_id,sid, serial#,event, blocking_instance,blocking_session
from gv$session
where event like '%TX%';

select inst_id,sid, serial#,event, blocking_instance,blocking_session
from gv$session
where sid in (select blocking_session from gv$session);

alter system kill session 'sid값,serial#값,@instance_id' immediate;alter system kill session '24,33,@1' immediate'

Application level : Cache buffer
File System level : File system, raw device
Volume level : Logical Volume Manager(LVM),
ASM(Automatic Storage Management)
storage : Disk
이전에는
physical volume -> Logical Volume(LVM)
현재는
physical volume -> Disk Group(ASM)
RBAL : 리밸런싱 작업을 조정하고 ARBn에게 지시ARBn : 리밸런싱 데이터를 extent 이동 수행한다.. oraenv
+ASM1 instance로 접속

vi $GRID_HOME/sqlplus/admin/glogin.sql
set sqlprompt "_user'@'_connect_identifier>"
sqlplus 접속할때 sys role로 접속하는게 아니라 sysasm role로 접속해야한다.
sqlplus / as sysasm


. oraenv
+ASM2 instance로 접속

vi $GRID_HOME/sqlplus/admin/glogin.sql
set sqlprompt "_user'@'_connect_identifier>"
sqlplus 접속할때 sys role로 접속하는게 아니라 sysasm role로 접속해야한다.
sqlplus / as sysasm


- 현재 설정된 asm 그룹 정보 조회
select group_number, name, type, state from v$asm_diskgroup;

- disk 정보 확인
select b.name group_name, a.group_number, a.disk_number, a.name file_name, a.mount_status, a.path, a.total_mb, a.free_mb
from v$asm_disk a, v$asm_diskgroup b
where a.group_number = b.group_number;

- 디스크 그룹에 포함된 asm file 정보
select group_number, file_number, bytes/1024/1024 mb, redundancy, type
from v$asm_file;

show parameter spfile

show sga

select * from v$sgainfo;

- disk 정보 확인
select b.name group_name, a.group_number, a.disk_number, a.name file_name, a.mount_status, a.path, a.total_mb, a.free_mb
from v$asm_disk a, v$asm_diskgroup b
where a.group_number = b.group_number;

- DATA 디스크 그룹의 디스크 삭제
rebalance power 10alter diskgroup data drop disk data_0003 rebalance power 10;
- 삭제된거 확인
select b.name group_name, a.group_number, a.disk_number, a.name file_name, a.mount_status, a.path, a.total_mb, a.free_mb
from v$asm_disk a, v$asm_diskgroup b
where a.group_number = b.group_number;

- 사용할 수 있는 디스크 확인(삭제되었으면 사용할 수 있음)
select path from v$asm_disk where mount_status = 'CLOSED';
- FRA 디스크 그룹에 디스크 추가
alter diskgroup fra add disk '/dev/oracleasm/disks/ASMDISK04' rebalance power 10;
- 추가한 디스크 확인
select b.name group_name, a.group_number, a.disk_number, a.name file_name, a.mount_status, a.path, a.total_mb, a.free_mb
from v$asm_disk a, v$asm_diskgroup b
where a.group_number = b.group_number;

- 잘못 추가한 디스크 삭제
alter diskgroup fra drop disk fra_0002 rebalance power 10;- 현재 사용가능한 디스크 확인
select path from v$asm_disk where mount_status = 'CLOSED';

- mirroring 하지 않고 디스크 그룹 생성
create diskgroup asm_dg external redundancy disk '/dev/oracleasm/disks/ASMDISK04';
- 전체 디스크 그룹 확인
select group_number, name, type, state from v$asm_diskgroup;

- asm instance 종료 후 oracle instance로 접속

- 초기파라미터 위치 확인
$ORACLE_HOME/dbs 아래 있어야 하지만, 조회해보면 disk 그룹 안으로 되어있다$ORACLE_HOME/dbs 아래에는 init파일만 있는데 spfile이라는 파라미터를 설정해서 init파일을 바라봐도 disk 그룹에 있는 spfile을 바라볼 수 있다.
cat $ORACLE_HOME/dbs/initracdb1.ora

create pfile = '$ORACLE_HOME/dbs/initcopy.ora' from spfile;

cat /u01/app/oracle/product/11.2.0/dbhome_1/dbs/initcopy.ora
instance 이름.파라미터 로 하면 된다.
- 파일위치를 확인해보면 DATA 디스크 그룹안에 저장되어 있다.
select tablespace_name, file_name, bytes/1024/1024 mb
from dba_data_files;

- 컨트롤 파일은 이중화 되어 있고 DATA 디스크 그룹 안에서는 삼중화 되어있다.
select name from v$controlfile;

- 다른 instance의 log 그룹도 확인해야 하면 gv$log를 사용한다.
select * from gv$log;

- 멤버가 2개씩 설정되어있는데 나머지 멤버의 저장 위치 확인
select * from gv$logfile;

- asm disk구성을 DB instance에서도 확인 가능하다.
select b.name group_name, a.group_number, a.disk_number, a.name file_name, a.mount_status, a.path, a.total_mb, a.free_mb
from v$asm_disk a, v$asm_diskgroup b
where a.group_number = b.group_number;

- tablespace 생성
create tablespace asm_tbs
datafile '+ASM_DG' size 10m;
- 생성한 tablespace 확인
select tablespace_name, file_name, bytes/1024/1024 mb
from dba_data_files;

- 데이터파일을 추가할때 명시적으로 표현하지 않으면 OMF방식으로 만들어 지기 때문에 DATA 디스크 그룹에 추가되었다.
alter tablespace asm_tbs add datafile;
select tablespace_name, file_name, bytes/1024/1024 mb
from dba_data_files;

- DATA 디스크 그룹에 OMF방식으로 기본 만들어진다.
show parameter db_create_file_dest

- 데이터파일 삭제
alter tablespace asm_tbs drop datafile '+DATA/racdb/datafile/asm_tbs.269.1184165979';
- OMF 디스크 그룹 변경
alter system set db_create_file_dest = '+ASM_DG';

- OMF방식으로 tablespace 생성
create tablespace insa_tbs;
select tablespace_name, file_name, bytes/1024/1024 mb, autoextensible
from dba_data_files;

- 데이터파일 추가
alter tablespace insa_tbs add datafile;
select tablespace_name, file_name, bytes/1024/1024 mb, autoextensible
from dba_data_files;

- autoextensible이 no를 yes로 변경
alter database datafile '+ASM_DG/racdb/datafile/asm_tbs.256.1184165877' autoextend on;
select tablespace_name, file_name, bytes/1024/1024 mb, autoextensible
from dba_data_files;

- 데이터파일 이름을 직접 설정해서 tablespace 생성
create tablespace temp_tbs datafile '+ASM_DG/racdb/datafile/temp_tbs01.dbf' size 5m;
select tablespace_name, file_name, bytes/1024/1024 mb, autoextensible
from dba_data_files;

- tablespace 삭제
drop tablespace temp_tbs including contents and datafiles;
drop tablespace insa_tbs including contents and datafiles;
create table hr.emp_asm
tablespace asm_tbs
as
select *
from hr.employees;
select tablespace_name, extents, bytes, blocks
from dba_segments
where owner = 'HR'
and segment_name = 'EMP_ASM';

select tablespace_name, status from dba_tablespaces;

alter tablespace asm_tbs offline normal;
rman에 접속해야한다
rman target /

현재 데이터파일 확인
report schema

disk 그룹에 있는 데이터파일은 물리적으로 이동할 수 없기 때문에 rman을 이용해서 이미지 copy 시킨다
copy datafile '+ASM_DG/racdb/datafile/asm_tbs.256.1184165877' to '+DATA/racdb/datafile/asm_tbs01.dbf'

list copy
rman 종료 후 oracle 접속
sqlplus / as sysdba
copy 이미지로 rename
alter tablespace asm_tbs rename datafile '+ASM_DG/racdb/datafile/asm_tbs.256.1184165877' to '+DATA/racdb/datafile/asm_tbs01.dbf';
select tablespace_name, file_name, bytes/1024/1024 mb, autoextensible
from dba_data_files;

alter tablespace asm_tbs online;
select tablespace_name, status from dba_tablespaces;

select tablespace_name, status from dba_tablespaces;

alter tablespace asm_tbs offline normal;
select tablespace_name, status from dba_tablespaces;

3.rman에 접속해야한다
rman target /

현재 데이터파일 확인
report schema

disk 그룹에 있는 데이터파일은 물리적으로 이동할 수 없기 때문에 rman을 이용해서 이미지 copy 시킨다
copy datafile '+DATA/racdb/datafile/asm_tbs01.dbf' to '+ASM_DG';

copy 확인
list copy

rman 종료 후 oracle 접속
sqlplus / as sysdba
copy 이미지로 rename
alter tablespace asm_tbs rename datafile '+DATA/racdb/datafile/asm_tbs01.dbf' to '+ASM_DG/racdb/datafile/asm_tbs.256.1184168445';
select tablespace_name, file_name, bytes/1024/1024 mb, autoextensible
from dba_data_files;

alter tablespace asm_tbs online;
select tablespace_name, status from dba_tablespaces;

select f.file_name
from dba_extents e, dba_data_files f
where f.file_id = e.file_id
and e.segment_name = 'EMP_ASM'
and e.owner = 'HR'

+ASM2 instance로 접속
- rac1의 asm에서는 정상 mounted 되어있는데 데이터이관 작업을 하다보면 다른 node에서는 dismounted 되는 현상이 발생된다.
select group_number, name,type,state from v$asm_diskgroup;

- rac2로 접속하는 유저들은 ASM_DG의 디스크 그룹의 데이터에는 접근할 수 없다.
- DISMOUNTED 상태를 MOUNTED로 변경해줘야 한다.
alter diskgroup asm_dg mount;
select group_number, name,type,state from v$asm_diskgroup;

redo log 파일은 각 node가 따로따로 사용하기 때문에 current한 redo log가 2개 이다.

archived log 확인
select thread#, sequence#, name, first_change#, next_change#
from v$archived_log
order by 1,2;

show parameter db_recovery_file_dest
rman 접속
show all;

control file도 자동백업 받게 설정
CONFIGURE CONTROLFILE AUTOBACKUP ON;

백업 받기
backup as compressed backupset database;

백업 리스트 확인
list backup

rman 에서 나간 후 ASM1 인스턴스로 접속

프롬프트 띄운 후 디스크 그룹 확인
asmcmd
ls

ASM프롬프트에서 디렉터리 이동

이미지 copy 받아놓은 백업파일 확인
find / asm_tbs*

삭제
ASMCMD> rm -f +DATA/RACDB/DATAFILE/asm_tbs01.dbf
ASMCMD> rm -f +DATA/RACDB/DATAFILE/ASM_TBS.269.1184167651
ASMCMD-08002: entry 'ASM_TBS.269.1184167651' does not exist in directory '+DATA/RACDB/DATAFILE/'
ASMCMD> rm -f +ASM_DG/RACDB/DATAFILE/ASM_TBS.256.1184168445
ORA-15032: not all alterations performed
ORA-15028: ASM file '+ASM_DG/RACDB/DATAFILE/ASM_TBS.256.1184168445' not dropped; currently being accessed (DBD ERROR: OCIStmtExecute)
alter tablespace asm_tbs offline;
select tablespace_name, status from dba_tablespaces;

ASMCMD> rm -f +ASM_DG/RACDB/DATAFILE/ASM_TBS.256.1184168445
alter tablespace asm_tbs online;

rman으로 접속

rman에서는 list failure을 지원하지 않는다.
list failure

백업 받아놓은 리스트 확인
list backup;

백업 파일을 가지고 restore과 recover 진행
restore datafile 7;
recover datafile 7;

alter tablespace asm_tbs online;
select tablespace_name, status from dba_tablespaces;

select count(*) from hr.emp_asm;

asmcmd에서 특정 디스크에서 디렉터리 찾기
find +data asm*

asmcmd에서 모든 디스크그룹에서 디렉터리 찾기
find / asm_tbs*

rac1 ,rac2 shutdown abort로 서버 강제 종료
asmcmd에서 시스템파일 삭제
rm -f +data/RACDB/DATAFILE/SYSTEM.256.1183745163
rac1 node에서 다시 startup 해보지만 오류 발생

오류 확인
select * from v$recover_file;

rman으로 restore & recover
restore datafile 1;
recover datafile 1;
alter database open;
select instance_name, status from v$instance;
