|
Частичное восстановление БД
|
|||
---|---|---|---|
#18+
Коллеги, Есть несколько больших баз (в общей сложности около 15 Тб) на 2014 сервере. Все большие таблицы там секционированы. Базы периодически нужно восстанавливать в DEV-TEST-средах. Это крайне долго, поэтому хотелось бы существенно сократить время восстановления, заодно сэкономить на месте. У ФГ, которые содержат старые данные, есть возможность проставить признак "только чтение". Можно ли восстановить только свежие ФГ, "забыв" про старые? В тестовом примере ниже архивная ФГ у меня получает статус RECOVERY_PENDING или DEFUNCT, но есть ли возможность от нее вообще избавиться? Желательно без шаманства с перезапуском MS SQL и админского коннекта. ps вариант восстановить и шринкануть не подходит, т.к. шринк будет выполняться неделями, вариант с перекачкой данных тоже нежелателен, т.к. базы очень активно меняются-дорабатываются Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2017, 20:50 |
|
Частичное восстановление БД
|
|||
---|---|---|---|
#18+
Критик Да можно бакапить/восстанавливать на уровне файловых групп. Приймары файловоая группа ваосстанавливается первой, т.е. праймару не может быть частью честичного восстановления. Вот дока: https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/back-up-files-and-filegroups-sql-server ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2017, 21:19 |
|
Частичное восстановление БД
|
|||
---|---|---|---|
#18+
Col, я и хочу восстановить только PRIMARY , а о остальных забыть, а вот забыть не получается ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2017, 22:34 |
|
Частичное восстановление БД
|
|||
---|---|---|---|
#18+
Критик Ну ежели совсем забыть :) В 2016 появилась возможность транкейтить по партишрнам. Ну и кроме того мне непонятно почему после полного восстановления нельзя переместить "ненужные" группы в отдельные таблицы и уже их трнконуть? PTF тут самое то: https://ptf.codeplex.com/ ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2017, 22:52 |
|
Частичное восстановление БД
|
|||
---|---|---|---|
#18+
Col, все это потребует длительного шринка, который не закончится до момента следующего восстановления базы ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2017, 22:59 |
|
Частичное восстановление БД
|
|||
---|---|---|---|
#18+
Критик, Наверное, на все подобные секционированные таблицы можно сделать дубликаты с такой же схемой, переключить все секции кроме PRIMARY, занулить и удалить, потом грохнуть схему секционирования - и удалени FG уже пройдет безболезненно. create table dbo.test_table_double (a int) create clustered index CIX_double on dbo.test_table_double (a) ON myRangePS1 (a); // ARCH], [ARCH], [ARCH], [PRIMARY] ALTER TABLE dbo.test_table SWITCH PARTITION 1 TO dbo.est_table_double ALTER TABLE dbo.test_table SWITCH PARTITION 2 TO dbo.est_table_double ALTER TABLE dbo.test_table SWITCH PARTITION 3 TO dbo.est_table_double truncate table dbo.test_table_double drop table dbo.test_table_double drop index CIX on dbo.test_table create clustered index CIX on dbo.test_table (a) ON PRIMARY // now already only rows in PRIMARY, this rows in this place, nothing move drop PARTITION SCHEME myRangePS1 // NOW in FG is nothing ALTER DATABASE [test_part] REMOVE FILE [test_arch] GO ALTER DATABASE [test_part] REMOVE FILEGROUP [ARCH] GO ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2017, 23:14 |
|
Частичное восстановление БД
|
|||
---|---|---|---|
#18+
Критик, Не уверен, что прокатит переключение секций, которые попадают в FG в состояние RECOVERY_PENDING. Но если недостающие строки как бы улетят в таблицу аналогичной структуры, за исключением PRIMARY, а потом новую таблицу удаляем - то в старой остаются в явном виде только строки из PRIMARY и drop/create кластерного должен пройти нормально. В общем, нужно экспериментировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2017, 23:19 |
|
Частичное восстановление БД
|
|||
---|---|---|---|
#18+
КритикCol, все это потребует длительного шринка, который не закончится до момента следующего восстановления базы Какой шриньк? Слайд в сторону, транкейт, удаление файлов и группы если надо. Все делается за одну секунду. Или у Вас там "коктейль молотова" из разных партишен функций смотрящих на разные группы? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2017, 02:41 |
|
Частичное восстановление БД
|
|||
---|---|---|---|
#18+
Критик, восстановление только первичной группы прямо в новую базу RESTORE database NewDatabase filegroup = 'PRIMARY' FROM disk = 'C:\backup\PRIMARY.bak' with RECOVERY; работает замечательно. База доступна, за исключением файловых групп. А вот как восстановить в новую базу часть групп, но не только первичную (например, Primary + FG1) - никак не пойму. Возможно ли это вообще??? Или вторичная группа не выводится из восстановления или вся база ( Прошу помощи зала в этом вопросе. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2018, 18:45 |
|
Частичное восстановление БД
|
|||
---|---|---|---|
#18+
sdgfyhku, вас ист дас? тоже самое по-русски есть? Пробежал глазами - не нашел чтобы был разобран случай восстановления отдельных группы в новую базу. Рассматривается только восстановление битых файлов в текущей базе. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 16:09 |
|
Частичное восстановление БД
|
|||
---|---|---|---|
#18+
sdgfyhku, фантастика. То что нужно. Все получилось. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2018, 17:58 |
|
Частичное восстановление БД
|
|||
---|---|---|---|
#18+
nvv, Прошу прощения, что поднимаю старую тему. Вам какая из ссылок помогла? По последней, это восстановить 2 группы. Я пытаюсь восстановить, только Primary. И у меня в этом случае name state_desc Secondary RECOVERY_PENDING Я уже всю голову сломал. Нужно разбить пром среду на 2 файла и для разрабов разворачиать только Primary. Разбить получается, путем переноса данных в новую табл. А вот Restore, нет. В принципе, Secondary можно и удалить, таблицы из этой группы я могу и пустыми Create. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2019, 17:46 |
|
Частичное восстановление БД
|
|||
---|---|---|---|
#18+
Трое суток не прошли даром! Просто нужно дать команду, вывести в работу файловую группу... RESTORE DATABASE DB FILEGROUP = 'Secondary' WITH RECOVERY Хоть бы где про это написано... в одном месте только нашел. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2019, 13:26 |
|
Частичное восстановление БД
|
|||
---|---|---|---|
#18+
Kuzen Трое суток не прошли даром! Просто нужно дать команду, вывести в работу файловую группу... RESTORE DATABASE DB FILEGROUP = 'Secondary' WITH RECOVERY Хоть бы где про это написано... в одном месте только нашел. Из всего этого я так и не понял - можно ли будет выполнять запросы на всю таблицу, без ошибок? Ошибка типа: One of the partitions of index 'PK61' for table 'dbo.TblMixed'(partition ID 72057594039107584) resides on a filegroup ("FGReadOnly") that cannot be accessed because it is offline, restoring, or defunct. This may limit the query result. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2020, 10:53 |
|
Частичное восстановление БД
|
|||
---|---|---|---|
#18+
ApXyC, To avoid this error, you need to specifically limit the query to look only in the partitions that are online. This means you need to provide another search argument, and there needs to be an index on the table that lets the query processor match the search argument against one or more partitions. This process is called partition elimination. In this case, I’ll add a date search argument, which matches against the cluster key I chose (and is also the partition key), using the following code: SELECT COUNT (*) FROM SalesDB.dbo.Sales WHERE CustomerID = 1440 AND SalesDate > '2010-01-01'; (С) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2020, 11:49 |
|
|
start [/forum/topic.php?fid=46&fpage=72&tid=1686607]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 322ms |
total: | 454ms |
0 / 0 |