Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсач / Наволоцкий_1302_v2.docx
Скачиваний:
2
Добавлен:
27.12.2025
Размер:
2 Мб
Скачать

Часть 4: стратегия резервного копирования

Скрипт создает бэкап с ДАТОЙ в имени файла.

============================================= */

PRINT 'Выполнение резервного копирования... ' + CONVERT(VARCHAR(30), GETDATE(), 120);

GO

DECLARE @BackupName NVARCHAR(255);

DECLARE @BackupFile NVARCHAR(255);

DECLARE @CurrentDate NVARCHAR(20);

-- Формируем строку даты вручную для SQL 2012 (YYYYMMDD_HHmm)

SET @CurrentDate = CONVERT(VARCHAR(8), GETDATE(), 112) + '_' + REPLACE(CONVERT(VARCHAR(5), GETDATE(), 108), ':', '');

-- Путь к папке Backup (Стандартный для SQL Express)

SET @BackupFile = N'C:\Program Files (x86)\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\Backup\CircuitDB_' + @CurrentDate + '.bak';

SET @BackupName = N'CircuitDB-Full Database Backup';

-- Выполняем бэкап

BACKUP DATABASE [CircuitDB]

TO DISK = @BackupFile

WITH NOFORMAT, NOINIT,

NAME = @BackupName,

SKIP, NOREWIND, NOUNLOAD, STATS = 10;

PRINT 'Бэкап сохранен в: ' + @BackupFile;

GO

PRINT '=============================================================';

PRINT 'Скрипт 05 выполнен успешно. Настройка завершена.';

PRINT 'Время завершения: ' + CONVERT(VARCHAR(30), GETDATE(), 120);

PRINT '=============================================================';

GO

Demo_Presentation.sql

/* =================================================================================

ДЕМОНСТРАЦИЯ ВОЗМОЖНОСТЕЙ СИСТЕМЫ (DEMO)

================================================================================= */

USE CircuitDB;

GO

PRINT '=============================================================';

PRINT 'ЗАПУСК ДЕМОНСТРАЦИИ';

PRINT 'Время: ' + CONVERT(VARCHAR(30), GETDATE(), 120);

PRINT '=============================================================';

GO

/* ==================================================================

ЭТАП 1: СЛОЖНЫЕ ПРЕДСТАВЛЕНИЯ (VIEWS)

Демонстрация аналитики, CTE, Group By и Having

================================================================== */

PRINT '--- ЭТАП 1: ПРОСМОТР ОТЧЕТОВ ---';

USE CircuitDB;

GO

-- 1.1. Полный отчет (INNER JOIN 4 таблиц)

-- Добавляем GETDATE(), чтобы видеть время генерации прямо в таблице

SELECT TOP 5

*,

GETDATE() AS [ReportTime]

FROM [Stock].[v_FullComponentReport];

-- 1.2. Инженерный отчет (Фильтр по SPICE моделям)

SELECT

*,

GETDATE() AS [ReportTime]

FROM [Stock].[v_ActiveComponentsSpiceready];

-- 1.3. СЛОЖНАЯ АНАЛИТИКА (CTE + HAVING)

-- Показывает процент активных компонентов по категориям

SELECT

*,

GETDATE() AS [ReportTime]

FROM [Stock].[v_CategoryAnalytics];

GO

/* ==================================================================

ЭТАП 2: ПОИСК И ДИНАМИЧЕСКИЕ ДАННЫЕ

Демонстрация генерации даты "на лету" и работы индексов

================================================================== */

USE CircuitDB;

GO

PRINT '--- ЭТАП 2: ПОИСК ДАННЫХ ---';

-- 2.1. Поиск по части названия (Артикулу)

EXEC [Stock].[usp_SearchComponents] @Keyword = '555';

-- 2.2. Поиск по производителю (Используем ID из справочника Ref)

-- (Например, Texas Instruments = 1)

EXEC [Stock].[usp_SearchComponents] @ManufacturerID = 1;

GO

/* ==================================================================

ЭТАП 3: СОЗДАНИЕ ДАННЫХ (ТРАНЗАКЦИИ)

Демонстрация вставки с проверкой (TRY...CATCH)

================================================================== */

USE CircuitDB;

GO

PRINT '--- ЭТАП 3: СОЗДАНИЕ КОМПОНЕНТА ---';

DECLARE @NewID INT;

DECLARE @ManufID INT, @CatID INT, @PackID INT;

-- Получаем ID из справочников схемы [Ref]

SELECT TOP 1 @ManufID = ManufacturerID FROM [Ref].[Manufacturers];

SELECT TOP 1 @CatID = CategoryID FROM [Ref].[Categories];

SELECT TOP 1 @PackID = PackageID FROM [Ref].[PackageTypes];

-- Вызываем процедуру создания

EXEC [Stock].[usp_CreateComponent]

@PartNumber = 'DEMO-CHIP-FINAL',

@ManufacturerID = @ManufID,

@CategoryID = @CatID,

@PackageID = @PackID,

@Description = 'Создано на защите с использованием Транзакции',

@NewID = @NewID OUTPUT;

-- Проверяем результат

SELECT *, GETDATE() AS [ReportTime] FROM [Stock].[Components] WHERE ComponentID = @NewID;

GO

/* ==================================================================

ЭТАП 4: СЛОЖНЫЕ ФУНКЦИИ (UDF)

Демонстрация Multi-Statement Table-Valued Function

================================================================== */

PRINT '--- ЭТАП 4: ФУНКЦИИ (Data Quality Analysis) ---';

-- 4.1. Простая табличная функция (Параметры компонента)

USE CircuitDB;

GO

DECLARE @CompID INT = (SELECT TOP 1 ComponentID FROM [Stock].[Components]);

SELECT * FROM [Stock].[udf_GetComponentParams](@CompID);

-- 4.2. СЛОЖНАЯ функция (Расчет баллов качества заполнения)

-- Анализируем категорию 1 (Операционные усилители)

-- Функция сама считает баллы и выносит вердикт (Excellent/Poor)

USE CircuitDB;

GO

SELECT * FROM [Stock].[udf_GetComponentQualityReport](1);

GO

/* ==================================================================

ЭТАП 5: XML ИМПОРТ/ЭКСПОРТ

Демонстрация интеграции

================================================================== */

PRINT '--- ЭТАП 5: XML ОПЕРАЦИИ ---';

-- 5.1. Экспорт

USE CircuitDB;

GO

EXEC [Stock].[usp_ExportReportToXML];

SELECT GETDATE() AS [ReportTime]

-- 5.2. Импорт

-- Имитируем файл, пришедший от поставщика

USE CircuitDB;

GO

DECLARE @MyXML XML;

SET @MyXML = '

<CircuitReport>

<Component

Article="XML-IMPORT-TEST"

Manufacturer="Vishay"

Category="Resistors"

Package="0603"

Description="Loaded via XML Transaction"

/>

</CircuitReport>';

EXEC [Stock].[usp_ImportComponentsFromXML] @XmlData = @MyXML;

-- Проверка

SELECT TOP 1 * FROM [Stock].[Components] ORDER BY ComponentID DESC;

GO

SELECT GETDATE() AS [ReportTime]

/* ==================================================================

ЭТАП 6: БЕЗОПАСНОСТЬ (SCHEMAS)

Демонстрация запрета доступа

================================================================== */

PRINT '--- ЭТАП 6: ПРОВЕРКА БЕЗОПАСНОСТИ ---';

USE CircuitDB;

GO

-- 6.1. Заходим как МЕНЕДЖЕР (У него права только на чтение)

EXECUTE AS USER = 'Manager';

PRINT '>> Текущий пользователь: ' + USER_NAME();

-- Попытка 1: Удалить таблицу (Должна быть ошибка)

BEGIN TRY

DROP TABLE [Ref].[Manufacturers];

END TRY

BEGIN CATCH

PRINT 'ОШИБКА ДОСТУПА: ' + ERROR_MESSAGE();

END CATCH

-- Попытка 2: Создать компонент (Должна быть ошибка - нет прав EXECUTE)

BEGIN TRY

DECLARE @Dummy INT;

EXEC [Stock].[usp_CreateComponent] 'HACK', 1, 1, 1, 'Test', @Dummy;

END TRY

BEGIN CATCH

PRINT 'ОШИБКА ДОСТУПА: ' + ERROR_MESSAGE();

END CATCH

REVERT; -- Возвращаемся в админа

PRINT '>> Возврат к правам: ' + USER_NAME();

GO

Install_DB.bat:

@echo off

echo Installing CircuitDB...

echo.

echo 1. Creating Structure...

sqlcmd -S .\SQLEXPRESS -E -i "01_CreateStructure.sql"

echo 2. Inserting Data...

sqlcmd -S .\SQLEXPRESS -E -i "02_InsertData.sql"

echo 3. Creating Procedures...

sqlcmd -S .\SQLEXPRESS -E -i "03_Procedures.sql"

echo 4. Creating Views and Functions...

sqlcmd -S .\SQLEXPRESS -E -i "04_ViewsAndFunctions.sql"

echo 5. Configuring Security...

sqlcmd -S .\SQLEXPRESS -E -i "05_SecurityAndAdmin.sql"

echo.

echo Installation Complete!

pause

AutoBackup.bat:

sqlcmd -S .\SQLEXPRESS -E -Q "BACKUP DATABASE CircuitDB TO DISK='C:\Program Files (x86)\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\Backup\CircuitDB_Auto.bak' WITH INIT"

Соседние файлы в папке курсач