- •Аннотация
- •Содержание
- •Введение
- •1. Формулировка задания
- •1.1. Задание
- •1.2. Структура идз
- •Описание предметной области
- •Проектирование базы данных
- •Создание бАзы данных
- •Создание таблиц и ограничений целостности
- •Заполнение таблиц данными
- •Заполнение таблицы «Staff» (Сотрудники)
- •Заполнение таблицы «Tables» (Столы):
- •Заполнение таблицы «Categories» (Категории)
- •Заполнение таблицы «MenuItems» (Меню)
- •Заполнение таблицы «Orders» (Заказы)
- •Заполнение таблицы «OrderItems» (Позиции заказа)
- •Заполнение таблицы «Payments» (Платежи)
- •Разработка объектов промежуточного слоя
- •Хранимые процедуры
- •Процедура «CreateOrder» для создания нового заказа
- •Процедура «AddItemToOrder» для добавления позиций в заказ
- •Процедура «SetOrderWaitingForPayment» для перевода заказа в статус ожидания оплаты
- •Процедура «PayOrder» для оплаты заказа
- •Представления
- •Представление «ActiveOrders» для просмотра активных заказов
- •Представление «WaiterDailyRevenue», показывающее выручку, принесённую каждым из официантов
- •Представление «DailyOrderStats», показывающее по дням заработок ресторана, оплаченные заказы, средний чек
- •Представление «OrdersByWaiterStatus», показывающее количество заказов, обслуженных каждым из официантов по статусам заказа
- •Функции
- •Скалярная функция «OrderTotal» для подсчета стоимости заказа
- •Табличная функция «GetOrdersWithTotal», которая возвращает блюда по заказам
- •Табличная функция «GetMenuItemsByAvailability», показывающая оставшиеся блюда
- •Табличная функция «GetLastOrderItems» возвращающая последние блюда в заказах
- •Скалярная функция «MenuItemSalesPaid» для подсчета проданных позиций блюд в день
- •Разработка триггеров
- •Триггер «InsertWaiterTable» для вставки в таблицу WaiterTables, когда происходит заказ
- •Триггер «CheckStock», уменьшающий количество блюд в MenuItems и предупреждающий, если блюда закончились
- •Триггер «PreventWaitingPaymentWithoutItems», проверяющий пустой заказ
- •Разработка стратегии резервного копирования и восстановления
- •Процедура полного резервного копирования
- •Процедура дифференциального резервного копирования
- •Процедура резервного копирования журнала транзакций
- •Процедура тестирования всех бэкапов
- •Автоматизация через sql server agent
- •Процедура восстановления
- •Заключение
- •Список использованных источников
Автоматизация через sql server agent
Задание для полного бэкапа, которое будет выполняться один раз в сутки:
USE msdb;
GO
PRINT 'Создание заданий автоматического резервного копирования...';
PRINT '';
BEGIN TRY
EXEC dbo.sp_add_job
@job_name = N'Restaurant_System_FULL_0200',
@description = N'Системный полный бэкап Restaurant (из master)',
@category_name = N'Database Maintenance';
EXEC sp_add_jobstep
@job_name = N'Restaurant_System_FULL_0200',
@step_name = N'Выполнить полный бэкап',
@command = N'EXEC master.dbo.sp_Restaurant_BackupFull;',
@database_name = N'master';
EXEC sp_add_schedule
@schedule_name = N'Schedule_FULL_0200_System',
@freq_type = 4,
@freq_interval = 1,
@active_start_time = 20000;
EXEC sp_attach_schedule
@job_name = N'Restaurant_System_FULL_0200',
@schedule_name = N'Schedule_FULL_0200_System';
EXEC sp_add_jobserver @job_name = N'Restaurant_System_FULL_0200';
PRINT 'Задание полного бэкапа создано';
END TRY
BEGIN CATCH
PRINT 'Ошибка: ' + ERROR_MESSAGE();
END CATCH
Задание для дифференциального бэкапа, который будет выполняться каждые 6 часов
BEGIN TRY
EXEC dbo.sp_add_job
@job_name = N'Restaurant_System_DIFF_6H',
@description = N'Системный дифференциальный бэкап Restaurant';
EXEC sp_add_jobstep
@job_name = N'Restaurant_System_DIFF_6H',
@step_name = N'Выполнить дифференциальный бэкап',
@command = N'EXEC master.dbo.sp_Restaurant_BackupDiff;',
@database_name = N'master';
EXEC sp_add_schedule
@schedule_name = N'Schedule_DIFF_6H_System',
@freq_type = 4,
@freq_interval = 1,
@freq_subday_type = 8,
@freq_subday_interval = 6,
@active_start_time = 80000;
EXEC sp_attach_schedule
@job_name = N'Restaurant_System_DIFF_6H',
@schedule_name = N'Schedule_DIFF_6H_System';
EXEC sp_add_jobserver @job_name = N'Restaurant_System_DIFF_6H';
PRINT 'Задание дифференциального бэкапа создано';
END TRY
BEGIN CATCH
PRINT 'Ошибка: ' + ERROR_MESSAGE();
END CATCH
Задание для копирования журнала транзакций каждые 30 минут:
USE msdb;
GO
BEGIN TRY
EXEC dbo.sp_add_job
@job_name = N'Restaurant_System_LOG_30M',
@description = N'Системный бэкап логов Restaurant (из master)',
@category_name = N'Database Maintenance';
EXEC sp_add_jobstep
@job_name = N'Restaurant_System_LOG_30M',
@step_name = N'Выполнить бэкап логов',
@command = N'EXEC master.dbo.sp_Restaurant_BackupLog;',
@database_name = N'master';
EXEC sp_add_schedule
@schedule_name = N'Schedule_LOG_30M_System',
@freq_type = 4,
@freq_interval = 1,
@freq_subday_type = 4,
@freq_subday_interval = 30,
@active_start_time = 0;
EXEC sp_attach_schedule
@job_name = N'Restaurant_System_LOG_30M',
@schedule_name = N'Schedule_LOG_30M_System';
EXEC sp_add_jobserver @job_name = N'Restaurant_System_LOG_30M';
PRINT 'Задание бэкапа логов создано (каждые 30 мин)';
END TRY
BEGIN CATCH
PRINT 'Ошибка: ' + ERROR_MESSAGE();
END CATCH
