Dimdim SoftWare
Мастерская Dr.dimdim
ГлавнаяПоискНаписать письмо
ГлавнаяМоделированиеПроектированиеТЗРазработкаИнтерфейсСтатьиСсылкиАвтор
Главная > ЧаВО

FAQ: Администрирование MS SQL Server

Автор: НПО "Компьютер", http://www.comp.udmnet.ru/

Вопрос:
На локальном SQL Server 7.0 физические файлы нескольких БД хранятся в каталоге D:\MSSQL7\DATA\. БД разрастаются, на диске начинает не хватать свободного места. Как переместить файлы одной или нескольких БД на другой физический диск (например, в E:\DATA\)?

Ответ:
Допустим, необходимо переместить файлы БД DemoXMB, данные хранятся в файле DemoXMB_Data.MDF, журнал транзакций в DemoXMB_Log.LDF .
Нужно выполнить следующую последовательность действий:
1. Отсоединить файлы БД, выполнив ХП sp_detach_db :
    sp_detach_db 'DemoXMB'
2. Переместить файлы DemoXMB_Data.MDF и DemoXMB_Log.LDF в каталог E:\DATA;
3. Присоединить файлы к БД, выполнив ХП sp_attach_db :
    sp_attach_db @dbname = 'DemoXMB',
                        @filename1 = 'E:\Data\DemoXMB_Data.MDF',
                        @filename2 = 'E:\Data\DemoXMB_Log.LDF'


Вопрос:
Иногда возникает ситуация, когда для пользователя в БД нет соответвующего login на сервере. Через Enterprise Manager такие пользователи не видны. Как увидеть всех список этих пользователей?

Ответ:
Используйте ХП sp_change_users_login с типом действия "Report":
EXEC sp_change_users_login 'Report'
и она покажет все потерянные записи пользователей БД.


Вопрос:
Иногда переменная @@SERVERNAME возвращает значение NULL. В чем проблема и как это исправить?

Ответ:
Скорее всего в таблице master.dbo.sysservers нет записи о текущем сервере. Почему это происходит - не известно. Решить проблему можно выполнив запрос:
   sp_addserver @server = <Имя сервера>, @local = 'LOCAL'


Вопрос:
Пришлось переустановить SQL SERVER 7.0. Backup-ов БД нет, но остались файлы БД. Можно ли их подключить?

Ответ:
Если есть только *.MDF файл, то можно воспользоваться ХП "sp_attach_single_file_db"
Например:
   use master
   EXEC sp_attach_single_file_db @dbname = 'DemoXMB',
                                                @physname = 'c:\mssql7\data\DemoXMB_Dat.mdf'
В этом случае, создастся файл DemoXMB_Log.ldf в том же каталоге размером 1MB и авторасширением.
Если есть *.MDF и *.LDF-файлы, или данные хранятся более чем в одном физическом файле (общее количество подключаемых физических файлов не должно превышать 16-ти), то следует использовать ХП "sp_attach_db"
Например:
   use master
   EXEC sp_attach_db @dbname = 'DemoXMB',
                              @filename1 = 'c:\mssql7\data\DemoXMB_Dat.mdf',
                              @filename1 = 'c:\mssql7\data\DemoXMB_Log.ldf'
Для подключения более 16-ти физических файлов к БД следует использовать команду:
   CREATE DATABASE FOR ATTACH


Вопрос:
На MS SQL 6.5 иногда для базы данных показывает, что свободное место как в данных (Data Space Available), так и в логе отсутствует (Log Space Available), т.е. равно 0.0 MB. При этом что Recalculate (пересчет) и Truncate (усечение лога) не дают никаких результатов. Что нужно сделать в данном случае?

Ответ:
Нужно в ISQL\w на этой БД выполнить команду "dbcc checktable (syslogs)". Потом в окне редактирования базы данных(Edit Database) сделать Truncate (усечение лога) и Recalculate (пересчет).


Вопрос:
При установке MSSQLServer программа установки сообщает что доступное свободное место 2147483 К. Хотя на самом деле места в несколько раз больше (8Г). Почему?

Ответ:
Это ошибка в программе установки MSSQLServer. Не обращайте внимания.


Вопрос:
После установки MS SQL Server 2000 все его утилиты работают нормально, кроме Books Online. При запуске выдается сообщение об ошибке "Не могу окрыть файл sql80.col"

Ответ:
Нужно удалить все файлы hh.dat и hhcolreg.dat на компьютере. А затем переустановить Books Online.


Вопрос:
При смене владельца БД при выполнении команды 'sp_changedbowner sadev' выдается сообщение об ошибке Msg 15110 '"The proposed new database owner is already a user in the database.'. Что сделать чтобы сменить   владельца БД?

Ответ:
Дело в том что в БД уже существует пользователь связанный с логином sadev. Необходимо удалить этого пользователя из БД и повторить операцию по изменению владельца БД.


Вопрос:
При установке MS SQL Server 2000 при выборе сетевых библиотек, почему-то не доступна Multi-Protokol, но доступна библиотека IPX ?

Ответ:
Скорее всего на машине стоит уже SQL 7.0. с установленной сетевой библиотекой Multi-Protokol, поэтому его не дает установить заново, видимо в версии SQL 2000 она не изменилась, тогда как сетевая библиотека IPX изменилась.


Вопрос:
Требуется все таблицы одного владельца (owner) передать другому. Как это можно сделать?

Ответ:
Лучше всего воспользоваться курсором для организации вызова ХП sp_changeobjectowner
-- Объявим переменные
   declare @ObjName varchar(255), @Str varchar(255),
               @OldOwnerName varchar(255), @NewOwnerName varchar(255)
-- Зададим имена старого и нового владельцев
   select @OldOwnerName='Старый владелец',
             @NewOwnerName='Новый владелец'
-- Объявим курсор для прохождения по всем объектам старого владельца
   declare Crs_DelObj   insensitive scroll cursor for
      select so.name
         from sysobjects so, sysusers su
         where so.uid = su.uid
            and su.name = @OldOwnerName
            and so.type in ('V', 'U', 'P')
-- пойдем по курсору и будем менять владельцев
   open Crs_DelObj
   fetch first from Crs_DelObj into @ObjName
   while @@fetch_status<>-1
   begin
      if @@fetch_status<>-2
      begin
         select @Str=ltrim(rtrim(@OldOwnerName))+"."+ltrim(rtrim(@ObjName))
       -- меняем владельца
         exec ("exec sp_changeobjectowner '"+@Str+"', '"+@NewOwnerName+"'")
      end
      fetch next from Crs_DelObj into @ObjName
   end
   go
   close Crs_DelObj
   go
   deallocate Crs_DelObj
   go


Вопрос:
Как переименовать базу данных?

Ответ:
Нужно обладать правами администратора или владельца базы данных, перевести БД в однопользовательский режим, выполнить хранимую процедуру:
sp_renamedb '<старое имя БД>', '<новое имя БД>'
После этого БД можно перевести в многопользовательский режим.


Вопрос:
Как изменить владельца таблицы, ХП и т.д.?

Ответ:
Для изменения владельца БД, необходимо выполнить хранимую процедуру:
sp_changeobjectowner @objname = <имя объекта>, @newowner = 'имя нового владельца'
подключившись при этом к нужной БД.


Вопрос:
Как установить на компьютер одновременно клиентские части трех версий MS SQL Server (6.5, 7.0, 8.0 - 2000)?

Ответ:
Устанавливаете как обычно клиентскую часть версии 6.5, затем в другой каталог - версии 7.0, затем в другой каталог - версии 8.0 (2000). Версия 8.0 полностью заменяет утилиты версии 7.0 и они все успешно работают и с 7-ой версией SQL сервера, однако Profiler версии 8.0 с серверами версии 7.0 работать отказывается. Поэтому в каталоге, куда устанавливали клиентскую часть версии 7.0, нужно заменить файл sqltrace.exe (год его создания 2000) на файл sqltrace.exe, предварительно взятый отсюда же и сохраненный временно в другом месте (год его создания 1998).


Вопрос:
Как в Query Analyzer'е задать БД по умолчанию, чтобы при загрузке Query Analyzer'а каждый раз не выбирать БД?

Ответ:
Query Analazer всегда подставляет базу данных, которая определена по умолчанию для данного пользователя MS SQL Server. Для того чтобы изменить БД по умолчанию обратитесь к администратору MS SQL Server, который установит нужную БД по умолчанию для нужного пользователя MS SQL Server.
Или для своего логина вы можете сами изменить БД по умолчанию. Для этого в Query Analyzer выполните ХП sp_defaultdb, которая имеет два параметра:
   @loginname - имя логина
   @defdb - новая БД по умолчанию


Вопрос:
При генерации скриптов при вставке сообщений об ошибках выдается ошибка:
Server: Msg 15279, Level 16, State 1, Procedure sp_addmessage, Line 92
You must add the us_english version of this message before you can add the 'русский' version.

Ответ:
В Query Analizer заходим в Configure Query Analizer (пункт меню File/Configure), на закладке New conections в разделе Regional settings в опции Change the language of SQL Server system message to: должно стоять Default или English.


Вопрос:
Проблема. Какой-то пользователь внес изменения в справочник, которые имели нехорошие последствия. Конечно все говорят что ничего не делали. Можно ли как-то найти кто и когда это сотворил.

Ответ:
Сам SQL Server не ведет протокол действий пользователей. Все что у него есть - это журнал транзакций, но он используется только для восстановления данных на определенное время, а вот вытащить из него информацию о том, когда была сделана та или иная транзакция - нельзя. Поэтому единственный выход - протокол действий пользователя должно вести прикладное ПО. Это можно реализовать как на клиентской стороне, так и на серверной (с помощью триггеров на изменение таблиц).


Вопрос:
При восстановлении базы данных из BackUp'а на SQL Server 7.0. возникает ошибка:
"Microsoft SQL-DMO (ODBC SQLState:42000)
The backup set holds a backup of a database other than
the existing XB310XMB database.
Backup or restore operation terminating abnormally."
С чем это связано и как можно решить проблему ?

Ответ:
Дело в том, что база в которую восстановливают и база в резервной копии (backup) имееют одно название, но созданы по разному (вызов инструкции CREATE DATABASE с разными параметрами). Т.е. фактически это разные базы данных.
Возможно несколько вариантов решения проблемы:
1. Восстановите резервную копию используя опцию REPLACE инструкции RESTORE. (установка флажка на поле "Force restore over existing database" на закладке "Options" в окне диалога "Restore database")
2. Восстановите резервную копию на БД с другим именем. В данном случаи нужно чтобы вновь создоваемые файлы не существовали и не использовались другой БД.
3. Если у Вас неверная резервная копия, то заново создайте резервную копию с существующей базы данных и восстановить ее.


Вопрос:
В Enterprise Manager настраиваю резервное копирование базы данных (меню Tools -> Backup database…) под Win2000 Server на диск в заданный файл. При инициализации устройства все просходит нормально, и в последующих случаях ручное резервирование тоже проходит успешно, база накапливается. Но не могу задать расписание для резервного копирования -   почему-то не сохраняются данные в свойствах базы, связанные с копированием. Пробовал создать DBMaintainer Plan с той же целью, но опять же график планирования не работает. В чем проблема, как это делают другие?

Ответ:
При задании параметров планового резервирования базы данных (флажок Schedule), происходит создание нового задания (job), которое можно посмотреть через Enterprise Manager (Management -> SQL Server Agent -> Jobs). При этом действительно "...данные в свойствах базы, связанные с плановым резервированием..."   не сохраняются (по понятным причинам - быть может Вы создадите несколько расписаний с разными параметрами архивации). А флажок Schedule предназначен для облегчения задания расписания резервного копирования.
Тоже самое касается и DBMaintainer Plan.


Вопрос:
При выполнении резервного копирования БД (операция backup) в конкретный файл возникает ошибка: "BackupMedium::ReportIoError: write failure on backup device 'D:\MSSQL7\BACKUP\unpxmb.dat'. Operating system error 112(error not found)."   Что она означает и как с ней бороться ?

Ответ:
Эта ошибка значит, что на диске, на котором создается резервная копия БД, нет свободного места для полного бакапа БД.   Operating system error 112 - означает системную ошибку "Недостаточно места на диске" операционных систем WinNT, Win2000.


Вопрос:
Как отобрать у пользователя возможность перехватывать Trace (с помощью утилиты Profiler или аналогичной)?

Ответ:
Отбирать не надо - лучше их не давать изначально, т.е. не создавать пользователей в БД master или, по крайней мере, не давать права на запуск Extendet Stored Procedures xp_trace*.


Вопрос:
При выполнении ХП процедуры MBReindexTbl возникла ошибка Msg.1105 "Can't allocate space for object 6754 in database DemoXMB because the 554 segment is full. If you ran out of space in Syslogs, dump the transaction log. Otherwise, use ALTER DATABASE or sp_extendsegment to increase the size of the segment.". Как ее исправить ?

Ответ:
Эта ошибка происходит, когда MS SQL Server не может распределить пространство для базы данных.   ID объекта, присутсвующее в тексте сообщения указывает, какое пространство не может быть распределено:
• если ID объекта не равно 8, MS SQL Server не может распределить пространство для данных.
• если ID объекта равно 8, MS SQL Server не может распределить пространство для журнала транзакций.
Чтобы исправить эту ошибку нужно увеличить место для данных или журнала транзакций базы данных, в зависимости от ID объекта, указанного в сообщении.


Вопрос:
При запуске фильтра в утилите Profiler (MS SQL 7.0) выдается сообщение об ошибке: "SQL Profiler is unable to connect: cannot obtain registered server information or server is registered to prompt for password which is not supported (SQL Profiler не может осуществить конннект: не может получить информацию о параметрах регистрации сервера или сервер зарегистрирован так, чтобы запрашивать пароль - а это не поддерживается". Что делать?

Ответ:
Возможно в параметрах регистрации SQL сервера (в утилите Enterprise Manager) указана опция Always prompt to for login name and password (Всегда запрашивать имя логина и пароль). Необходимо отключить эту опцию.


Вопрос:
При проверке базы данных (команда DBCC) была найдена ошибка 614 (Msg. 614 A row on page 092345667 was accessed that has an illegal length of 100 in database DemoXMB'). Что это за ошибка и как ее можно исправить?

Ответ:
Эта ошибка происходит, когда идет попытка обращения к строке на странице, фактическая длина которой (строки) больше ожидаемой. Это говорит о том, что имеется проблемы с внутренней структурой базы данных. Прежде чем исправлять эту ошибку, необходимо выполнить инструкции DBCC CHECKDB и DBCC NEWALLOC. Если находятся еще какие-то ошибки, то сначала исправить их. Если нет других ошибок, то нужно определить, какому объекту принадлежит страница (как определить объект по странице см. SQL Server Books Online Chapter 24."Additional Problem Solving Techniques."). Если страница связана с индексом, иногда можно решить проблему, удаляя и пересоздавая индекс. Если это данные не системной таблицы, попытайтесь скопировать полностью данные из таблицы в другую таблицу, удалить таблицу, пересоздать ее и затем скопировать данные назад в таблицу. Если это данные из системной таблицы, то выполнить перенос данных на другую базу данных. Для более подробной информации об этой ошибке см. SQL Server Books Online.
Еще один способ решения проблем, связанных с нарушением внутренней структуры БД - выполнять transfer баз данных в другие базы данных.


Вопрос:
Что будет, если на MS SQL 7.0 в базу данных (БД1) размером 100x100 Мб (данные и журнал транзакций) попытаться восстановить из backup базу данных (БД2) размером 200х200 Мб?

Ответ:
Восстановление пройдет успешно, и размеры базы данных БД1 установятся в 200х200 Мб. Если же размеры базы данных БД1 будут больше, чем у БД2, то произойдет их уменьшение. Таким образом, при восстановлении данных из backup размеры базы данных устанавливают в те, которые были у базы данных находящейся в backup.


Вопрос:
Почему файл со скриптом не полностью загружается в редактор SQL Analyzer (ISQL/W), хотя при просмотре прочими средствами (например, в Far'е) видно его полностью?

Ответ:
Возможно, в теле файла встречается символ конца файла (#27, 0x1B). SQL Analyzer читает файл полностью, но в окно редактора выводит только текст до символа конца файла. Решение: просто удалить этот символ из текста скрипта (он выглядит, как стрелка влево)


Вопрос:
Как узнать, с каким Service Pack установлен MS SQL Server 6.5 или MS SQL Server 7.0?

Ответ:
Для MS SQL Server 6.5 нужно запустить SQL Enterprise Manager, выбрать сервер и открыть окно его свойств (меню Configure.. по правой клавише мыши). В этом окне перейти на закладку Attribute и посмотреть значение параметра ProductVersion.
В выданном результате посмотреть значение поля Character_Value.
Ниже приведена расшифровка этого значения для MS SQL Server 6.5:
6.50.201 Original SQL Server 6.5 release
6.50.213 SQL Server 6.5 with Service Pack 1
6.50.240 SQL Server 6.5 with Service Pack 2
6.50.258 SQL Server 6.5 with Service Pack 3
6.50.281 SQL Server 6.5 with Service Pack 4
6.50.415 SQL Server 6.5 with Service Pack 5
6.50.416 SQL Server 6.5 with Service Pack 5a
Для MS SQL Server 6.5 или MS SQL Server 7.0   выполнить следующую команду в ISQL\w ( Query Analyzer) :
xp_msver ProductVersion.
Ниже приведена расшифровка этого значения для MS SQL Server 7.0:
         7.00.842 SQL Server 7.0 with Service Pack 2
А можно еще проще - в ISQL\w или в MS Query Analyzer выполнить команду:
select @@VERSION
В первой строке показывается номер версии с учетом Service Pack.


Вопрос:
Запускаю SQL Enterprise Manager, открываю БД и пытаюсь удалить таблицу. Но выдается сообщение об ошибке
"Cannot drop the AdminKAS.tmpDoc with object-id 1234434 in database HBBaseXMB, because it doesn't exist in the system catalogs."
Как удалить такую таблицу ?

Ответ:
Чтобы удалить эту таблицу, нужно просто удалить ее из системной таблицы Sysobjects. Например, таким образом:
delete from sysobjects   where name='tmpDoc' and uid=user_id('AdminKAS'). Предварительно необходимо разрешить изменять системные объекты.


Вопрос:
При попытке на MS SQL Servr 7.0 восстановить backup, созданный на другой backup БД, выдается сообщение об ошибке, хотя размеры БД совпадают. Что делать?

Ответ:
При восстановлении в другую БД необходимо в диалоге "Restore database" на закладке "Option" отметь галочку "Force restore over existing database" и в таблице "Restore datavase files as:" в колонке "Restore as" указать пути и имена файлов БД, В КОТОРУЮ происходит восстановление.


Вопрос:
Принес backup БД с другого сервера, но восстановить не могу. Ругает на сортировку. Как узнать какие установки сервера надо задать, чтобы восстановить из backup.

Ответ:
Для успешного восстановления из backup необходимо точное совпадение установок сортировки. Изменить эти установки можно, только перестроив БД master.
Чтобы посмотреть текущие установки можно воспользоваться хранимой процедурой sp_helpsort или sp_configure.
ХП sp_helpsort показывает:
   · Character Set - кодовая страница;
   · Code Page - id   кодовой страница;
   · Sort Order - тип сортировки (словарная или нет, чувствительная к регистру или нет);
   · Characters, in Order - показывает, в каком порядке будут сортироваться символы из набора.
MS SQL Server 7.0 дополнительно имеет характеристики сортировки UNICODE-овых данных (Unicode data sorting):
   · Locale ID - id выбранного Unicode;
   · Case insensitive - нечувствительность к регистру (case sensitive - флажок не установлен);
   · Accent-insensitive - нечувствительность к диакритическому знаку (если не показывается - флажок не установлен);
   · Width insensitive - нечувствительность к ширине (если не показывается - флажок не установлен);
   · Kana type insensitive - нечувствительность к типу Kana (если не показывается - флажок не установлен).
ХП sp_configure показывает:
   · default sortorder id - определяет набор символов, порядок сортировки и кодовую страницу.
MS SQL Server 7.0 дополнительно имеет характеристики сортировки UNICODE-овых данных:
   · Unicode locale id -   id выбранного Unicode;
   · Unicode comparison style - определяет четыре установки сопоставления Unicode.


Вопрос:
При перестроении индексов на сервере MS SQL 6.5 выдается сообщение (№1204) о том, что превышено максимально допустимое количество блокировок. Причем увеличение значения параметра locks в конфигурации сервера не помогает (15000). Как сделать чтобы все было нормально?

Ответ:
Причина, скорее всего, в том, что на сервере MS SQL 6.5 не установлен Service Pack 4. После его установки должно быть все нормально.   MS SQL 6.5 без SP4 не умеет поднимать уровень блокировок, он выполняет их на очень низком уровне и поэтому ему не хватает отведенного количества.


Вопрос:
На SQL Server 7.0. замечено, что одна   таблица может занимать очень много места (например, 50 Mb), но на самом деле в ней мало полей и   записей, т.е. размер не соответствует содержимому. Из-за чего это происходит и как привести размеры таблицы в соответствии с ее содержимым ?

Ответ:
Дело в том, что у SQL Server есть очень нехорошая особенность - он хранит удаленные записи в таблице. Т.е. он не удаляет физически записи из таблицы, а просто помечает их как удаленные. Это сделано для того, чтобы не забивать лог при удалении записей. Поэтому, если из таблицы активно удаляют и добавляют записи по много раз, то она разрастается до неприличия.
Существует три способа привести размеры таблиц в соответствие с их содержимым:
1. Самый лучший, но не самый быстрый способ - это произвести трансфер БД, помимо того, что он приведет в соответствие размеры таблиц, он еще сделает много хороших вещей (переиндексация, обновление статистики и т.д.) и может исправить много ошибок.
2. Использовать инструкцию DBCC SHRINKDATABASE (DemoXMB, 5, NOTRUNCATE) - не очень эффективный способ, но в определенной степени помогает.
3. Использовать специальную ХП.
    Ограничения:
       1. ХП не будет работать, если у таблицы есть IDENTITY поля.
       2. И ее нельзя выполнять на таблицах с ТРИГГЕРАМИ.
    Достоинства:
       1.Скорость выполнения, по сравнению с другими способами.
       2.Возможность выполнять в автоматическом режиме, через задания.
       3.Решение проблемы соответствия размеров на конкретной таблице в БД.
Текст ХП приведен ниже:
            CREATE PROCEDURE MBShrink_table
               @NameTbl varchar(30),   -- имя таблицы (обязательное)
               @DB varchar(30) = null -- имя БД (обязательное)
            AS
            begin
            -- удалим временную таблицу
            execute('
            if exists (select *
                               from sysobjects (nolock)
                               where id = object_id("'+@DB+'..'+@NameTbl+'1")
                                  and sysstat & 0xf = 3)
                           drop table '+@DB+'..'+@NameTbl+'1')
            -- включим опцию вставки записей напрямую
            exec('master..sp_dboption @dbname= "'+@DB+'",@optname="select into/bulkcopy",
                                                   @optvalue ="TRUE"')
            -- перенесем данные во временную таблицу
            exec('select * into '+@DB+'..'+@NameTbl+'1 from '+@DB+'..'+@NameTbl)
            -- очистим оригинал-таблицу
            exec('truncate table '+@DB+'..'+@NameTbl)
            -- перенесем данные обратно
            exec('insert into '+@DB+'..'+@NameTbl+'
                        select * from '+@DB+'..'+@NameTbl+'1')
            -- удалим временную таблицу
            execute('
            if exists (select *
                      from sysobjects (nolock)
                      where id = object_id("'+@DB+'..'+@NameTbl+'1")
                         and sysstat & 0xf = 3)
            drop table '+@DB+'..'+@NameTbl+'1')
            -- отключим опцию вставки записей напрямую
            exec('master..sp_dboption @dbname= "'+@DB+'",@optname="select into/bulkcopy",
                                                   @optvalue ="FALSE"')
            end


Вопрос:
В MS SQL 7.0 появилась назначать несколько шагов (steps) для заданий (jobs), выполняемых по расписанию. Можно ли, задать несколько действий так, чтобы они выполнялись параллельно.

Ответ:
Нет.


Вопрос:
На SQL Server 7.0 не запускается Query Analyser, некорректно работает Enterprise Manager - выдаются сообщения об ошибке в ODBC источнике (некорректная версия драйвера и самого ODBC). Почему это произошло ? Как сделать так чтобы все работало нормально ?

Ответ:
Драйверы ODBC и сам ODBC может "испортить" какая-нибудь другая программа, которая ставилась на сервере. Например, если установить Crystal Reports 6.0, не убрав при   его установке установку ODBC драйверов, то он установит старые драйвера для SQL Server.
Найден пока только один способ, чтобы это исправить. Предварительно нужно сделать backup'ы баз данных и записать их размеры. Переустановить SQL Server 7.0., а затем создать БД с такими же размерами и восстановить их из   backup'ов.


Вопрос:
Как включить/отключить показ системных таблиц в Enterprise Manager в MS SQL 7.0?

Ответ:
Щелкните правой клавишей мыши на имени сервера в Enterprise Manager и выберите Edit SQL Server Registration Properties. Поставьте/снимите метку в окошке напротив надписи Show system databases and objects.


Вопрос:
Пользователь забыл пароль для входа в КАС "Бизнес Люкс". Что делать?

Ответ:
Придется зайти в Enterprise Manager и опустошить там пароль пользователя. После этого пользователю необходимо задать свой пароль через службу паролей.


Вопрос:
При попытке запустить отчет в "КАС Бизнес Люкс" (используется MS SQL Server 6.5) выдается сообщение об ошибке 7134. В чем дело ?

Ответ:
Скорее всего, MS SQL Server 6.5 установлен совместно с Service Pack 3. Необходимо установить Service Pack 4.


Вопрос:
На MS SQL Server 7.0 SP2 существовала БД с владельцем, отличным от sa. В нее восстановил БД принесенную с другого сервера. Теперь эта БД не доступна владельцу. Как вернуть доступ владельцу БД?

Ответ:
Придется запустить Query Analyzer от имени sa и поменять владельца БД командой:
sp_changedbowner <Имя_нового_владельца>
Возможно, придется предварительно удалить всех пользователей из БД командами:
sp_dropuser <Имя_пользователя>


Вопрос:
На MS SQL Server 7.0 восстановил БД, принесенную с другого сервера. Пытаюсь добавить в нее пользователя - говорит, что такой уже есть. Хотя в списке пользователей через Enterprise Manager такого пользователя в БД нет. В чем дело?

Ответ:
Сначала теория. Каждый пользователь в БД свой внутренний код (UID) и еще имеет ссылку на определенный login. Ссылка эта, по сути, представляет некий внутренний код (SUID). Список пользователей в БД привязан к конкретной БД и сохраняется в backup (вместе с SUID login-а!). А SUID login-ов на каждом сервере свои. Таким образом, получается, что пользователь из восстановленной БД ссылается на несуществующий login. А Enterprise Manager в MS SQL 7.0 SP2, в отличие от MS SQL 6.5, не показывает пользователей, для которых потеряна ссылка на login. Чтобы исправить положение, необходимо удалить пользователей в восстановленной БД с помощью команды:
sp_dropuser <Имя пользователя>.
Узнать полный список пользователь в БД можно, выполнив команду:
select name from sysusers where suid is not null


Вопрос:
Как изменить владельца БД?

Ответ:
Для изменения владельца БД, необходимо выполнить хранимую процедуру:
sp_changedbowner <имя нового владельца>
подключившись при этом к нужной БД.
Небольшое замечание - новый владелец не должен присутствовать в БД как ее пользователь


Вопрос:
После загрузки сервера некоторые БД оказались помеченными как suspect. Что случилось и как можно вернуть эти БД? Использовался MS SQL Server 6.5.

Ответ:
Часто такое бывает, когда SQL-сервер теряет расположение файлов, в которых размещены database devices. Причем происходит так, что SQL-серверу достаточно потерять путь dat-файлам только один раз - он сразу помечает БД как suspect. После этого, даже если вернуть прежние пути к файлам, база данных будет помечена как suspect. Потеря файла может произойти, например, по следующим причинам:
• были переименованы (удалены) каталоги и/или файлы;
• изменились логические буквы разделов дисков. Такое может произойти, например, когда на сервер устанавливается новый HDD. В этом случае обычно буквы дисков, начиная с D: меняются, а т.к. MSSQLServer автоматически загружается, то он теряет файлы.
Для исправления ситуации необходимо восстановить пути к файлам, в которых размещались database devices (не путать с backup!). После этого в БД master необходимо создать хранимую процедуру sp_resetstatus. Текст этой процедуры можно найти в SQL Server Books Online, поискав статью "Resetting the Suspect Status".
Перед использованием этой ХП необходимо разрешить прямое изменение системных таблиц:
use master
go
sp_configure 'allow updates',1
go
reconfigure with override
go
Для сброса признака suspect выполняем в БД master ХП sp_resetstatus:
sp_resetstatus 'DataBaseName'
go
А теперь запретим прямое изменение системных таблиц:
sp_configure 'allow updates',0
go
reconfigure with override
go
Теперь можно перезагрузить SQL Server. Если после перезагрузки состояние suspect не исчезло - придется восстанавливать из backup :(


Вопрос:
Возникла ошибка 'Stored procedure '' not found'. Что делать?

Ответ:
Это часто бывает после изменения структуры таблицы или после неудачного перегенерирования ХП и триггеров. Надо перегенерировать триггеры и ХП.


Вопрос:
Почему при запуске Performance Monitor на Windows NT Server в списке контролируемых объектов ничего нет, или есть только по SQL Server-у?

Ответ:
Виноваты   Regional   Settings   и   отсутствие   пользователя probe.   Поподробнее -   SQL   Server   для слежения   за своей работой   использует   пользователя   probe,   БД по умолчанию (default)   для которого   должна быть   master. Если   такого пользователя нет,   то объекты SQL   Server не показываются. Объекты   Windows   NT   могут   не   показываться по следующей причине - возможно   в   Control   Panel->Regional Settints установлено Russian. Исправить можно так. Ставим Russian и включаем флажок   "Set as system   default locale". Нажимаем Ok (здесь   может попросить перезагрузиться   - согласимся с ней). После перезагрузки   идем туда   же и   ставим Englidh (United States), но флажок "Set as system default locale" должен быть выключен. В результате у нас установлены русские   шрифты, можем писать   по-русски, а Performance Monitor работает.

Вверх

<<Назад

Главная| ИС.. | Моделирование | Проектирование |ТД | Разработка | Интерфейс | Статьи | Ссылки | Автор
DimDim SoftWare Мастерская Dr. dimdim Copyright 2003-2004
Администратор info-system@mail.ru
Последнее обновление 26-Дек-2003