9. Как переиндексировать базу на MS SQL Server
Данная информация
находилась по адресу: http://www.perlscript.ru
, сейчас находится по адресу: http://www.softpoint.ru
Чтобы произвести переиндексацию необходимо выполнить такой запрос
(например в QA):
Код:
USE base_1cEXEC _1sp_DBReindex |
base_1c
Если хранимой
процедуры
_1sp_DBReindex нет в базе данных (база не 1С), то можно выполнить такой
код (это и есть код хранимой процедуры _1sp_DBReindex):
Код:
USE base_1cDECLARE @TableName char(32)DECLARE SysCur CURSOR FOR SELECT name FROM sysobjects WHERE type=’U’OPEN SysCurFETCH NEXT FROM SysCur INTO @TableNameWHILE @@FETCH_STATUS=0 BEGINDBCC DBREINDEX(@TableName)FETCH NEXT FROM SysCur INTO @TableNameENDCLOSE SysCurDEALLOCATE SysCur |
base_1c
Соответсвенно код
для создания хранимой процедуры:
Код:
if exists (select * from sysobjects where id = object_id(‘dbo._1sp_DBReindex’) and sysstat & 0xf = 4) drop procedure dbo._1sp_DBReindexCREATE PROCEDURE _1sp_DBReindex AS SET NOCOUNT ON DECLARE @TableName char(32) DECLARE SysCur CURSOR FOR SELECT name FROM sysobjects WHERE type=’U’ OPEN SysCur FETCH NEXT FROM SysCur INTO @TableName WHILE @@FETCH_STATUS=0 BEGIN DBCC DBREINDEX(@TableName) FETCH NEXT FROM SysCur INTO @TableName ENDCLOSE SysCurDEALLOCATE SysCur |
Как подключиться к своим данным? How do I connect to my data?
Сведения о подключении к распространенным источникам данных см. на следующих страницах: For info about how to connect to a commonly used data source, see one of the following pages:
Сведения о подключении к источникам данных, не представленным в этом списке, см. в справочнике по строкам подключения. For info about how to connect to a data source that’s not listed here, see The Connection Strings Reference. На этом стороннем сайте представлены примеры строк подключения и дополнительные сведения о поставщиках данных и используемых ими данных подключений. This third-party site contains sample connection strings and more info about data providers and the connection info they require.
Основы T-SQL
Для создания базы данных используется команда CREATE DATABASE .
Чтобы создать новую базу данных откроем SQL Server Management Studio. Нажмем на назначение сервера в окне Object Explorer и в появившемся меню выберем пункт New Query .
В центральное поле для ввода выражений sql введем следующий код:
Тем самым мы создаем базу данных, которая будет называться «usersdb»:
Для выполнения команды нажмем на панели инструментов на кнопку Execute или на клавишу F5. И на сервере появится новая база данных.
После создания базы даных, мы можем установить ее в качестве текущей с помощью команды USE :
Прикрепление базы данных
Возможна ситуация, что у нас уже есть файл базы данных, который, к примеру, создан на другом компьютере. Файл базы данных представляет файл с расширением mdf, и этот файл в принципе мы можем переносить. Однако даже если мы скопируем его компьютер с установленным MS SQL Server, просто так скопированная база данных на сервере не появится. Для этого необходимо выполнить прикрепление базы данных к серверу. В этом случае применяется выражение:
В качестве каталога для базы данных лучше использовать каталог, где хранятся остальные базы данных сервера. На Windows 10 по умолчанию это каталог C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA . Например, пусть в моем случае файл с данными называется userstoredb.mdf. И я хочу этот файл добавить на сервер как базу данных. Вначале его надо скопировать в выше указанный каталог. Затем для прикрепления базы к серверу надо использовать следующую команду:
После выполнения команды на сервере появится база данных contactsdb.
Удаление базы данных
Для удаления базы данных применяется команда DROP DATABASE , которая имеет следующий синтаксис:
После команды через запятую мы можем перечислить все удаляемые базы данных. Например, удаление базы данных contactsdb:
Стоит учитывать, что даже если удаляемая база данных была прикреплена, то все равно будут удалены все файлы базы данных.
Шаг 4. Настройка Планов обслуживания (Maintenance Plans, Регламентных заданий)
Для работы регламентных заданий необходимо создать план обслуживания:
Итак, приведу свой пример настроенного Maintenance Plans с комментариями. Мой план состоит из 5 подпланов:
Первый подплан (ежедневное еженочное обслуживание сервера и резервных копий):
Данный подплан состоит из нескольких шагов. Связи зеленого цвета задают переход к следующему заданию при удачном завершении (т.е. без ошибок), связи синего цвета задают переход к следующему заданию при любом результате выполнения текущего. Параметры шагов видны на размещенных в редакторе заданиях. Параметры некоторых заданий нужно описать отдельно. Первым шагом выполняется «Проверка целостности базы данных» (Check Database Integrity Task), которая выполняется для всех баз системы и следующие задания выполняются только при отсутствии ошибок при проверке баз. Следующим шагом выполняется «Перестроение индексов баз данных» (Rebuild Index Task) для всех баз данных сервера. Данная процедура довольно ресурсоемкая, но в последствии ускоряет работу базы, т.к. если фрагментированость индексов > 25%, это резко снижает производительность сервера. Если размер баз не позволяет выполнять данную задачу, т.к. она занимает много времени, то рекомендуется делать данное действие хотябы раз в неделю, при этом, на ночные задания заменить задачу Перестроение индексов баз данных (Rebuild Index Task) на Дефрагментацию индекса (Reorganize Index Task), которая менее ресурсоемка. Далее происходит «Обновление статистики базы данных» (Update Statistics Task) для всех баз данных, опять же для оптимизации. После этого задания рекомендуется выполнить «Очистку процедурного кэша»:
При этом, запускается процедура
DBCC FREEPROCCACHE
После оптимизации работы желательно сделать резервную копию журналов транзакций. Этот шаг делать не обязательно, но желательно. Во время выполнения предыдущих шагов (Перестроение индексов баз данных (Rebuild Index Task) и Обновление статистики базы данных (Update Statistics Task)) файлы журналов вырастают примерно до размера базы данных, а то и более. В результате, в следующих подпланах при выполнении первого резервного копирования журнала транзакций, размер копии имеет довольно большой объем. Это может сильно увеличить вермя восстановления базы. Таким образом, делая копию логов до полной копии, мы избавляемся от данной проблемы. (спасибо за идею комментатору Kyoshiro)
Далее можно выполнить полный бэкап заданием Создание резервной копии базы данных (Back Up Database Task):
При выполнении данного задания копии складываются в сетевую папку на файловом сервере с расширением bak, при этом, для каждой базы создается своя папка:
SAMBA ~ # ls -1 /backup/full/ database1 database2 ... SAMBA ~ # ls -1 /backup/full/satabase1/ database1_backup_201111210250.bak database1_backup_201111220251.bak ...
После заверешения создания резервной копии параллельно запускается 3 задания: очистка резервных копий журналов транзакция (о создании таких копий — ниже) старее 5 дней, очистка полных бэкапов старее 1 недели и очистка истории старше 1 месяца (сюда входит в основном — очистка служебной информации MS SQL, такой как журналы):
Данный подплан у меня запускается каждую ночь в нерабочее время по будням:
Второй, третий, четвертый подплан (обновление статистики 3 раза в день):
Следующие 3 подплана одинаковы по содержимому и различаются лишь временем выполнения. Выполняются 3 раза в день — в 6, 13 и 19 часов:
Обновление статистики довольно ресурсоемкая задача, поэтому спланируйте ее выполнение в то время, когда база данных не сильно загружена.
Пятый подплан (резервное копирование журнала транзакций):
Данный план выполняет инкрементальное копирование транзакционного лога Microsoft SQL Server:
Копирование выполняется каждые пол часа в рабочее время и сохраняется в сеть с расширением trn:
После настройки данного плана мы имеем регулярное резервное копирование с необходимым регламентным обслуживанием, с хранением копий базы данных за последние 7 дней с возможностью восстановления базы интервалом до 30 минут.
Более подробно о выборе и планировании плана обслуживания можно посмотреть данный подкаст(временно убран по причине заражения сайта s.rpod.ru):
Примеры:
Рассмотрим как можно использовать EXEC AT:
- Скрипт 1: Создаёт Linked Server
- Скрипт 2: Выполняет простой SELECT к созданному Linked Server и возвращает один результирующий набор
- Скрипт 3: Выполняет два SELECT и возвращает два результирующих набора
- Скрипт 4: SELECT с двумя аргументами в динамическом SQL
- Скрипт 5: Аналогично скрипту 4, но с переменными
- Скрипт 6: Выполнит создание объекта на удалённом сервере
-
Скрипт 7: Удалит все объекты, созданные нашей сессией
Transact-SQL
—Скрипт 1 : Create a linked server
EXEC sp_addlinkedserver ‘FARAWAYSERVER’, ‘SQL Server’—Скрипт 2 : Execute a simple SELECT statement on the linked server
EXEC (‘SELECT TOP 10 * FROM AdventureWorksLT.SalesLT.Customer’) AT ;
GO—Скрипт 3 : Executing multiple SELECT statements on linked server and getting multiple resultsets
EXEC (‘SELECT TOP 10 * FROM AdventureWorksLT.SalesLT.Customer;
SELECT TOP 10 * FROM AdventureWorksLT.SalesLT.CustomerAddress;’) AT ;
GO—Скрипт 4 : Execute a SELECT statement on linked serer and pass two arguments at dynamically
EXEC (‘SELECT TOP 10 * FROM AdventureWorksLT.SalesLT.Customer
WHERE CustomerID = ? AND LastName = ?’, 10, ‘Garza’) AT ;
GO—Скрипт 5 : Execute a SELECT statement on linked serer and pass two arguments at dynamically
—by using variables
DECLARE @CustomerID AS INT
DECLARE @LastName AS VARCHAR(100)
SET @CustomerID = 10
SET @LastName = ‘Garza’
EXEC (‘SELECT TOP 10 * FROM AdventureWorksLT.SalesLT.Customer
WHERE CustomerID = ? AND LastName = ?’, @CustomerID, @LastName) AT ;
GO—Скрипт 6 : Execute a DDL statement on linked server
EXEC (
‘USE TempDB
IF OBJECT_ID(»dbo.Table1») IS NOT NULL
DROP TABLE dbo.Table1
CREATE TABLE dbo.Table1
(
Column1 INT
)’ ) AT ;—Скрипт 7 : Once you are done with your testing, clean up created objects
EXEC (
‘USE TempDB
IF OBJECT_ID(»dbo.Table1») IS NOT NULL
DROP TABLE dbo.Table1’
) AT ;
EXEC sp_dropserver ‘FARAWAYSERVER’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—Скрипт 1 : Create a linked server
EXECsp_addlinkedserver’FARAWAYSERVER’,’SQL Server’
—Скрипт 2 : Execute a simple SELECT statement on the linked serverEXEC(‘SELECT TOP 10 * FROM AdventureWorksLT.SalesLT.Customer’)ATFARAWAYSERVER;
GO
—Скрипт 3 : Executing multiple SELECT statements on linked server and getting multiple resultsetsEXEC(‘SELECT TOP 10 * FROM AdventureWorksLT.SalesLT.Customer;
SELECT TOP 10 * FROM AdventureWorksLT.SalesLT.CustomerAddress;’)ATFARAWAYSERVER;
GO
—Скрипт 4 : Execute a SELECT statement on linked serer and pass two arguments at dynamicallyEXEC(‘SELECT TOP 10 * FROM AdventureWorksLT.SalesLT.Customer
WHERE CustomerID = ? AND LastName = ?’,10,’Garza’)ATFARAWAYSERVER;
GO
—Скрипт 5 : Execute a SELECT statement on linked serer and pass two arguments at dynamically
—by using variablesDECLARE@CustomerIDASINT
DECLARE@LastNameASVARCHAR(100)
SET@CustomerID=10
SET@LastName=’Garza’
EXEC(‘SELECT TOP 10 * FROM AdventureWorksLT.SalesLT.Customer
WHERE CustomerID = ? AND LastName = ?’,@CustomerID,@LastName)ATFARAWAYSERVER;
GO
—Скрипт 6 : Execute a DDL statement on linked serverEXEC(
‘USE TempDB
IF OBJECT_ID(»dbo.Table1») IS NOT NULL
DROP TABLE dbo.Table1
CREATE TABLE dbo.Table1
(
Column1 INT)’)ATFARAWAYSERVER;
—Скрипт 7 : Once you are done with your testing, clean up created objectsEXEC(
‘USE TempDB
IF OBJECT_ID(»dbo.Table1») IS NOT NULL
DROP TABLE dbo.Table1′
)ATFARAWAYSERVER;
EXECsp_dropserver’FARAWAYSERVER’
Настройка MS SQL Server 2005-2017 для работы в сети
После установки SQL Server, по умолчанию, он не доступен по сети. Если SQL сервер не доступен или при запуске программы (Деканат, ПК, Ведомости и т.д)
возникает ошибка, то это может свидетельствовать о следующем:
— Не установлен режим подлинности Windows аутентификация;
— Не включена возможность удаленного соединения (для SQL server 2005);
— Не доступен протокол TCP/IP;
— Отсутствует физическое подключение к сети;
— Блокирование сервера Брандмауэром Windows.
После установки SQL Server необходимо настроить его для работы в сети. Настройки зависят от версии сервера.
Выберите в меню Пуск — Программы — Microsoft SQL Server 2005>Средства настройки> Настройка контактной зоны SQL Server.
В открывшейся форме выберите «Настройка контактной зоны для служб и соединений» и нажмите «Сохранить»
Настройка контактной зоны
2.2. Укажите галочку «Использовать TCP/IP и именованные каналы». Нажмите кнопку «Применить».
Настройка контактной зоны
2.3 В списке компонентов перейдите на пункт «SQL Server Browser». Убедитесь, что служба запущена. Укажите режим запуска «Авто» и запустите службу.
Откройте меню «Пуск» – «Все программы» – «Microsoft Sql Server 2008/2012» – «Средства настройки» – «Диспетчер конфигурации SQL Server»
Во вкладке «Службы SQL Server» убедитесь, что служба «SQL Server, обозреватель» запущена. В колонке «Состояние» должно быть значение «Работает», а в колонке «Режим запуска» — «Авто». Также и для службы SQL Server (sqlexpress).
Агент SQL Server можно не включать
Перейдите в пункт «Сетевая конфигурация SQL Server». Проверьте состояние протокола TCP/IP (должна быть состояние «Включено»).
После смены состояния перезапустите службу SQL Server.
Как выбрать место работы для Junior DBA
В начале вашей карьеры следует обращать больше внимание не на зарплату, а на коллектив. Вам необходимо найти такое место работы, где вы сможете перенять опыт у ваших коллег
Вам очень повезёт, если вы сможете найти достойного наставника, тогда ваш карьерный рост будет стремительным. Если вы устраиваетесь на работу где нет других ДБА, то вам придётся самостоятельно проходить все сложности обучения и очень вероятно что это обучение будет сопровождаться авариями и другими сложностями, в таком случае будет полезно иметь знакомых, опытных администраторов БД, которым можно задать вопросы по телефону.
Чтобы стать Senior DBA вам необходимо постоянно развиваться. Вот несколько вариантов как вы можете это делать:
- Посещать курсы
- Посещать мероприятия
- Читать сайты и форумы
- Задавать вопросы на форумах и сайтах
- Смотреть обучающее видео
- Старайтесь делать на работе больше, чем вас просят (изучать каждую тему глубже)
Пора переходить к нашей теме.
Удаление схем и пользователей
Данный пункт может применяться если у Вас уже была установлена БД Деканат. Данные действия надо выполнить, если не удается создать учетные записи программы.
1. Запустите «Среда SQL Server Management Studio»;
2. Откройте и перейдите во вкладку «Деканат» — «Безопасность» — «Схемы»;
3. Удалите следующие схемы: Abit, Dek, VedKaf, Kaf, Plany, Test, GraphGroups;
4. Отройте вкладку Деканат» — «Безопасность» — «Пользователи»
5. Удалите имена пользователей с именами: Abit, VedKaf, Kaf, Plany, Test, GraphGroups.
Удалите схемы, а затем пользователей
Повторите процедуру создания пользователей через Users Manager.
Создание, изменение хранимых процедур
Создание хранимой процедуры предполагает решение следующих за-
дач: планирование прав доступа. При создании хранимой процедуры следует учитывать, что она будет иметь те же права доступа к объектам базы
данных, что и создавший ее пользователь; определение параметров храни-
мой процедуры, хранимые процедуры могут обладать входными и выход-
ными параметрами; разработка кода хранимой процедуры. Код процедуры
может содержать последовательность любых команд SQL, включая вызов
других хранимых процедур.
Синтаксис оператора создания новой или изменения имеющейся хранимой процедуры в обозначениях MS SQL Server:
{CREATE | ALTER } PROCEDURE имя_процедуры ;номер {@имя_параметра тип_данных } VARYING =DEFAULTOUTPUT ,...n WITH { RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION } FOR REPLICATION AS sql_оператор ...n
Рассмотрим параметры данной команды.
Используя префиксы sp_, #, ##, создаваемую процедуру можно определить в качестве системной или временной. Как видно из синтаксиса команды, не допускается указывать имя владельца, которому будет принадлежать создаваемая процедура, а также имя базы данных, где она должна
быть размещена. Таким образом, чтобы разместить создаваемую хранимую
процедуру в конкретной базе данных, необходимо выполнить команду
CREATE PROCEDURE в контексте этой базы данных. При обращении из
тела хранимой процедуры к объектам той же базы данных можно использовать укороченные имена, т. е. без указания имени базы данных. Когда же
требуется обратиться к объектам, расположенным в других базах данных,
указание имени базы данных обязательно.
Для передачи входных и выходных данных в создаваемой хранимой
процедуре имена параметров должны начинаться с символа @. В одной
хранимой процедуре можно задать множество параметров, разделенных
запятыми. В теле процедуры не должны применяться локальные переменные, чьи имена совпадают с именами параметров этой процедуры.
Для определения типа данных параметров хранимой процедуры подходят любые типы данных SQL, включая определенные пользователем.
Однако тип данных CURSOR может быть использован только как выходной параметр хранимой процедуры, т.е. с указанием ключевого слова
OUTPUT.
Наличие ключевого слова OUTPUT означает, что соответствующий
параметр предназначен для возвращения данных из хранимой процедуры.
Однако это вовсе не означает, что параметр не подходит для передачи значений в хранимую процедуру. Указание ключевого слова OUTPUT предписывает серверу при выходе из хранимой процедуры присвоить текущее
значение параметра локальной переменной, которая была указана при вызове процедуры в качестве значения параметра. Отметим, что при указании ключевого слова OUTPUT значение соответствующего параметра при вызове процедуры может быть задано только с помощью локальной переменной. Не разрешается использование любых выражений или констант, допустимое для обычных параметров.
Ключевое слово VARYING применяется совместно с параметром
OUTPUT, имеющим тип CURSOR. Оно определяет, что выходным параметром будет результирующее множество.
Ключевое слово DEFAULT представляет собой значение, которое будет принимать соответствующий параметр по умолчанию. Таким образом,
при вызове процедуры можно не указывать явно значение соответствующего параметра.
Так как сервер кэширует план исполнения запроса и компилированный
код, при последующем вызове процедуры будут использоваться уже готовые значения. Однако в некоторых случаях все же требуется выполнять
перекомпиляцию кода процедуры. Указание ключевого слова RECOMPILE
предписывает системе создавать план выполнения хранимой процедуры
при каждом ее вызове.
Параметр FOR REPLICATION востребован при репликации данных и
включении создаваемой хранимой процедуры в качестве статьи в публикацию.
Ключевое слово ENCRYPTION предписывает серверу выполнить
шифрование кода хранимой процедуры, что может обеспечить защиту от
использования авторских алгоритмов, реализующих работу хранимой процедуры.
Ключевое слово AS размещается в начале собственно тела хранимой
процедуры. В теле процедуры могут применяться практически все команды SQL, объявляться транзакции, устанавливаться блокировки и вызываться другие хранимые процедуры. Выход из хранимой процедуры можно
осуществить посредством команды RETURN.
Шаг 2. Настройка сервера Microsoft SQL 2005
2.1. Настройка протоколов подключения
Для настройки протоколов взаимодействия сервера и клиента Microsoft SQL необходимо запустить «SQL Server Configuration Manager»:
…и оставить для работы только протоколы TCP/IP и Shared Memory:
Если устанавливается версия MS SQL Express по-умолчанию выключен протокол TCP/IP, нужный для работы с 1С:Предприятие 8 — его необходимо включить. Протокол именнованных каналов (Named Pipe) выключите совсем (и для «клиента» тоже на сервере приложений).
2.2. Перенос tempdb на быстрый независимый массив/диски
Для переноса tempdb необходимо запустить sql-скрипт примерно следующего содержания:
USE master GO ALTER DATABASE tempdb modify file (NAME=tempdev, FILENAME='E:\Temp\tempdb_data.mdf') GO ALTER DATABASE tempdb modify file (NAME=templog, FILENAME='E:\Temp\tempdb_log.ldf') GO
где, E:\Temp\ — каталог, в котором будут лежать tempdb, а tempdb_data.mdf и tempdb_log.ldf имя файла базы данных и лога соответственно.
2.3. Настройка параметров сервера SQL
Для настройки сервера запускаем «SQL Server Management Studio», подключаемся к установленному серверу Database Engine’ом и открываем свойства (Server Properties). Тут нам нужно настроить 3 пункта:
Память (Memory)
Параметр «Maximum server memory (in MB)» задает максимально отведенное серверу количество памяти из расчета: – – . Например, если у нас на сервере всего 24 ГБ оперативной памяти, стоит Windows 2003 и запущен сервер 1С Предприятия с 2мя процессами rphost (которым нужна память хотябы по 1,5Гб) то рассчет будет следующим: 24 — 1,5 — 1,5*2 = 19,5 ГБ ставит параметр «Maximum server memory (in MB)». Это необходимо для того, чтобы sql-сервер рассчитывал на заданный объем и освобождал память заблаговременно, т.к. если поставить неограниченный объем, и сервер попробует получить память, которой нет, он начинает лезть в файл подкачки, что сильно замедлит работу.
Процессоры (Processors)
Максимальное количество потоков (Maximum worker threads) стОит регулировать только при большом количестве клиентов (более 255) и для 1С это не актуально, поэтому оставим по-умолчанию. (хотя обратное ). Также выставляем галку повышенного приоритета сервера (Boost SQL Server priority).
Database Settings
В данном пункте можно настроить каталоги для файлов Данных и логов, чтобы новые базы данных создавались именно там.
И снова о скорости работы 1с 8.х + тест от Гилева (конфигурация TPС_1C_GILV_A) + как Выбрать сервер для 1С 8.х Промо
Предыстория:
Есть в конторе, где я работаю, пара практически ОДИНАКОВЫХ по железу сервера…
так вот заметили что на одном из них 1С 8.2 работает значительно быстрей что в Клиент-Серверном, что в файловом варианте…
и что именно удивило так это что медленней работал сервер с большим количеством Оперативной памяти + RAID10 на SSD.
Проводили много тестов на работу дисковой системы + различные тесты SQL — ВЫВОД: ничего непонятно где тормоза.
И вот попала ко мне конфигурация 1С для оценки производительности 1С от Гилева http://infostart.ru/public/57204/
Подробности в Описании…
2 стартмани
301