On Mar 22, 2011, at 1:29 AM, TSM wrote: > Hello, > > We use tdp for oracle with no catalog database. > We set the oracle parameter control_file_record_keep_time too low. > So the "delete obsolete" removed nothing, because oracle removed the > entries earlier from the controlfiles. > > Now we have to delete a lot of oracle backups at the tsm server, which > oracle doesn't know. > Any ideas how to delete the old backups?
I have a Plan B for this which doesn't rely on having access to the client, but it's not for the faint of heart, and it works better with TSM V5 than with V6. Do you collocate your client data by node or, even better, by file system? If so, this might work for you. The basic premise is that if you can find tapes (volumes) that are full of database backups you no longer want, you can run DELETE VOLUME (DISCARDDATA on them. The trick comes in determining if a volume has only Oracle backups that are old enough that you don't want them any more. Q NODEDATA will tell you which volumes you want want to examine. The CONTENTS table will tell you who owns the objects on a volume, which file system (DB instance, if it's a DB) that it came out of, if it's an archive or a backup (Oracle doesn't use archives, but DB2 does), and even the size of the object and which segment of the object it is. It also has an object ID, which you need to read the BACKUPS table to get the backup date, if it's active or inactive, and one or two other details, but backup date and active/inactive are the ones I care about. BACKUPS is a beast to work with, but in TSM V5, it has enough indices on it that you can pull only the backup objects for a particular file system on a particular node and store the backup dates and active/inactive states. I use a perl hash (%name/$name{object_id}) has that keys on the object ID, but I'm sure there are other techniques as well. (TSM 6.1 and 6.2 don't have indices on BACKUPS, making this technique impractical.) If a volume only has active objects from the file system you expect (a constant for Oracle) from the node you expect that aren't archives, you might want to discard this whole volume. If you have DB backups that span volumes, you might delete more than one volume with that command -- which, in this case, is what you want. The smaller your volumes, the more likely a volume will have only your DB backups on it. (100 GB volumes? Possible, but not certain. 12 GB volumes? Much more likely. And so forth.) You might have rules in your shop saying to never use DELETE VOLUME (DISCARDDATA. That's why this technique isn't for the faint of heart. And, as I said, for TSM V6 systems, at this time, you don't have the indices you want to make working with BACKUPS table feasible. But, depending on how much old Oracle data you have, and how cooperative your Oracles DBAs are, this might be a good technique. If you have DB2 clients, you can avoid using the BACKUPS table and capitalize on the fact that DB2 object names imbed a timestamp in their object names. But you didn't ask about DB2, so that's just a digression. Finally, yes, I'll share my perl script for this if you send me e-mail off-list. (I can't emphasize the "off-list" part enough.) But, of course, it would be strictly without warranty, merely as an example of how this might be done if you were desperate enough to want to try. > Thanks in advance > Andreas. BT, DT, Nick