(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Microsoft SQL Server - вопросы и ответы

Источник: business-process

MS SQL Server администрирование.

ЧАСТЬ 1.

Вопрос:
На локальном 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 объекта, указанного в сообщении.

 



 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 12.01.2011 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Stimulsoft Reports Server Team 10 users
FastReport.Mono Single License
Toad Data Modeler Per Seat License/Maint
erwin Data Modeler Navigator Edition r9.7 - Product plus 1 Year Enterprise Maintenance Commercial
Business Studio 4.2 Professional. Персональная лицензия. Лицензия на 1 месяц.
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Программирование на Microsoft Access
CASE-технологии
OS Linux для начинающих. Новости + статьи + обзоры + ссылки
Программирование в AutoCAD
СУБД Oracle "с нуля"
Corel DRAW - от идеи до реализации
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100