Базы данных курсач. Set p dbname введите имя базы данных set p backupnameвведите имя файла резервной копии
Скачать 54.68 Kb.
|
Часть 1 1) 2) в 3) Часть 2 4) создание @echo off set /p dbname =введите имя базы данных: set /p backupname=введите имя файла резервной копии: osql -E -Q "BACKUP DATABASE %dbname% TO DISK='%backupname%' WITH FORMAT" echo Резервное копирование завершено pause восстановление @echo off set /p dbname= введите имя восстанавливаемой базы данных: set /p backupname= введите имя файла резервной копии: osql -E -Q "RESTORE DATABASE %dbname% FROM DISK='%backupname%' WITH REPLACE" echo Восстановление завершено pause 5) DECLARE @name VARCHAR(50) -- имя базы данных DECLARE @path VARCHAR(100) -- каталог для сохранение резервных копий DECLARE @fileName VARCHAR(100) – имя файла резервной копии DECLARE @date VARCHAR(20) -- текущая дата в формате yyyy-mm-dd DECLARE @year VARCHAR(4) -- текущий год DECLARE @month VARCHAR(2) -- текущий месяц DECLARE @day VARCHAR(2) -- текущее число DECLARE @sql VARCHAR(500) -- строка для выполнения команды BACKUP DATABASE DECLARE db_cursor CURSOR FOR -- определение курсора SELECT name FROM sys.databases WHERE name NOT IN ('master', 'model', 'msdb', 'tempdb') OPEN db_cursor FETCH NEXT FROM db_cursor INTO @name WHILE @@FETCH_STATUS = 0 BEGIN SET @path = 'C:\Backup\' -- задаем каталог для сохранения резервных копий SET @year = DATEPART(YEAR, GETDATE()) – получаем текущий год SET @month = RIGHT('00' + CAST(DATEPART(MONTH, GETDATE()) AS VARCHAR), 2) --получаем текущий месяц с лидирующими нулями SET @day = RIGHT('00' + CAST(DATEPART(DAY, GETDATE()) AS VARCHAR), 2) –получаем текущее число с лидирующими нулями SET @date = @year + '-' + @month + '-' + @day – формируем строку с текущей датой SET @fileName = @path + @name + '-' + @date + '.bak' -- формируем имя файла резервной копии SET @sql = 'BACKUP DATABASE ' + @name + ' TO DISK = ''' + @fileName + '''' EXEC(@sql) -- выполняем команду BACKUP DATABASE FETCH NEXT FROM db_cursor INTO @name END CLOSE db_cursor DEALLOCATE db_cursor Часть 3 8) BULK INSERT [имя_таблицы] FROM 'C:\путь\к\файлу.csv' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', CODEPAGE = 'ACP' ); Где: Table1 – имя таблицы в базе данных, которую нужно заполнить данными. 'C:\Data\file.csv' - путь к файлу csv, из которого нужно импортировать данные. FIRSTROW – номер строки, с которой начинается импорт данных (обычно это строка заголовка таблицы, которую нужно пропустить). FIELDTERMINATOR - символ-разделитель полей в файле csv (обычно это запятая ',', но может быть другой, в зависимости от формата). ROWTERMINATOR - символ-разделитель строк в файле csv (обычно это символ новой строки '\n', но может быть другой, в зависимости от формата). 9) @echo off set SERVER=localhost set DB_NAME=база_данных set TABLE1=таблица1 set TABLE2=таблица2 rem a. Экспорт данных из таблицы sqlcmd -S %SERVER% -d %DB_NAME% -E -Q "SELECT * FROM %TABLE1% WHERE условие_отбора_данных" -o "table1.csv" -s"," -W rem b. Экспорт связанных данных в отдельные файлы bcp %DB_NAME%.dbo.таблица2 out "table2.csv" -S %SERVER% -T -c -t"," rem c. Создание пустой базы данных sqlcmd -S %SERVER% -E -i "script.sql" rem d. Импорт данных из файлов bcp %DB_NAME%.dbo.%TABLE1% in "table1.csv" -S %SERVER% -T -c -t"," bcp %DB_NAME%.dbo.%TABLE2% in "table2.csv" -S %SERVER% -T -c -t"," rem e. Вывод на экран echo ==== Исходные данные ==== sqlcmd -S %SERVER% -d %DB_NAME% -E -Q "SELECT * FROM %TABLE1%лERE условие отбора данных" sqlcmd -S %SERVER% -d %DB_NAME% -E -Q "SELECT * FROM %TABLE2%" echo ==== Импортированные данные ==== sqlcmd -S %SERVER% -d %DB_NAME% -E -Q "SELECT * FROM %TABLE1%" sqlcmd -S %SERVER% -d %DB_NAME% -E -Q "SELECT * FROM %TABLE2%" pause Для запуска файла необходимо его сохранить с расширением .bat и запустить в командной строке. В данном примере переменная %SERVER%, которая указывает на имя сервера с базой данных, %DB_NAME% - на имя базы данных, %TABLE1% и %TABLE2% - на имена таблиц, из которых нужно экспортировать данные. На шаге a)данные из таблицы импортируются в файл table1.csv с разделителем ",". На шаге b) данные из таблицы 2 экспортируются в файл table2.csv. На шаге c) создается пустая база данных, используя скрипт, написанный в задании 1. На шаге d)данные из файлов table1.csv и table2.csv импортируются в соответствующие таблицы базы данных. На шаге e)выводятся на экран исходные данные из таблиц %TABLE1% и %TABLE2% и импортированные данные из таблиц %TABLE1% и %TABLE2%. Часть 4 10) -- Создание роли "Добавление_Изменение_Запись" CREATE ROLE Добавление_Изменение_Запись; -- Назначение прав на таблицу "Table1" GRANT INSERT, UPDATE, DELETE ON Table1 TO Добавление_Изменение_Запись; -- Назначение прав на таблицу "Table2" GRANT INSERT, UPDATE ON Table2 TO Добавление_Изменение; -- Создание роли "Чтение" CREATE ROLE Чтение; -- Назначение прав на таблицы "Table1" и "Table2" GRANT SELECT ON Table1 TO Чтение; GRANT SELECT ON Table2 TO Чтение; Где: Добавление_Изменение_Запись - это имя роли, которая должна иметь права на вставку, изменение и удаление данных из таблиц. Table1 и Table2 - это имена таблиц, для которых назначаются права доступа. Для правил поступа - это права, которые назначаются роли на каждую таблицу. В данном примере роль Добавление_Изменение_Запись получает полномочия на выполнение всех операций (вставка, редактирование, удаление) для таблицы Table1, на таблицу Table2 только на вставку и редактирование, а для роли Чтение назначаются только права на чтение данных из таблиц. Этот скрипт можно продолжить, добавив назначение прав для других таблиц, а также настройку других ролей и назначение им подходящих прав доступа. Важно учитывать структуру базы данных и требования к безопасности доступа при определении ролей и назначении им полномочий. 11) DECLARE @lastname VARCHAR(50), @firstname VARCHAR(50), @patronymic VARCHAR(50), @username VARCHAR(50), @rolename VARCHAR(50); DECLARE user_cursor CURSOR FOR SELECT lastname, firstname, patronymic, rolename FROM Users; OPEN user_cursor; FETCH NEXT FROM user_cursor INTO @lastname, @firstname, @patronymic, @rolename; WHILE @@FETCH_STATUS = 0 BEGIN SET @username = SUBSTRING(@lastname, 1, 1) + SUBSTRING(@firstname, 1, 1) + SUBSTRING(@patronymic, 1, 1); -- Проверяем, если такой логин уже свществует в базе данных, добавляем порядковый номер DECLARE @count INT = 0; WHILE EXISTS (SELECT * FROM sys.server_principals WHERE name = @username + CAST(@count AS VARCHAR)) BEGIN SET @count += 1; END SET @username = @username + CAST(@count AS VARCHAR); -- Создаём логин пользователя EXECUTE ('CREATE LOGIN [' + @username + '] WITH PASSWORD = ''password'''); EXECUTE ('CREATE USER [' + @username + '] FOR LOGIN [' + @username + ']'); EXECUTE ('ALTER ROLE [' + @rolename + '] ADD MEMBER [' + @username + ']'); FETCH NEXT FROM user_cursor INTO @lastname, @firstname, @patronymic, @rolename; END CLOSE user_cursor; DEALLOCATE user_cursor; Где: Users - это имя таблицы, в которой содержатся данные для создания пользователей. lastname, firstname, patronymic - это поля таблицы, которые содержат информацию об имени, фамилии и отчестве пользователей. rolename - это поле таблицы, которое содержит информацию о роли, которую нужно назначить пользователю. EXECUTE - это SQL-оператор для выполнения динамических запросов. Он используется для формирования командной строки для создания логина, пользователя и назначения роли. В этом скрипте используется курсор для перебора записей таблицы Users и создания пользователей с помощью операторов CREATE LOGIN, CREATE USER и ALTER ROLE. Имя логина формируется из первых букв имени, фамилии и отчества, а при дублировании добавляется порядковый номер. Далее происходит назначение пользователю роли, указанной в соответствующем поле таблицы. При необходимости, скрипт можно изменить, чтобы создавать пользователей с другими правами доступа или с другими параметрами логина. 12) @echo off set SERVER=localhost set DB_NAME=база_данных set USERNAME_ADD=пватзователь1 set USERNAME_UPDATE=пватзователь2 set USERNAME_DELETE=пватзователь3 rem Выбор данных sqlcmd -S %SERVER% -d %DB_NAME% -U %USERNAME_ADD% -P password -Q "SELECT * FROM Table1" rem Вставка данных sqlcmd -S %SERVER% -d %DB_NAME% -U %USERNAME_ADD% -P password -Q "INSERT INTO Table1 (name, value) VALUES ('A', 100)" rem Редактирование данных sqlcmd -S %SERVER% -d %DB_NAME% -U %USERNAME_UPDATE% -P password -Q "UPDATE Table1 SET value = 200 WHERE name = 'A'" rem Удаление данных sql -d -S %SERVER% -d %DB_NAME% -U %USERNAME_DELETE% -P password -Q "DELETE FROM Table1 WHERE name = 'A'" pause В данном примере используются три различных пользователяпватзователь1, пватзователь2 и пватзователь3 и различные запросы для каждого из них. Предполагается, что для каждого пользователя были назначены соответствующие права доступа на таблицу Table1. На каждом шаге выполняется один из запросов: SELECT для пользователя 1пватзователь1, INSERT для пользователя пватзователь2, UPDATE для пользователя ля пватзователь3 и DELETE для пользователя пватзователь3. Если права доступа назначены корректно, запросы будут успешно выполнены. Если же прав нет, запросы выполнятся с ошибкой. Этот скрипт можно сохранить в файл с расширением .bat и запустить его в командной строке для демонстрации работоспособности назначенных прав доступа. Важно убедиться, что в скрипте используются |