The actual BMC backup / recovery concept is documented in Backup and restore of the BladeLogic environment - BMC Server Automation 8.6 - BMC Documentation .
The document lists the database and directories on BSA app- and fileserver to be backuped. Unfortunately the problem of inconsistencies between database content and filesystem objects is not mentioned.
To create a consistent backup a syncronous backup of the database and the filesystem would be needed, with files in the filesystem not changing during the backup intervall. In real life, this is possible with a offline application only and lags behind modern databases point in time recovery mechanisms.
As long as no other backup feature is provided by BMC, a real life recovery has to deal with inconsistencies. Delete - checkFileServerIntegrity - BMC Server Automation Command Line Interface 8.6 - BMC Documentation may help to manifest inconsistencies. But its output is restricted to 100 lines and the files listed are not correlated to their BSA objects. Thus the benefit of this tool is limited.
During a BSA recovery, I came across the SQL statement below, which correlates BSA objects to filesystem objects. Thus it should help you to identify inconsistent objects and their effect on BSA objects. It should allow you to clear inconsistencies (which cannot be avoided up to now in a recovery szenario). In my case, after clearance, I was able to do a version independent export of the desired BSA object from the recovered BAS system and import it into another BSA system.
Finally ... my question.
Am I missing something ? Is there a better way to deal with inconsistencies during BSA recovery ?
Hi BMC, are you thinking about other ways to organise your data ? If you really need data on a filesystem ... What about oracle database file system or any similar product ?
SQL statement for oracle databases ....
WITH temp1 (group_id, path) AS
select group_id, cast(name as varchar(1000))
from blgroup bg1
where parent_group_id = 0
cast(bg2.path || '/' || cast(bg1.name as varchar(100)) as varchar(1000))
from blgroup bg1
inner join temp1 bg2 on bg1.parent_group_id = bg2.group_id
select temp1.path,do.name,o.name,'//'||fs.host||fs.root_path||'/'||fl.relative_path from file_location fl
join file_server fs on fl.file_server_id = fs.file_server_id
join depot_object_location dol on fl.file_location_id = dol.file_location_id
join depot_object do on dol.depot_object_id = do.depot_object_id and dol.depot_object_version_id = do.depot_object_version_id
join temp1 on do.group_id = temp1.group_id
join object_type o on do.object_type_id = o.object_type_id
where do.is_saved_explicitly = 1 and do.is_deleted = 0;