SQL Server у запитаннях та відповідях, MS SQL Server, Бази даних, статті

WINDOWS 2000 MAGAZINE

Карен Уоттерсон незалежний журналіст, редактор і консультант з клієнт-серверних систем і сховищ даних. Їй можна написати за адресою karen_watterson@msn.com.
Брайан Моран президент групи користувачів і директор за технологіями СУБД Spectrum Technology Group. Має сертифікати MCSE, MCSD і MCT. Йому можна написати за адресою brian@spectrumtech.com.

В: Я встановив SQL Server 7.0, але коли я запускаю Enterprise Manager, я не бачу баз даних master, model та msdb. Крім того, я не бачу системних таблиць в користувацьких базах даних. У чому причина?

В: Ви вказали SQL Server не відображати системні об'єкти. Клацніть правою кнопкою миші на імені сервера в Enterprise Manager і виберіть Edit SQL Server Registration Properties. Поставте позначку у віконці навпроти напису Show system databases and objects.

У SQL Server 7.0 передбачена зручна функція, що дозволяє включити або відключити відображення системних об'єктів і таблиць. Однак на наш погляд, вона могла б бути більш гнучкою. Зокрема, можна було б зробити так, щоб користувачі могли бачити певні системні об'єкти, наприклад таблицю sysobjects.

В: Через особливості типу datetime в SQL Server 6.5 утруднені арифметичні дії над датами і їх форматування. Чому в SQL 7.0 Microsoft не усунула цей недолік і не додала функції начебто LAST_DAY (останній день місяця) і NEXT_DAY (наступний день тижня)?

В: Ми згодні, що працювати з типом datetime важко. Зокрема, в SQL Server для виконання простих арифметичних дій над датами (наприклад, для додавання до заданої датою декількох днів), доводиться користуватися функцією DATEPART (). Однак при внесенні змін до основних типи даних можуть виникнути серйозні проблеми з зворотною сумісністю. У SQL Server 7.0 операції з датами стало здійснювати дещо легше. Як приклад наведемо наступний SQL-код:

DECLARE @datevalue datetime
SELECT @datevalue = "1/1/99"
PRINT "Додамо 5 діб"
SELECT @datevalue + 5
PRINT "Тепер додамо 5.25 доби (або 5 діб 6 годин)"
SELECT @datevalue + 5.25
Його виконання на SQL Server 7.0 призводить до таких результатів: z
Додамо 5 діб
1999-01-06 00:00:00.000
Тепер додамо 5,25 доби (або 5 діб 6 годин)
1999-01-06 06:00:00:00.000

Як видно, SQL Server 7.0 дозволяє додавати час до заданої датою (у добі) за допомогою оператора складання (+). Крім того, для виконання тієї ж операції можна скористатися командою T-SQL DATEADD, хоча на наш погляд, з оператором складання працювати простіше.

Крім того, згадки заслуговує функція GETDATE (). Нею можна користуватися для виведення поточної дати і часу в звітах, а також при порівняннях і для датування результатів контрольних перевірок. Крім того, GETDATE () можна користуватися як значення за умовчанням при введенні даних.

В: Для з'єднання системи на базі SQL Server 6.5 з системою на основі SQL Server 7.0 (я володію правами системного адміністратора) я випробував наступний метод. На системі з SQL Server 7.0 я виконав команду sp_addlinkedsrvlogin. Для створення однакового набору параметрів входу на обох серверах я послідовно присвоїв @ useself значення FALSE і TRUE. Потім я виконав sp_addlinkedserver і оновив каталог збережених процедур на системі з SQL Server 6.5. Однак при спробі виконати розподілений гетерогенний запит я отримав таке повідомлення про помилку:

В: Найкращий шлях усунення цієї проблеми – переглянути кожен крок, розібратися, що робить SQL Server, і постаратися зрозуміти, де помилка. В даному випадку ви, можливо, не розібралися з новою для SQL Server функцією пов'язаних серверів; між тим, у процесів виконання розподілених гетерогенних запитів та запитів більш звичних видів є чимало спільних етапів.

Провести діагностику даної проблеми без доступу до серверів нелегко, але в подібних випадках причину нерідко слід шукати в конфігурації NetLib або в конфліктах користувальницьких прав на рівні системи безпеки самої NT. Щоб спростити розгляд проблеми, назвемо сервер, що здійснює запит, , А пов'язаний сервер – . Наведене повідомлення про помилку говорить про те, що використовують з'єднання Named Pipes, і що SQL Server 7.0 не бачить системи з SQL Server 6.5 в мережі.

Для успішного виконання розподіленого запиту на обох серверах повинен працювати компонент Named Pipes. Крім того, користувач, який здійснює запит, повинен мати право доступу до сервісу NT Server, працює на фізичній машині з TargetServer. При інсталяції SQL Server компонент Named Pipes встановлюється за умовчанням, тому ми припускаємо, що ця важлива частина NetLibs встановлена ​​на обидві системи, і причина проблеми не в ній.

Якщо причина не в Named Pipes, то в проблема, можливо, в профілі користувача, від імені якого здійснюється запит до TargetServer. Запит здійснюється від імені користувача, по реєстрації якого на SourceServer був запущений сервіс MSSQLServer. Таким чином ми можемо звузити коло можливих джерел проблеми до двох: або MSSQLServer працює на SourceServer в профілі користувача LocalSystem, який не має права доступу до мережі; або MSSQLServer був запущений користувачем, не володіють правом доступу до сервісу NT Server, що працює на TargetServer.

В даному випадку сервіс MSSQLServer запущений в профілі користувача LocalSystem. Щоб вирішити проблему, вам необхідно при завантаженні увійти в систему від імені користувача, який має дозвіл на доступ до віддалених машин.

В: Я скористався входять до складу SQL Server 7.0 майстром створення комплектів сервісів перетворення даних (Data Transformations Services, DTS). Для сполук я зберіг імена, запропоновані мені за замовчуванням, але я тепер хочу змінити їх, надавши їм більш описовий характер. Як це зробити?

В: DTS і майстер створення комплектів DTS – чудові нові функції SQL Server. Однак вони мають ряд дрібних, але неприємних недоліків, таких як неможливість перейменувати з'єднання. На щастя, це обмеження можна обійти.

Припустимо, наприклад, ви створили простий комплект, який експортує дані з таблиці authors в базі даних pubs в двовимірний файл, і ви не забезпечили комплект документацією. Для простоти ви зберегли імена сполук, запропоновані вам за замовчуванням джерелом OLE DB, на якому вони базуються. Іншими словами, ці імена практично нічого не говорять про джерело з'єднання. Коли ви завершили роботу над комплектом, ваш начальник зажадав від вас, щоб назви сполук відповідали прийнятим в компанії правил призначення імен.

Екран 1: Створення нового з'єднання

Вирішити завдання, здавалося б, просто – перейменувати з'єднання. Проте майстер створення комплектів DTS цього зробити не дозволяє. Найпростіший вихід з положення – скористатися таким прикладом для створення нового з'єднання.

Спочатку клацніть правою кнопкою миші на назві з'єднання і виберіть Properties. Потім у показаному на екрані 1 діалозі Connection Properties виберіть New Connection. Введіть у текстовому вікні New Connection нову назву з'єднання і натисніть Оk. Система спитає "чи хочете ви, щоб задані вами раніше перетворення при створенні даного з'єднання були скинуті?" Натисніть No. Натисніть No ще раз у відповідь на наступне питання і процес перейменування буде завершено.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*