Пісочниця SQL Server


9

Я намагаюся створити пісочницю для наших розробників звітів для роботи. Мій поточний план - "скидати" базу даних кожного вечора, але я не знаю, як це зробити. Що я маю на увазі під скиданням, це те, що я хочу по суті відкинути будь-які таблиці користувачів, представлення даних, збережені процедури тощо з усіх, крім однієї бази даних на сервері. Я припускаю, що ще одним варіантом буде скинути та відтворити базу даних, але я майже впевнений, що це означатиме можливість повернення доступу до всіх відповідних груп AD / людей.

Я дійсно не знаю, що було б найкращим способом зробити це, тому я сподіваюся, що деякі з вас зможуть надати кілька хороших ідей / пропозицій. Дякую.

Для наочності ми по суті хочемо це зробити з нашою базою даних: http://try.discourse.org/t/this-site-is-a-sandbox-it-is-reset-every-day/57 . Різниця полягає лише в тому, що ми не хочемо відтворювати своїх користувачів щодня.

Версія: SQL Server 2008
Edition: Developer & Enterprise

Відповіді:


8

Іншою ідеєю було б просто встановити нічну роботу, яка робить резервну копію copy_only і відновлює її на сервері розробників (або на тому ж сервері, якщо у вас є лише один, але це може бути не чудовою ідеєю). Приємно в цьому те, що відновлення може перейти на будь-який сервер (або декілька серверів) і може бути повністю відірвано від будь-якої діяльності на основній базі даних.

На сервері 1:

BACKUP DATABASE db TO DISK = '\\someshare\file.bak' 
  WITH COPY_ONLY, INIT, COMPRESSION;

На сервері 2:

RESTORE DATABASE db_dev FROM DISK = '\\someshare\file.bak'
  WITH REPLACE, RECOVERY;

Можливо, вам доведеться також додати MOVEкоманди, якщо розташування диска між серверами відрізняється (або якщо ви ставите копію на один і той же сервер).

RESTORE DATABASE db_dev FROM DISK = '\\someshare\file.bak'
  WITH REPLACE, RECOVERY,
  MOVE 'data_file_name' TO 'D:\somepath\somefile.mdf',
  MOVE 'log_file_name'  TO 'E:\somepath\somefile.ldf';

Якщо ви відновляєтесь на одному сервері, у вас не повинно виникнути жодних проблем із користувачами. Якщо ви відновите на іншому сервері, ваші користувачі існуватимуть, але вхід на рівні сервера може не робити. Існують сценарії, щоб виправити це , і нова функція в SQL Server 2012 ( Conposed Baz Data ), яка повністю усуває проблему.


У нас є dev / prod, але dev - єдиний сервер, на якому це відбувається. Prod призначений лише для готових процесів.
Kittoes0124

Це рішення, яке я обрав би, просто врахуйте, що в більшості випадків ви не хочете просто копіювати виробництво в середовище розробників. Будь ласка, встановіть міру (скрипт?), Яка, наприклад, видалить або затьмарить електронну адресу користувачів, контактні дані тощо. Ви не хочете, щоб ваші розробники випадково почали надсилати електронні листи користувачам.
zeroDivisible

5

Оскільки у вас є екземпляр з двигуном Enterprise Edition, я б використовував знімки бази даних .

Це дозволить швидко та легко повернути будь-які зміни, внесені протягом дня, не потребуючи відновлення всієї бази даних.

Зауважте, що якщо розробники планують робити великі навантаження даних (це здається, що їх немає?), То це може виявитися недоцільним.


Чому б не було доречно, якщо вони великі навантаження даних? Наші можуть завантажувати скажімо .... 8 мільйонів рядків із 100 стовпців раз у раз (навіть якщо вони "не повинні бути"), але ми не обов'язково хочемо заважати їм робити це. Все, що нас насправді хвилює, це те, що в кінці дня все стає нудистим.
Kittoes0124

2
@Kittoes, оскільки знімок потрібно підтримувати, коли змінюються вихідні дані. Якщо джерело змінюється, потрібно витягнути існуючі сторінки, щоб підтримувати перегляд "до". Це не робиться до тих пір, поки вихідні дані не зміняться (на знімку використовується розріджений файл, порожній за винятком дельт). Таке обслуговування може стати досить дорогим. Подивіться, як працюють знімки бази даних .
Аарон Бертран

@AaronBertrand Добре, якщо база даних зростає до 8 ГБ протягом дня, тоді, коли знімок буде відновлено, всі нові дані будуть видалені, але база даних все-таки має розмір 8 ГБ? Або я нерозумію?
Kittoes0124

@Kittoes знімок є лише для читання, тому ви зможете завантажувати нові дані лише у вихідну базу даних. Якщо додати 8 Гб протягом дня, знімок не буде видно. Коли ви повернете / відкиньте знімок, у вихідній базі даних все ще буде розміщено 8 ГБ даних і відповідно розмір. Якщо потім зробити інший знімок, нові дані будуть видимі. Якщо ви виймете 8 Гб протягом дня, він буде доданий до знімка.
Аарон Бертран

1
@Kittoes, якщо ви хочете скасувати завантаження даних 8 ГБ, повернувшись до моменту, коли зроблено знімок, так, він повинен повернути ваші файли даних у той розмір, який вони були (чи дійсно ви хочете, щоб файли знову були маленькими, щоб Ви можете просто автоматично зростати більше, коли завтра знову завантажите 8 ГБ - це інша проблема) Але я не перевіряв сценарій прямо. І як згадується стаття, яку я пов’язував із цим, це не обов'язково є надійним, оскільки воно також залежить від надійності базового сховища. Резервне копіювання - безпечніший спосіб зробити це.
Аарон Бертран

0

Дозвольте додати свої кілька центів, щоб побачити, чи допоможе вам:

У моїй компанії у нас така ж ситуація, що щовечора розробники хочуть оновлювати бази даних, якими вони користуються протягом дня. Це означає , що у нас є безліч баз даних, Дев не чіпати - дозволяє скажімо А і інший набір баз даних , які є точною копією А , але вони роблять свої речі , але хочуть отримати оновлюється щоночі - дозволяє сказати , що B . Це відбувається на 1 одному екземплярі сервера.

Що я реалізував - це НОЧНО ВІДКРИТИЙ ПРОЦЕС для досягнення цього. Нижче описано, як це працює:

Створіть таблицю драйверів зі списком баз даних, які потрібно відновлювати кожного вечора (як ви вже згадували).

Таблиця: nightly_restore (OriginalDB, RestoreDB, резервне розміщення, увімкнено_YN, результати, PASS_FAIL)

Тоді ви можете написати деякий TSQL, який буде перебирати список баз даних з наведеної вище таблиці, а потім виконувати відновлення та записувати будь-який успіх чи невдачу в Результатах і трохи 1 = Pass або 0 = Fail. Enabled_YN визначить, чи потрібно цю базу даних відновити чи ні.

Якщо в майбутньому буде додано більше баз даних, вам доведеться просто вставити їх у таблицю та встановити біт enable_YN на Y (увімкнено).

Таким чином процес буде більш гнучким та керованим.

Якщо ви хочете, щоб я написав SQL (я впевнений, ви зможете його написати :-)), просто напишіть мені або додайте коментар, і я поділюсь ним.

HTH

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.