aureolin - Wednesday, February 14, 2018 10:04 AM
You definitely have the right tool to do this, then. You could do a Partitioned Table with one filegroup per month and one file per filegroup. As a month becomes "static" (no more changes/updates/additions), you can do a trick to squash all unused space out of the filegroup/file and set it (the filegroup/partition) to READ_ONLY and then back it up. What that will do for you is keep from ever having to back it up again. You only need to backup the current month and the next month (which is always empty until it becomes the current month and you build a new "next month" partition).
This also allows for online "Piece-Meal" restores (if a filegroup or file ever goes bad) and a very quick "get back in business" restore of the current data and then you can restore the outlying months is a less hectic manner.
I will say, though, that if I had it to do over, I'd use a Partitioned View, instead. It allows you to restore any "partition" at any time and also allows you to not restore them all if you're restoring to a Development box (for example). The other advantage of Partitioned Views (especially if you use one database per month {and that's not so bad as most would make it out to be}) is that the table in each of those databases can be made to have different indexes to optimize the "selectability" as compared to the current month which also needs optimization for inserts and updates.
I do have to agree with the others, though. Storing large binaries in a database is pretty tough on memory, etc. You might want to reconsider and use something like "file stream" or other available on disk/off database method. Of course, the advantage to having them in the database is that no one protects data better than a good DBA.
--Jeff Moden
Change is inevitable... Change for the better is not.