기술 정보
home
채널 소개
home

Windows Tibero 환경에서 백업 스크립트 수행 시 데이터 파일 복사 실패 현상

문서 유형
장애 해결
분야
백업/복구
키워드
backup
script
적용 제품 버전
6FS07
1 more property

현상

Windows 환경에서 Tibero 백업 스크립트를 수행할 때, 데이터 파일 복사 단계에서 실패하는 현상이 발생하였습니다.

원인

백업 스크립트 내에서 사용되는 copy 명령어가 읽기 전용 속성이 설정된 데이터 파일을 정상적으로 복사하지 못하여, 전체 백업 작업이 실패하게 됩니다.

copy와 xcopy의 차이

특징
COPT
XCOPY
읽기 전용 파일 덮어쓰기
실패 (읽기 전용 파일은 덮어쓰기 불가)
/R 옵션으로 덮어쓰기 허용
덮어쓰기 확인 프롬프트
자동으로 확인 요청 (스크립트 자동화 시 중단 요인)
/Y 옵션으로 확인 없이 덮어쓰기
디렉토리 복사
단일 파일 복사만 지원
/S, /E 등 하위 폴더까지 복사 가능

해결

데이터 파일 복사 시 copy 명령어 대신, 읽기 전용 파일도 복사할 수 있도록 xcopy 명령어의 /R 옵션과 /Y 옵션을 함께 사용하여 처리하도록 변경합니다.
기존 Window 백업 스크립트 대비 변경된 스크립트 부분
for /f %%F in (%LIST_DIR%\datafile.list) do ( :: ****수정된 부분**** - 데이터 파일 복사를 `xcopy`로 처리 echo Copying file %%F to backup directory... >> "%LOG%" xcopy "%%F" "%BACKUP_DIR%" /R /Y >> "%LOG%" 2>&1 if errorlevel 1 ( echo ERROR: Failed to copy file %%F >> "%LOG%" ) )
SQL
복사
참고
Window Backup Script 전문
@echo off setlocal :: Shell Environment set "TB_USER=tibero" set "TB_HOME=C:\Tibero\tibero6" set "ARCH_DIR=C:\Tibero\tbarch" set "WORK_DIR=C:\Tibero\full_backup" set "BACKUP_DIR=%WORK_DIR%\%date:~2,2%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%" set "BACKUP_CTL=%BACKUP_DIR%\control.ctl.bak" set "LIST_DIR=%WORK_DIR%\list" set "TMP_DIR=%WORK_DIR%\tmp" set "LOG_DIR=%WORK_DIR%\log" set "LOG=%LOG_DIR%\%computername%_%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log" set "TABLESPACES=%LIST_DIR%\TABLESPACES.LIST" set "FILE_LIST=%LIST_DIR%\FILES.LIST" set "DB_LIST=%LIST_DIR%\DB.LIST" set "TMP_FILE=%TMP_DIR%\tmp_file.tmp" mkdir "%BACKUP_DIR%" mkdir "%LIST_DIR%" mkdir "%TMP_DIR%" mkdir "%LOG_DIR%" copy nul "%LOG%" :: 초기 디렉토리 및 로그 파일 확인 if not exist "%BACKUP_DIR%" ( echo ERROR !! BACKUP_DIR is not set. Check %BACKUP_DIR% >> "%LOG%" exit /b 1 ) if not exist "%LIST_DIR%" ( echo ERROR !! LIST_DIR is not set. Check %LIST_DIR% >> "%LOG%" exit /b 1 ) if not exist "%TMP_DIR%" ( echo ERROR !! TMP_DIR is not set. Check %TMP_DIR% >> "%LOG%" exit /b 1 ) if not exist "%LOG_DIR%" ( echo ERROR !! LOG_DIR is not set. Check %LOG_DIR% >> "%LOG%" exit /b 1 ) if not exist "%LOG%" ( echo ERROR !! LOG is not set. Check %LOG% >> "%LOG%" exit /b 1 ) :: 기존 파일 삭제 for /f %%A in ('dir /b "%LIST_DIR%"') do ( del /q "%LIST_DIR%\%%A" echo %LIST_DIR%\%%A deleted >> "%LOG%" ) || ( echo no files to delete at %LIST_DIR% >> "%LOG%" ) for /f %%B in ('dir /b "%TMP_DIR%"') do ( del /q "%TMP_DIR%\%%B" echo %TMP_DIR%\%%B deleted >> "%LOG%" ) || ( echo no files to delete at %TMP_DIR% >> "%LOG%" ) :: Backup Begin echo "################################################################################" >> "%LOG%" echo "##### Backup Begin" >> "%LOG%" echo "##### Begin Time : %date% %time%" >> "%LOG%" echo "##### Datafile backup Begin " >> "%LOG%" ( echo spool %TMP_DIR%\tbs.tmp echo select tablespace_name from dba_tablespaces; echo spool off echo exit ) | tbsql sys/tibero > nul findstr /v /c:"TABLESPACE" /c:"----" /c:"selected" /c:"SQL" %TMP_DIR%\tbs.tmp | findstr /v "^$" > %TMP_DIR%\tbs_l.tmp for /f %%C in (%TMP_DIR%\tbs_l.tmp) do (echo %%C >> %TMP_DIR%\TABLESPACES.TEMP) findstr /v /c:"TEMP" %TMP_DIR%\TABLESPACES.TEMP >> %TABLESPACES% ( echo spool %TMP_DIR%\datafile.tmp echo select file_name from dba_data_files; echo spool off echo exit ) | tbsql sys/tibero > nul findstr /v /c:"FILE" /c:"----" /c:"selected" /c:"SQL" %TMP_DIR%\datafile.tmp | findstr /v "^$" > %TMP_DIR%\df_l.tmp for /f %%D in (%TMP_DIR%\df_l.tmp) do echo %%D >> %LIST_DIR%\datafile.list :: 데이터 파일 백업 for /f %%E in (%TABLESPACES%) do ( ( echo alter tablespace %%E begin backup wait; echo exit ) | tbsql sys/tibero > nul 2>&1 ) for /f %%F in (%LIST_DIR%\datafile.list) do ( :: ****수정된 부분**** echo Copying file %%F to backup directory... >> "%LOG%" xcopy "%%F" "%BACKUP_DIR%" /Q /R /Y >> "%LOG%" 2>&1 if errorlevel 1 ( echo ERROR: Failed to copy file %%F >> "%LOG%" ) ) for /f %%G in (%TABLESPACES%) do ( ( echo alter tablespace %%G end backup wait; echo exit ) | tbsql sys/tibero > nul ) echo "##### Datafile backup End" >> "%LOG%" :: Archive 및 Controlfile 백업 echo "##### Archive and Controlfile backup Begin" >> "%LOG%" ( echo alter system switch logfile; echo alter database backup controlfile to trace as '%BACKUP_CTL%' reuse noresetlogs; echo exit ) | tbsql sys/tibero > nul xcopy /e /i /q "%ARCH_DIR%" "%BACKUP_DIR%" >> "%LOG%" 2>&1 if errorlevel 1 ( echo ERROR: Failed to copy archive logs from %ARCH_DIR% >> "%LOG%" ) echo "##### Archive and Controlfile backup End" >> "%LOG%" echo "##### ALL Backup Complete!!!!" >> "%LOG%" echo "##### End Time : %date% %time%" >> "%LOG%" echo "################################################################################" >> "%LOG%" echo " " >> "%LOG%" endlocal
SQL
복사