После докомпиляции тестовой базы не могу зайти в рабочую

Администрирование баз данных (Pervasive.SQL, MS SQL, Oracle, утилита Support)

Модераторы: m0p3e, edward_K, Модераторы

LexPV
Новичок
Сообщения: 28
Зарегистрирован: 01 апр 2008, 07:42
Откуда: Хабаровск
Контактная информация:

После докомпиляции тестовой базы не могу зайти в рабочую

Сообщение LexPV »

Ситуация следующая:

Попытался сделать тестовый переход на Галактику 9.1. В новую базу Gal910 восстановил последний бэкап рабочей базы Gal810 (на том же сервере MS SQL Server 2000), отключил Protect и Journal, очистил журнал, удалил хранимые процедуры с префиксами DT, EQ и т. д. Настроил alter.cfg на базу Gal910 и запустил dicom.bat. Придя на следующий день, обнаружил что докомпиляция закончилась ошибкой. В alter.log последние строки:

17:14:01 │ Информация: Изменение структуры таблицы "SPSOPR" (стр.191, поз.1 в LOT\ALTER.LOT)
│ #info Изменение структуры таблицы "SPSOPR"
│ ^
│ Содержимое стека подключаемых файлов:
│ C:\GAL\Alter810-91\Lot\Start.lot(11)
12:30:42 │ Ошибка: Попытка изменения таблицы SPSOPR завершилась неудачно.
│ Внутренняя ошибка интерфейса доступа к базе данных. Подробности в ms70drv.log (стр.235, поз.2 в LOT\ALTER.LOT)
│ );
│ ^
│ Содержимое стека подключаемых файлов:
│ C:\GAL\Alter810-91\Lot\Start.lot(11)

В ms70drv.log :

29.03.2014 17:27:15 [SUPERVISOR]:
ALTER TABLE T$SPSOPR ALTER COLUMN F$KOLGRM DECIMAL(31,15) NOT NULL
29.03.2014 17:27:15 [SUPERVISOR]:
42000: [Microsoft][ODBC SQL Server Driver][SQL Server]The log file for database 'Gal910' is full. Back up the transaction log for the database to free up some log space.
01000: [Microsoft][ODBC SQL Server Driver][SQL Server]The statement has been terminated.

Посмотрев лог-файл базы Gal910 (Gal910Log.dat), увидел что он вырос более чем на 100 Гб (притом что исходная база весила 90), что привело к заполнению диска.
После восстановления базы Gal910 из бэкапа Gal810 (чтобы освободить место на диске) перезапустил MS SQL Server и попробовал зайти в Галактику 8.1 в рабочую базу.
При запуске как supervisor выдает ошибку и пишет в ms70drv.log:

30.03.2014 13:17:20 [SUPERVISOR]:
28000: [Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user 'SUPERVISOR'.
30.03.2014 13:17:20 [SUPERVISOR]:
[NAPSrv]: Error call to SQL server. See details in application event log on MSSQL server

В системном логе выдает две ошибки:

NAPServer => Error code (0): 22001: [Microsoft][ODBC SQL Server Driver]String data, right truncation
NAPServer => Error code (997): RegisterBadLogin5

При запуске как пользователь выдает ошибку и пишет в ms70drv.log:

30.03.2014 13:24:02 [MOL]:
28000: [Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user 'MOL'.

Такая же ситуация при попытке войти в тестовую базу, с которой вообще ничего не происходило.

Напсервер для 9.1 установлен заранее и работал с 8.1 без проблем. Его переустановка проблему не решила.
LexPV
Новичок
Сообщения: 28
Зарегистрирован: 01 апр 2008, 07:42
Откуда: Хабаровск
Контактная информация:

Re: После докомпиляции тестовой базы не могу зайти в рабочую

Сообщение LexPV »

Один вопрос снимается, рабочую базу запустил. В EM отключил Protect и в Support сделал безусловный пересчет прав. Но все равно хотелось бы узнать, что за фигня произошла при докомпиляции и как она ухитрилась затронуть рабочую базу, которой вообще не должна была касаться.
zeha_t
Новичок
Сообщения: 25
Зарегистрирован: 09 сен 2013, 16:59

Re: После докомпиляции тестовой базы не могу зайти в рабочую

Сообщение zeha_t »

Скорее всего вы что-то напутали при настройке...может права не в той базе отключили, может думали что в той 8-)
Если есть возможность, разверните чистую девятку на отдельном сервере, создайте базу пустую со словарём от 8-ки, туда залейте бэкап от gal810, потом докомпильните и настройте клиенты девятки на "докомпильнутую" базу...следите за ростом ЛОГА и за ростом базы tempDB, она может увеличиться в размере при докомпиляции и заполнить диск, тогда опять процесс встанет.
LexPV
Новичок
Сообщения: 28
Зарегистрирован: 01 апр 2008, 07:42
Откуда: Хабаровск
Контактная информация:

Re: После докомпиляции тестовой базы не могу зайти в рабочую

Сообщение LexPV »

К сожалению, такой возможности нет. MS SQL 2000 только на одном сервере, на других другие версии, да и заняты они другими системами. Никто не даст экспериментировать с чужими серверами. Насчет ошибки в настройках - все настройки в файле asql.cfg остались как были, кроме настроек на базу, ключ и лицензионный файл. Впрочем, могу привести содержимое файла:

! Пример настройки для MS-SQL:
[DataBase]
DataBaseDriver= ms70drv.DLL // драйвер
DataBaseName=Gal910 // имя исходной базы данных
[SQLDriver]
SQLServer=ncacn_ip_tcp:SIGMA[1997] // имя SQL-сервера

! Пример настройки для Oracle:
! [DataBase]
! DataBaseDriver= ora90drv.DLL // драйвер
! DataBaseName=Gal810 // имя схемы исходной базы данных
! [SQLDriver]
! SQLServer=orc1 // SID

! Пример настройки для Pervasive.SQL
! [database]
! databasename=C:\12.07.2013\BD_Galaktika\PSQL_DB_2012
! [SQLDriver] // раскомментируйте эти строки, если вы при работе в Галактике
! FullLoginName=On // и Support используете длинные имена логинов

vip.MSinCompatibleTables=*
Compilers.ErrorLevel=3
Compilers.WriteListing=ON
System.FullSQL=On
System.AcceptDictVersion=52

! Создавать таблицы
Dicom.BuildTables=OFF
! Не выдавать ошибку если длина имени файла больше 8-ми символов
Dicom.SkipFileNameLengthErrors=On

// Размер имени поля в DBF 24 символа
[Lot]
DBFFieldNameSize=24

[Login]
UserName=supervisor

[HardwareKey]
SharedPath=\\SIGMA\HWDIR

[LicParam]
LicFileName = \\SIGMA\Gal810\EXE\LICENSE.LIC

Перепутать базу, где отключал Protect и Journal не мог, проверил и перепроверил.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5185
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: После докомпиляции тестовой базы не могу зайти в рабочую

Сообщение edward_K »

Вам надо было проанализировать, что увеличилось. Возможно следует поставить в агент задачу по периодическому сжатию лога.
Насчет 2000 SQL - давно пора обновить на более свежий (2008 официально поддерживается, 2012 работает, но требует пару правок в драйвере в 810) . В любом разе конвертацию лучше делать на тестововм серваке - дабы не положить рабочий.
zeha_t
Новичок
Сообщения: 25
Зарегистрирован: 09 сен 2013, 16:59

Re: После докомпиляции тестовой базы не могу зайти в рабочую

Сообщение zeha_t »

LexPV...
Факт остаётся фактом - рабочая база "легла", а это не есть хорошо... :razz:
Уважаемый edward_K прав, нужно делать на отдельном сервере, чтоб в идеале, дабы не попортить и не запутаться где там восьмёрка и девятка, и прочее.

Если всё-таки склонировать сервер восьмёрки или поднять новый - нет возможности, то тогда проверьте всё ещё раз и снова запускайте, следите за логом, за tempdb, урезайте лог в крайнем случае, создайте ещё один файл лога на другом диске где место есть (можно и на горячую в ходе докомпиляции).
Удачи. Будут вопросы, пишите, помогу на скоко могу :razz:
vist
Сообщения: 15
Зарегистрирован: 11 апр 2006, 15:01
Откуда: Penza city

Re: После докомпиляции тестовой базы не могу зайти в рабочую

Сообщение vist »

edward_K писал(а):Насчет 2000 SQL - давно пора обновить на более свежий (2008 официально поддерживается, 2012 работает, но требует пару правок в драйвере в 810)
А что за пара правок в драйвере???

У меня докомпиляция прошла нормально, все работает, НО после включения протекта никто не может войти ни в сапорт, ни в Галактику. :cry:
Правда при включении протекта генерится ошибка :-)
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5185
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: После докомпиляции тестовой базы не могу зайти в рабочую

Сообщение edward_K »

Ищите :). ms70drv.drv - дублировать свои мессаги или искать ссылки на них мне лень.
А вот про ошибку при влключении протекта можно и поподробней написать - мож мысль какая и придет.
Опять же в ms70drv.log много чего написано. Возможно вы забыли указать FullloginName или настроить ODBC
Собственно корректность логина там можно и проверить. Ну и про логи SQL тоже не забываем.
Часто бывает, что приходится пароль в MSSQL перебивать(он должен совпасть с тем что в базе лежит) и после этого пользователь
может попасть в галактику.
vist
Сообщения: 15
Зарегистрирован: 11 апр 2006, 15:01
Откуда: Penza city

Re: После докомпиляции тестовой базы не могу зайти в рабочую

Сообщение vist »

edward_K писал(а):А вот про ошибку при влключении протекта можно и поподробней написать - мож мысль какая и придет.
Переход: ОС с Windows server 2003R2 на Windows server 2012
MS SQL c 2008 на 2008R2

Порядок перехода по инструкции «Для перемещения базы данных на другой сервер
MS SQL Server 2005/2008 необходимо выполнить следующие действия»:

Backup на старом сервере
Установка на новом сервере Галактики(т.к. нужен NAP) +база Russia(убедится что все работает)
Restore рабочей базы на новом сервере под другим именем
Докомпиляция восстановленной базы
Подключение докомпилированной базы согласно инструкции
П15.Галочку безусловного пересчета прав при расчете прав поставил


При включении Protect получаю сообщение об ошибке:
Внутренняя ошибка интерфейса доступа к базе данных. Подробности в ms70drv.log
Ошибка изменения статуса системы разграничения прав!

Содержимое ms70drv.log:

01.04.2014 16:27:43 [NEWUSER]:
Используется SQL Server ODBC Driver 06.02.9200 Программа может работать некорректно

01.04.2014 16:28:08 [NEWUSER]:
[NAPSrv]: Error call to SQL server. See details in application event log on MSSQL server

В журнале MS SQL чисто

В журнале приложений Windows 3 ошибки

Имя журнала: Application
Источник: NAPServer$ATRON_GALAXY
Код события: 1

1. NAPServer$ATRON_GALAXY => Error code (0): ModifyAtlUser BUX14,(null),цз |(Яф P 'vw43,-1,0,(null)

2. NAPServer$ATRON_GALAXY => Error code (0): 42000: [Microsoft][ODBC SQL Server Driver][SQL Server]Незакрытые кавычки в конце символьной строки "".
42000: [Microsoft][ODBC SQL Server Driver][SQL Server]Неправильный синтаксис около конструкции "vw43".

3. NAPServer$ATRON_GALAXY => Error code (0): exec ModifyAtlUser ?,?,?,?,?,?


Без Protect-а все работает и запускается на восстановленной базе!!!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5185
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: После докомпиляции тестовой базы не могу зайти в рабочую

Сообщение edward_K »

хм
смущает
SQL Server ODBC Driver 06.02.9200 - вы какой драйвер то указали в ODBC?
У меня кажет 06.01.7601 - Sql Server.
Есть еще SQL Native Client - с ним могут быть проблемы.
Либо naps на серваке древный + ms70drv.dll
Ну и ругнулось на конкретного зверя - нет ли каких то странностей с ним?
Он первый по какому то ключу? По atl_nrec или loginname
Что за vw43?
Можно попробовать посмотреть процедуру ModifyAtlUser - что пихается в этот параметр?
А вообще для письма в ТП хватит.
zeha_t
Новичок
Сообщения: 25
Зарегистрирован: 09 сен 2013, 16:59

Re: После докомпиляции тестовой базы не могу зайти в рабочую

Сообщение zeha_t »

vist писал(а):
edward_K писал(а):А вот про ошибку при влключении протекта можно и поподробней написать - мож мысль какая и придет.
Переход: ОС с Windows server 2003R2 на Windows server 2012
MS SQL c 2008 на 2008R2

Порядок перехода по инструкции «Для перемещения базы данных на другой сервер
MS SQL Server 2005/2008 необходимо выполнить следующие действия»:

Backup на старом сервере
Установка на новом сервере Галактики(т.к. нужен NAP) +база Russia(убедится что все работает)
Restore рабочей базы на новом сервере под другим именем
Докомпиляция восстановленной базы
Подключение докомпилированной базы согласно инструкции
П15.Галочку безусловного пересчета прав при расчете прав поставил
.
.
.
Без Protect-а все работает и запускается на восстановленной базе!!!
Когда делали по инструкции «Для перемещения базы данных на другой сервер
MS SQL Server 2005/2008 - пользователей из таблицы users удаляли? Если да, то всех?
vist
Сообщения: 15
Зарегистрирован: 11 апр 2006, 15:01
Откуда: Penza city

Re: После докомпиляции тестовой базы не могу зайти в рабочую

Сообщение vist »

edward_K писал(а):хм
смущает
SQL Server ODBC Driver 06.02.9200 - вы какой драйвер то указали в ODBC?
У меня кажет 06.01.7601 - Sql Server.
Есть еще SQL Native Client - с ним могут быть проблемы.
Либо naps на серваке древный + ms70drv.dll
Ну и ругнулось на конкретного зверя - нет ли каких то странностей с ним?
Он первый по какому то ключу? По atl_nrec или loginname
Что за vw43?
Можно попробовать посмотреть процедуру ModifyAtlUser - что пихается в этот параметр?
А вообще для письма в ТП хватит.
ODBC Driver родные windows 2012
Про SQL Native Client - я знаю, что с ним не работает, хотя пора бы
NAP не может быть древним - т.к. ставилось вчистую с дистрибутива 91
vw43 - зверь реально неизвестный - такого пользователя нет
ТП пока молчит :-(
vist
Сообщения: 15
Зарегистрирован: 11 апр 2006, 15:01
Откуда: Penza city

Re: После докомпиляции тестовой базы не могу зайти в рабочую

Сообщение vist »

zeha_t писал(а):Когда делали по инструкции «Для перемещения базы данных на другой сервер
MS SQL Server 2005/2008 - пользователей из таблицы users удаляли? Если да, то всех?
Пользователей из таблицы users удалил всех, кроме одного NewUser
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5185
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: После докомпиляции тестовой базы не могу зайти в рабочую

Сообщение edward_K »

В Stored Procedure вашей базы

Код: Выделить всё

USE [galacf]
GO
/****** Object:  StoredProcedure [dbo].[ModifyAtlUser]    Script Date: 04.04.2014 9:07:07 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[ModifyAtlUser]
 @login sysname,
 @nlogin sysname = null,
 @pwd varchar(25) = null,
 @asadm bit = null,
 @drop_unused_login bit = null,
 @grp sysname = null

as begin

if @login is null return

if @nlogin is null or @nlogin=@login begin
 declare @r int
 exec @r=CreateAtlUser @login, @pwd, @asadm, @grp
 return @r
end

declare @ntype char(1) = case when charindex(char(92),@nlogin)=0 then 'S' else 'U' end

if @ntype='S' begin
 exec CheckAtlUserName @nlogin
 if @@error > 0 return
end

if @drop_unused_login is null set @drop_unused_login=0

declare @nsid varbinary(85),
        @nltype char(1),
        @ndbname sysname,
        @npwdok int,
        @npid int,
        @nuname sysname,
        @nutype char(1),
        @nuschm sysname,
        @nulogin sysname,
        @nubad bit

exec GetAtlUserInfo @nlogin, @pwd, @nsid out, @nltype out, @ndbname out, @npwdok out, @npid out, @nuname out, @nutype out, @nuschm out, @nulogin out, @nubad out

declare @type char(1) = case when charindex(char(92),@login)=0 then 'S' else 'U' end,
        @sid varbinary(85),
        @ltype char(1),
        @dbname sysname,
        @pwdok int,
        @pid int,
        @uname sysname,
        @utype char(1),
        @uschm sysname,
        @ulogin sysname,
        @ubad bit

exec GetAtlUserInfo @login, @pwd, @sid out, @ltype out, @dbname out, @pwdok out, @pid out, @uname out, @utype out, @uschm out, @ulogin out, @ubad out

declare @use_nlogin bit = case when @drop_unused_login=0 or @type='U' or @ntype='U' or @sid is null /*or @ltype<>@type or @ubad=1*/ then 1 else 0 end

declare @use_nuser bit = case when @pid is null or @ubad=1 or @type<>@ntype then 1 else 0 end

if @use_nlogin=1 and @nubad=1 begin
 raiserror ('В БД к логину %s привязан некорректный юзер',11,1,@nlogin)
 return
end

declare @rtype char(1)

if @grp is not null begin
 select @rtype=r.type from sys.database_principals r where r.name=@grp
 if coalesce(@rtype,'R')<>'R' begin
  raiserror ('''%s'' has bad type. Cure this',11,1,@grp)
  return
 end
end

if @use_nlogin=1 begin

 if @drop_unused_login=1 and @sid is not null and @ltype=@type and @ubad<>1
  begin try
   exec ('drop login ['+@login+']')
  end try
  begin catch
  end catch

 exec ValidateAtlLogin @nlogin, @dbname, @ntype, @npwdok, @pwd
 if @@error > 0 return

end else begin

 if @nsid is not null begin
  exec ('drop login ['+@login+']')
  if @@error>0 return
 end

 exec ValidateAtlLogin @login, @dbname, @type, @pwdok, @pwd, @nlogin
 if @@error > 0 return
end

if @use_nuser=1 begin

 if @pid is not null
  begin try
   exec ('drop user ['+@uname+']')
  end try
  begin catch
  end catch

 if @npid is null begin
  exec ('create user ['+@nlogin+'] for login ['+@nlogin+'] with default_schema=dbo')
  if @@error > 0 return
 end else if @nuschm<>'dbo' begin
  exec ('alter user ['+@nlogin+'] with default_schema=dbo')
  if @@error > 0 return
 end
end else begin

 if @nuname=@nlogin begin
  exec ('drop user ['+@nuname+']')
  if @@error > 0 return
 end

 exec ('alter user ['+@login+'] with name=['+@nlogin+'],login=['+@nlogin+'],default_schema=dbo')
 if @@error > 0 return
end

declare @newlogin bit = case when @use_nlogin=1 and @nsid is null then 1 else 0 end,
        @newuser bit = case when @use_nuser=1 and @npid is null then 1 else 0 end,
        @newgrp bit = case when @rtype is null then 1 else 0 end
exec ValidateAtlRoles @nlogin, @asadm, @newlogin, @newuser, @grp, @newgrp
if @@error > 0 return

return 1
end

Видимо пароль не воспринялся. Проверьте все таки версию напса. Да и про кодировку инстанса и базы не забудьте.
vist
Сообщения: 15
Зарегистрирован: 11 апр 2006, 15:01
Откуда: Penza city

Re: После докомпиляции тестовой базы не могу зайти в рабочую

Сообщение vist »

edward_K писал(а): Видимо пароль не воспринялся. Проверьте все таки версию напса. Да и про кодировку инстанса и базы не забудьте.
Чей пароль не воспринялся :-)
Попытки под другой учеткой админа тоже неудачны... :-(
NAP версия 5.5.12.0
Сортировка сервера Cyrilic_General_CI_AS
Сортировка базы Cyrilic_General_CI_AS
Ответить