Параметри баз даних SQL Server 2005

Параметри баз даних SQL Server 2005, ALLOW_SNAPSHOT_ISOLATION, ANSI_NULL_DEFAULT , ANSI_NULLS , ANSI_PADDING , ANSI_WARNINGS, ARITHABORT , AUTO_CLOSE , AUTO_CREATE_STATISTICS, AUTO_

Крім режиму відновлення та режимів роботи, у баз даних SQL Server 2005 є безліч інших важливих властивостей. Ці властивості можна налаштувати за допомогою графічного інтерфейсу на вкладціOptionsвластивостей бази даних SQL Server Management Studio (при цьому будуть доступні не всі параметри) або за допомогою команди ALTER DATABASE . При цьому назви параметрів та їх значення на графічному інтерфейсі та в синтаксисі команди ALTER DATABASE виглядають по-різному. Наприклад, на вкладціOptionsдля параметраANSINULLSEnabledпередбачені значення T RUE і F ALSE . При використанні команди ALTER DATABASE той самий параметр називається ANSI_NULLS і для нього використовуються значення O N і O FF .

Далі наведено інформацію про всі параметри бази даних, які не були описані у двох попередніх розділах. Назви параметрів баз даних та їх значення наводяться у форматі команди ALTER DATABASE .

qALLOW_SNAPSHOT_ISOLATION— визначає, чи можна під час роботи з цією базою даних використовувати новий режим ізоляції транзакцій миттєвих знімків. За промовчанням значення цього параметра встановлюється в OFF .

qANSI_NULL_DEFAULT— визначає, чи будуть за умовчанням стовпці у створюваних таблицях цієї бази даних допускати значення типу NULL . За замовчуванням значення цього параметра - OFF (тобто не допускати), що порушує стандарт ANSI. Цей параметр можна змінювати на рівні окремого сеансу. Усі підключення OLE DB і ODBC за замовчуванням переставляють його значення на рівні сеансу в ON .

qANSI_NULLS— якщо увімкнути цей параметр, то будь-які порівняння значень, принаймні, одне з яких є NULL, повертатимуть NULL. Така поведінка передбачена стандартом ANSI. Якщо ж цей параметр встановлений у OFF (за замовчуванням), SQL Server при порівнянні двох значень типу NULL повертатиме TRUE . Цей параметр передбачається обов'язково встановлювати в ON при створенні або зміні індексованих уявлень або індексів для стовпців, що обчислюються. Усі підключення за OLE DB і ODBC також за умовчанням переставляють його значення лише на рівні сеансу в ON .

qANSI_PADDING— визначає, чи зберігатимуться символи порожнього простору (наприклад, пробіли) при вставці значень типу varchar та nvarchar у стовпці (значення ON передбачено стандартом ANSI ). За замовчуванням у SQL Server встановлено значення OFF. Так само, як і для попереднього параметра, цей параметр наказується обов'язково встановлювати в ON при створенні або зміні індексованих уявлень або індексів для обчислюваних стовпців, а також він встановлюється в ON за замовчуванням всіма підключеннями OLE DB і ODBC на рівні сеансу. У документації Microsoft взагалі рекомендується, щоб цей параметр завжди був встановлений в ON (проте значення за замовчуванням, як уже було сказано, OFF).

qANSI_WARNINGS— цей параметр визначає, чи генеруватимуться попереджувальні повідомлення, якщо агрегатної функції запропонували зробити поділ на нуль або попрацювати зі значенням типу NULL . Щодо значень справедливо все те саме, що і для попереднього параметра: значення ON рекомендується стандартом ANSI , за замовчуванням встановлюється на рівні сеансу підключення OLE DB і ODBC , необхідно для роботи з індексованими уявленнями і індексами дляобчислюваних стовпців. Але для баз даних SQL Server 2005 за промовчанням встановлено значення OFF.

qARITHABORT— якщо цей параметр встановити в ON , то арифметична помилка (переповнення змінної або поділ на нуль) призведе до зупинки пакета або відкату транзакції, в якій вона виникла. Якщо значення цього параметра встановлено в OFF (за замовчуванням у SQL Server ), все обмежиться попереджувальним повідомленням, а виконання пакета/транзакции буде продолжено. Для роботи з індексованими уявленнями та індексами для обчислюваних стовпців значення цього параметра має бути встановлене в ON.

qAUTO_CREATE_STATISTICSтаAUTO_UPDATE_STATISTICS— якщо ці параметри включені (за замовчуванням), то SQL Server 2005 автоматично створює та оновлює статистику для стовпців таблиць цієї бази даних. Статистика – це спеціальна службова інформація про розподіл даних у стовпцях таблиць, яка використовується оптимізатором запитів. Уявіть, наприклад, що у вас виконується запит, який просить повернути всіх Іванових, які мешкають у місті Санкт-Петербурзі. При цьому припустимо, що у 90% записів у цій таблиці одне й те саме значення у стовпці "Місто" - Санкт-Петербург. Звичайно, з точки зору виконання запиту, спочатку вигідніше вибрати в таблиці всіх Іванових (їх явно буде не 90%), а потім перевіряти значення стовпця "Місто" для кожного відібраного запису. Однак для того, щоб дізнатися, як розподіляються значення у стовпці, потрібно спочатку виконати запит. Тому SQL Server самостійно ініціює виконання таких запитів, а потім зберігає інформацію про розподіл даних (така інформація і називається статистикою) у службових таблицях бази даних.

Статистика потрібна обов'язково, інакше оптимізатор не зможе створюватиправильні плани виконання запитів. Параметри AUTO_CREATE_STATISTICS та AUTO_UPDATE_STATISTICS мають сенс відключати лише тоді, коли база даних у вас дуже велика, і ви боїтеся, що активність зі створення статистики може уповільнити роботу користувачів. У цьому випадку можна робити оновлення статистики вручну, наприклад, у неробочий час.

qAUTO_SHRINK— якщо цей параметр увімкнено, файли баз даних і журналів транзакцій автоматично стискатимуться, повертаючи простір, що не використовується, операційній системі. За замовчуванням цей параметр вимкнено. Для робочих баз даних включення цього параметра може бути дуже шкідливим через зростання фрагментації.

qCONCAT_NULL_YIELDS_NULL— цей параметр іноді створює великі проблеми розробникам та адміністраторам. Якщо його значення встановлено в ON, то злиття звичайного рядкового значення зі значенням типу NULL дасть у результаті NULL. Наприклад, якщо ми зливаємо ім'я та прізвище з незаповненим по-батькові, то на виході вийде значення типу NULL. Якщо значення цього параметра встановлено в OFF (за замовчуванням в SQL Server ), то, як зазвичай, повернуться ім'я та прізвище. Проблема полягає в тому, що за умовчанням підключення OLE DB і ODBC встановлюють на рівні сеансу для цього параметра значення ON . Якщо ви не можете виправляти програму, то один із можливих виходів — створити для стовпця, в якому можуть з'явитися порожні значення, безпечне значення за промовчанням (наприклад, порожнє строкове значення). Для роботи з індексованими уявленнями та індексованими стовпцями значення цього параметра має бути встановлене в ON.

qCURSOR_CLOSE_ON_COMMIT— якщо увімкнути цей параметр (за замовчуванням він вимкнений), то курсор видалятиметься з пам'яті відразу після завершеннятранзакції. В іншому випадку він перебуватиме в пам'яті до закриття з'єднання або до явного видалення курсору користувачем. При включенні цього параметра ми програємо у швидкості виконання користувачем деяких операцій, зате економимо ресурси сервера. Цей параметр можна настроїти на рівні окремого сеансу під час встановлення з'єднання.

qCURSOR_DEFAULT— для цього параметра можна використовувати два значення: LOCAL та GLOBAL (за замовчуванням встановлено значення GLOBAL ). Він визначає, курсори якого типу будуть створюватися за замовчуванням: локальні (видні лише на рівні конкретного пакета, тригера, процедури, що зберігається) або глобальні (видні на рівні всього підключення). Яке значення вибирати в кожному конкретному випадку повністю залежить від розробників. Самим розробникам рекомендується не покладатися на значення цього параметра, а явно визначати у своєму коді курсори потрібного типу.

qDB_CHAINING— цей параметр визначає, чи буде в цій базі даних дозволено участь у ланцюжках володіння (chainingownership) за межами баз даних. За замовчуванням встановлено значення OFF – така участь заборонена. Ланцюжки володінь - це ситуація, яка виникає, коли один і той самий користувач володіє і головним об'єктом (наприклад, таблицею), і похідним (наприклад, уявленням, яке звертається до цієї таблиці). За рахунок ланцюжків володіння такий користувач, надаючи іншому користувачеві права на подання, тим самим неявно надає права на роботу з даними таблиці через це подання.

qNUMERIC_ROUNDABORT- якщо при обчисленні в рамках запиту відбувається втрата точності, і значення цього параметра встановлено в ON, то виникає помилка. За промовчанням у SQL Server для цього параметравикористовується значення OFF. Для можливості роботи з індексованими уявленнями та індексами для обчислюваних стовпців значення цього параметра має бути встановлене в OFF (а не ON, як для попередніх параметрів!).

qPAGE_VERIFY— цей параметр має замінити параметр TORN_PAGE_DETECTION у попередніх версіях SQL Server (параметр TORN_PAGE_DETECTION залишено для зворотної сумісності, але користуватися ним вже не рекомендується). PAGE_VERIFY визначає режим виявлення помилок введення/виводу під час роботи зі сторінками бази даних. Зазвичай такі помилки виникають із двох причин:

  • проблеми з диском (контролером, драйвером контролера тощо)
  • в процесі запису базу даних відключилося харчування. SQL Server працює зі сторінками розміром 8 Кбайт, а операційна система здійснює введення/виведення зазвичай блоками по 512 байт. При відключенні живлення може скластися ситуація, коли сторінка в базі даних записана лише частково. При виявленні такої сторінки підключення, яке до неї зверталося, автоматично закривається, а журнал подій записується помилка з кодом 824.

Для параметра PAGE_VERIFY передбачено три значення.

  • CHECKSUM— це значення встановлено для всіх баз даних користувача за замовчуванням. При використанні цього значення при кожній зміні для сторінки буде розраховуватись контрольна сума та записуватись у заголовок сторінки. Цей режим найкраще виявляє більшість проблем зі сторінками баз даних (особливо дискові проблеми), однак він має дві недоліки: підвищена витрата ресурсів проти двома іншими варіантами і менш якісне, ніж за значення TORN_PAGE_DETECTION , виявлення проблем, що виникають при неповному запису сторінок під час відключенняживлення.
  • TORN_PAGE_DETECTION— замість контрольної суми використовується контрольний біт для кожного блоку (розміром 512 Байт) сторінки даних. Такий режим використовує менше ресурсів і дозволяє краще, ніж режим CHECKSUM , виявляти помилки неповного запису сторінок. Однак при використанні цього режиму всі інші помилки виявляються гіршими. Цей режим за замовчуванням встановлено лише для бази даних master (і змінити його для цієї бази даних не можна).
  • NONE— у цьому режимі не будуть використовуватися ні контрольні суми, ні контрольні біти. Виявлення проблемних сторінок буде утруднено, зате ви виграєте у продуктивності. Цей режим рекомендується використовувати лише тоді, коли базу даних за необхідності можна буде легко відтворити (наприклад, інформація до цієї бази даних надходить за допомогою реплікації).

qQUOTED_IDENTIFIER— цей параметр визначає, чи можна використовувати подвійні лапки для імен об'єктів (таблиць, стовпців тощо). Зазвичай така необхідність виникає, якщо використовується нестандартне ім'я об'єкта (наприклад, що складається із двох слів із пробілом). Однак у стандарті ANSI SQL для таких випадків передбачені квадратні дужки, якими рекомендується користуватися.

За промовчанням для цього параметра в SQL Server 2005 встановлено значення ON - використовувати подвійні лапки можна. Підключення OLE DB і ODBC автоматично встановлюють значення для цього параметра на рівні сеансу в ON . Значення ON також необхідне роботи з індексованими уявленнями чи індексами для обчислюваних стовпців.

qRECURSIVE_TRIGGERS— цей параметр визначає, чи можуть тригери, налаштовані для таблиці, своїми діями викликати повторне спрацювання себе. За замовчуванням дляцього параметра встановлено значення OFF, тобто не можуть. Однак для вашої таблиці може бути налаштована ціла система тригерів, які можуть спричинити спрацьовування один одного не безпосередньо. Щоб заборонити такий варіант, потрібно встановити значення серверного параметра NESTED TRIGGERS .

qTRUSTWORTHY— цей параметр визначає, чи дозволяється об'єктам даної бази (уявленням, користувачам функціям, процедурам, що зберігаються) звертатися до об'єктів за межами даної бази даних (наприклад, до таблиць в іншій базі даних) в режимі імперсонації (інше назва цього режиму – делегування). У режимі імперсонації при зверненні до зовнішнього об'єкта для нього передається інформація про обліковий запис користувача, який підключився до вашої бази даних. Виходить, що права користувача як би проходять через вашу базу даних. З метою безпеки такий режим роботи в SQL Server 2005 за замовчуванням вимкнено на рівні бази даних (параметр TRUSTWORTHY встановлений у OFF).