문서유형ㅣ기술정보
분야ㅣ관리/환경설정
적용제품버전ㅣTibero6, Tibero7
문서번호ㅣTADTI159
개요
TAS 환경에서 DiskSpace(이하 DS)에 공백 파일이 존재하는 경우, 해당 공백 파일을 처리하는 방법에 대해 기술하였습니다.
방법
TAS 공백 파일 생성
Database 관련 파일을 생성할 때 공백 문자가 포함될 수 있습니다.
# $TB_SID.tip DB_CREATE_FILE_DEST='+DATA0/tbdata' # tbsql create tablespace tbs_test datafile '+DATA0/tbdata/ ' size 32g;
공백이 포함된 파일이 생성된 경우 BEGIN / END 백업 수행 시 공백이 포함된 데이터 파일을 백업 받지 못하는 현상이 발생합니다.
tbrmgr을 사용하여 백업을 수행하는 경우에는 별도의 문제는 발생하지 않습니다.
BEGIN → FILE COPY → END 순서로 작업을 수행할 때 FILE COPY가 불가한 현상이 발생할 수 있습니다. 이는 tbascmd 인터프리터에서 작업이 진행되기 때문이며, 리눅스의 이스케이프 처리와는 별개의 이슈입니다.
tbascmd에서는 특정 패치(307138)가 적용되어 있지 않은 경우 공백 문자를 정상적으로 인식하지 못하는 현상이 있습니다.
이로 인해 cptolocal 명령으로 파일을 복제하는 과정에서 공백 문자를 포함한 파일명을 정상적으로 읽지 못하는 문제가 발생할 수 있습니다.
ASCMD> ls <File_name> system/ .passwd <- 공백 파일명 - Number of files found: 3 ASCMD> cp '+DATA0/tbdata/ ' '+DATA0/tbdata/usr002.dtf' ERROR: too many arguments for command 'cp' (rc=-12)
TAS 공백 파일 우회
1. 307138 포함된 바이너리로 패치 적용
현재 바이너리에 307138 패치를 적용하면 공백이 포함된 파일을 정상적으로 처리할 수 있습니다.
만약 바이너리 패치를 적용하지 않고 현재 버전에서 처리하고자 할 경우에는, 아래 절차를 수행하시기 바랍니다.
2. 307138 포함된 바이너리 tbascmd 클라이언트 활용
바이너리 교체 없이 tbascmd만 307138 패치가 적용된 바이너리로 접근하여 처리할 수 있습니다. 307138 패치가 들어간 바이너리의 tbascmd를 통해 현재 바이너리 TAS에 접속합니다.
# 307138 패치 적용 확인 또는 기반영 패치 확인 $ tbboot -version |grep 307138
tbascmd에서 공백이 포함된 데이터 파일을 복사 합니다.
# 307138 패치가 들어간 바이너리 tbascmd로 접속 $ tbascmd tasport [TAS: tibero@db1 ~]$ tbascmd 7629 [15:10]ASCMD +> cd DATA0/tbdata [15:10]ASCMD +DATA0/tbdata> ls system/ .passwd ' ' <- 공백 데이터 파일 usr002.dtf - Number of files found: 4 [15:11]ASCMD +DATA0/tbdata> cp ' ' 'tbs_junsu001.dtf' Copying file: +DATA0/tbdata/ -> +DATA0/tbdata/tbs_junsu001.dtf 10485760 bytes (10.00 MB) copied, 0.137022 s, 76.526105 MB/s [15:11]ASCMD +DATA0/tbdata> ls system/ .passwd ' ' <- 공백 데이터 파일 usr002.dtf tbs_junsu001.dtf <- 복제된 파일 - Number of files found: 5
TAS 공백 데이터 파일 이름 변경
공백 데이터 파일을 읽지 못하는 환경에서 공백 데이터 파일을 307138 패치가 들어간 tbascmd 클라이언트를 통해 변경하는 절차는 다음과 같습니다.
1) 공백 파일 확인
SQL> select '|'||file_name||'|' file_fullpath from dba_datafiles; file_fullpath -------------------------------------------------------------------------------- |+DATA0/tbdata/system/system001.dtf| |+DATA0/tbdata/system/undo001.dtf| |+DATA0/tbdata/system/usr001.dtf| |+DATA0/tbdata/system/tpr_ts.dtf| |+DATA0/tbdata/ |<- 공백 파일 확인 5 rows selected.
2) 양 노드 TAC 정지 (TAS만 UP된 상태)
3) 307138 패치가 들어가 있거나 기 반영된 바이너리의 tbascmd로 TAS 접속
해당 바이너리는 파일 복사에만 사용하고 이후에는 사용되지 않음
[14:23]ASCMD +DATA0/tbdata> ls system/ .passwd ' ' <- 공백 파일명
4) 공백 데이터 파일 복사
해당 바이너리는 파일 복사에만 사용하고 이후에는 사용되지 않음
[14:12]ASCMD +DATA0/tbdata> cp '+DATA0/tbdata/ ' '+DATA0/tbdata/usr002.dtf' Copying file: +DATA0/tbdata/ -> +DATA0/tbdata/usr002.dtf 1073741824 bytes (1.00 GB) copied, 11.001547 s, 97.599167 MB/s
5) 기존 바이너리로 mount 모드로 기동
6) 기존 바이너리로 tbsql에 rename file 수행
SQL> alter database rename file '+DATA0/tbdata/ ' to '+DATA0/tbdata/usr002.dtf'; Database altered.
7) 기존 바이너리로 tbdown 수행
8) 기존 바이너리로 TAC 기동
9) 공백이 제거된 데이터 파일 이름 확인
SQL> select '|'||file_name||'|' file_fullpath from dba_datafiles; file_fullpath -------------------------------------------------------------------------------- |+DATA0/tbdata/system/system001.dtf| |+DATA0/tbdata/system/undo001.dtf| |+DATA0/tbdata/system/usr001.dtf| |+DATA0/tbdata/system/tpr_ts.dtf| |+DATA0/tbdata/usr002.dtf| <- 정상적으로 변경된 파일 5 rows selected.