Update: read about it here.
As I have blathered on about before in painful and agonizing detail, it is possible to delete a SharePoint object that is too large for the recycle bin to digest. In my case, the object is a single document library containing 140,000 items that run to about 78 gigabytes. Unlike the Windows recycle bin, the SharePoint recycle bin will accept this JabbaTheHutt-like monstrosity without complaint, but when it comes time to purge it (after 30 days is the default), the Recycle Bin Timer job runs about two hours before throwing an exception into the Event Viewer. During this time, nobody can access SharePoint, including my backup job, which runs for hours and hours at least partly because it is trying to back up an additional 78 gigabytes of useless data. The uber-object no longer appears in the recycle bin (update: it is there but you have to click "Deleted from end user recycle bin" to see it), but trust me, the data is still there in your content database. You can do a select statement against dbo.AllDocs, looking for entries that have a Delete Transaction ID and you'll find all 140,000 documents.
As you might imagine, this has generated a bit of frustration that can only be relieved by intense and random road rage.
I finally broke down and opened a support ticket with Microsoft. This time I snagged a good one, who knows both SharePoint and SqlServer. On my development system (which also has the problem), he went into Central Administration > Application Management > Content Databases, selected the right web app, and clicked the Content Database. After checking "Remove Content Database" and OK, the content database is no longer attached to the SharePoint web app. He then clicked Add A Content Database and re-attached the same database. Amazingly, the select statement no longer finds the offending documents. When I shrank the database, it became … well, not slim and trim … but much smaller.
I absolutely refuse to perform this action on my production database unless I return from my vacation, which starts tomorrow. Did I say "unless"? I meant "until". I think.
Update: Although this worked on my development system, it did not work on my production system. Microsoft was unable to tell me why.
If you try this, be aware of the following:
1. Make sure you have a good backup. Do I even need to say this? Uh, yes, I do.
2. Not only does this procedure empty the offending item from the second stage recycle bin, it also empties everything else. I don't know why.
3. Don't shrink the database while it's attached to SharePoint. You will get rude and angry error messages. Repeat the "remove" procedure before shrinking. And re-attach it when you're done.
4. In my case, the shrink took 3 or 4 hours. When it finished, there was no indication, except that the shrink window disappeared. Apparently, this is normal.
5. Be careful when you detach. Make sure you have selected the correct Web Application.
6. Be careful when you re-attach. The default Content Database they show you is NOT the one you want to attach.
7. Don't blame me if this doesn't work for you. I'm not yet certain it will work for me. And I won't find out unless I get back. Did I say "unless"?