Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Создание базы работа с ней ошибка Не удалось найти базу данных с идентификатором  [new]
ssa82
Member

Откуда:
Сообщений: 26
SQL server 2014 12.0.5203.0 64x
установлены все обновления.
Процесс:
хранимка внутри которой
удаляется база (выполнено)
Создаётся новая (выполнено)
создаются таблицы (ошибка)
use [ShellData_tmp]
if(not EXISTS(select * from sys.tables where name='indata_text'))
begin
create table dbo.indata_text ( .....

..... база отдаётся клиенту
Сообщение 615, уровень 21, состояние 1, строка 152
Не удалось найти базу данных с идентификатором 65 и именем "65". Возможно, база данных находится в режиме "вне сети". Подождите несколько минут и повторите попытку.

если смотреть в select * from sys.databases
то базы с этим идентификатором в принципе нет
база с которой идёт работа имеет иной идентификатор
работа с ней после ошибки нормальная
если смотреть статус этой базы по имени между созданием базы и выполнением запросов то статус online
но её идентификатор
select DB_ID(@DB_name)
48

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

перезапуск скрипта приводит к тому же, он видимо где то запомнил - быть может старый идентификатор, как его обновить?

причём только что я выполнял эту процедуру и вот она ломается.
помогает только перезапуск sql server.
до такого состояния он доходит раз в пару дней.
15 июн 17, 13:10    [20566650]     Ответить | Цитировать Сообщить модератору
 Re: Создание базы работа с ней ошибка Не удалось найти базу данных с идентификатором  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36687
В разных батчах надо дропать базу/создавать базу/создавать в ней объекты.
15 июн 17, 13:12    [20566662]     Ответить | Цитировать Сообщить модератору
 Re: Создание базы работа с ней ошибка Не удалось найти базу данных с идентификатором  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Полный скрипт пожалуйста создания/удаления БД.
15 июн 17, 13:14    [20566670]     Ответить | Цитировать Сообщить модератору
 Re: Создание базы работа с ней ошибка Не удалось найти базу данных с идентификатором  [new]
ssa82
Member

Откуда:
Сообщений: 26
т.к. имя базы разные то это буквально внутри общей хранимки идёт
exec хранимки которая удаляет
exec хранимки которая создаёт
и дальше
exec('use .....') которые работают с новой базой

т.е. все работы идёт только через exec('') они же изолированы так сказать.
и потом процесс то идёт - за сегодня я уже так собрал около 20 баз, а потом вот ошибка и перезапуск процедуры бесполезно сколько не жди, только рестарт службы.
15 июн 17, 13:16    [20566684]     Ответить | Цитировать Сообщить модератору
 Re: Создание базы работа с ней ошибка Не удалось найти базу данных с идентификатором  [new]
ssa82
Member

Откуда:
Сообщений: 26
exec [ManagmentProcess].dbo.[DB_Drop] @DB_name
	exec [ManagmentProcess].dbo.[DB_Create] @DB_name,'shell_data',@filename


ALTER PROCEDURE [dbo].[DB_Drop] @db_name varchar(255)
AS
BEGIN
	SET NOCOUNT ON;
if(NOT exists(select * from sys.databases where name=@db_name))
	return;
	declare @Query varchar(max)=''
EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = @db_name

set @Query='
ALTER DATABASE ['+@db_name+'] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE'
exec (@Query)

set @Query='
DROP DATABASE ['+@db_name+']'
exec (@Query)

--WAITFOR DELAY '00:00:10' думал пауза поможет но нет
END

ALTER PROCEDURE [dbo].[DB_Create] @db_name varchar(255),@folder varchar(255)='',@filename varchar(255)=''
AS
BEGIN
	SET NOCOUNT ON;
	declare @FolderFile varchar(255)='d:\ControlBase'
	if(@folder='shell_data') set @FolderFile='d:\ShellData'
	if(@filename='')set @filename=@db_name
	declare @Query varchar(max)=''
set @Query='CREATE DATABASE ['+@db_name+']
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'''+@db_name+''', FILENAME = N'''+@FolderFile+'\'+@filename+'.mdf'' , SIZE = 5120KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
 LOG ON 
( NAME = N'''+@db_name+'_log'', FILENAME = N'''+@FolderFile+'\'+@filename+'_log.ldf'' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)'
exec (@Query)

exec('ALTER DATABASE ['+@db_name+'] SET AUTO_CLOSE OFF WITH NO_WAIT')
exec('ALTER DATABASE ['+@db_name+'] SET RECOVERY SIMPLE WITH NO_WAIT')
--WAITFOR DELAY '00:00:10'
exec ('use ['+@db_name+']
DBCC CHECKDB with NO_INFOMSGS')

END


Сообщение было отредактировано: 15 июн 17, 13:21
15 июн 17, 13:19    [20566694]     Ответить | Цитировать Сообщить модератору
 Re: Создание базы работа с ней ошибка Не удалось найти базу данных с идентификатором  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
exec [ManagmentProcess].dbo.[DB_Drop] @DB_name
GO <--
exec [ManagmentProcess].dbo.[DB_Create] @DB_name,'shell_data',@filename
15 июн 17, 13:25    [20566724]     Ответить | Цитировать Сообщить модератору
 Re: Создание базы работа с ней ошибка Не удалось найти базу данных с идентификатором  [new]
ssa82
Member

Откуда:
Сообщений: 26
честно не понял про GO
даже опуская смысл вставить такой код невозможно, он перестаёт воспринимать код после него.
Сообщение 102, уровень 15, состояние 1, процедура CreateInDataMulti, строка 40
Неправильный синтаксис около конструкции "@DB_name".

вставить в exec ('GO') тоже нельзя
вставить в exec('Drop .... GO')
15 июн 17, 13:34    [20566771]     Ответить | Цитировать Сообщить модератору
 Re: Создание базы работа с ней ошибка Не удалось найти базу данных с идентификатором  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Грохнуть и одновременно создать базу не выйдет в рамках одной транзакции не выйдет. Потому и нужно выполнить эти две хранимки разделяя GO. Параметры если что можно продублировать.
15 июн 17, 13:36    [20566788]     Ответить | Цитировать Сообщить модератору
 Re: Создание базы работа с ней ошибка Не удалось найти базу данных с идентификатором  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36687
AlanDenton
Грохнуть и одновременно создать базу не выйдет в рамках одной транзакции не выйдет. Потому и нужно выполнить эти две хранимки разделяя GO. Параметры если что можно продублировать.
Какое отношение GO имеет к управлению транзакциями? Два вызова процедуры не означает, что они выполнятся в одной транзакции. Вызов двух процедур в разных батчах не означает, что они выполняются в разных транзакциях.

Сообщение было отредактировано: 15 июн 17, 13:39
15 июн 17, 13:38    [20566800]     Ответить | Цитировать Сообщить модератору
 Re: Создание базы работа с ней ошибка Не удалось найти базу данных с идентификатором  [new]
ssa82
Member

Откуда:
Сообщений: 26
ок сейчас пересчитываю исходные данные
вставил GO в конец drop и в конец после Create
минут через 20 проведу проверку.
15 июн 17, 13:39    [20566805]     Ответить | Цитировать Сообщить модератору
 Re: Создание базы работа с ней ошибка Не удалось найти базу данных с идентификатором  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
ssa82
ок сейчас пересчитываю исходные данные
вставил GO в конец drop и в конец после Create
минут через 20 проведу проверку.

ради интереса: база Model случаем не AUTO_SHRINK ON
15 июн 17, 13:51    [20566859]     Ответить | Цитировать Сообщить модератору
 Re: Создание базы работа с ней ошибка Не удалось найти базу данных с идентификатором  [new]
ssa82
Member

Откуда:
Сообщений: 26
ради интереса: база Model случаем не AUTO_SHRINK ON
нет False

про GO
вставить внутрь
set @Query='
DROP DATABASE ['+@db_name+']
GO'
exec (@Query)
и в create не получается он ругается при выполнении.
вставить GO просто в текст тоже ругается при обновлении хранимки...

процесс с другой базой идёт без ошибок.
процесс с той базой при этом продолжает падать так же - нет базы 65 которой нет
новая база всегда создаётся с кодом 48 сейчас.
15 июн 17, 14:03    [20566915]     Ответить | Цитировать Сообщить модератору
 Re: Создание базы работа с ней ошибка Не удалось найти базу данных с идентификатором  [new]
ssa82
Member

Откуда:
Сообщений: 26
кстати интересно но
select * from sys.databases order by database_id
заполнено все по порядку до 72 у меня
а вот 65 дырка пропуск
идёт 64 потом 66
15 июн 17, 14:06    [20566931]     Ответить | Цитировать Сообщить модератору
 Re: Создание базы работа с ней ошибка Не удалось найти базу данных с идентификатором  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
ssa82,

если окружение не боевое попробуйте DBCC FREEPROCCACHE
15 июн 17, 14:11    [20566951]     Ответить | Цитировать Сообщить модератору
 Re: Создание базы работа с ней ошибка Не удалось найти базу данных с идентификатором  [new]
ssa82
Member

Откуда:
Сообщений: 26
просто создал базу test
он её дал код 65
и процесс с той косячной базой пошёл.
в чём логика?
он помнил что эта дырка именно для той базы?
при высокой нагрузке одновременно несколько баз попало на создание/удаление
и появилась дырка
заблокировать код создания удаления в монопольный доступ типа мьютекс?
в sql это возможно?
15 июн 17, 14:12    [20566959]     Ответить | Цитировать Сообщить модератору
 Re: Создание базы работа с ней ошибка Не удалось найти базу данных с идентификатором  [new]
ssa82
Member

Откуда:
Сообщений: 26
DBCC FREEPROCCACHE

сейчас такой ошибки нет, поэтому верность любых комбинаций уже не проверить.
как только она опять выплывет я оживлю ветку и проверю этот вариант
15 июн 17, 14:15    [20566974]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить