DBMS/SQL Server (MS-SQL)

[SQL Server / MS-SQL] MI database properties error (subquery returned more than 1 value.)

RYEAN 2023. 2. 28. 11:25
반응형

 

 

사용자가 진행한 백업과 자동 백업한 백업 정보가 msdb..backupset 테이블에 저장이 되는데

동일한 db_id(database_name) 에 대한 여러 database_name 이 존재하여 발생하는 오류이다.

 

 

문제가 되는 백업 정보를 조회해보자.

-- backupset 정보 조회
SELECT DB_ID(database_name) AS dbid,
	   database_name,
	   backup_start_date
FROM msdb.dbo.backupset
WHERE type = 'D'
ORDER BY DB_ID(database_name), database_name, backup_start_date

 

아래와 같이 동일한 dbid 에 database_name 이 여러개 저장되어 있는 것을 볼 수 있다.

dbid 9 인 경우를 보자.

 

사용자가 진행한 백업의 database_name 은 OPEN_DB (실제 DB명) 으로 저장이 되고,

자동 백업의 database_name 은 02a4a03b-b502-4e... 와 같은 코드로 저장이 되어 문제가 된다.

 

 

이를 해결하기 위해 해당 DB 의 백업 내역을 삭제하여 백업 내역을 지워야한다.

-- //지정된 날짜보다 오래된 백업 세트를 삭제
EXEC msdb..sp_delete_backuphistory @oldest_date = 'yyyy-mm-dd'

-- // 해당 데이터베이스에 대한 모든 백업 및 복원 기록을 삭제
EXEC msdb..sp_delete_database_backuphistory @database_name = N'DB명'

 

방법은 두가지가 있다.

첫번째로,

EXEC msdb..sp_delete_backuphistory @oldset_date 를 통해 지정된 날짜보다 오래된 백업 세트를 삭제할 수 있다.

 

두번째로,

EXEC msdb..sp_delete_database_backuphistory @database_name 을 통해 DB 명을 지정하여 해당 DB 의 백업 세트를 모두 삭제할 수 있다.

 

모든 기록이 삭제되더라도 물리적 백업 파일은 보존되며,

백업 및 복원 시 해당 테이블에 백업 정보가 저장되므로 주기적으로 삭제를 진행해주는 것이 좋다.

 

 

 

 

반응형