powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как гарантировано переименовать таблицу?
7 сообщений из 7, страница 1 из 1
Как гарантировано переименовать таблицу?
    #40131061
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет, во время работы расчета выполняется вот такой шаг:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
ALTER DATABASE [db_Matrix] SET SINGLE_USER WITH ROLLBACK IMMEDIATE

if exists (select 1 from sys.tables where name = 'tblSuperMain_2') begin


	if exists (select 1 from sys.views where name = 'tblSuperMain') DROP VIEW [dbo].[tblSuperMain];
	if exists (select 1 from sys.tables where name ='tblSuperMain') DROP TABLE [dbo].[tblSuperMain];

	exec sp_rename @objname = 'dbo.tblSuperMain_2' , @newname =  'tblSuperMain';

	EXEC sp_rename N'dbo.PK_tblSuperMain_2', N'PK_tblSuperMain', N'OBJECT';  

	EXEC sp_rename N'dbo.tblSuperMain.IX_SMA_BookID_2', N'IX_SMA_BookID', N'INDEX';  

	EXEC sp_rename N'dbo.tblSuperMain.IX_PartnerID_2', N'IX_PartnerID', N'INDEX'; 

	EXEC sp_rename N'dbo.tblSuperMain.IX_SMA_BookID_PartnerID_2', N'IX_SMA_BookID_PartnerID', N'INDEX';  

end

ALTER DATABASE [db_Matrix] SET MULTI_USER;



Но иногда возникает ситуация, когда после применения

Код: sql
1.
ALTER DATABASE [db_Matrix] SET SINGLE_USER WITH ROLLBACK IMMEDIATE



К базе подключается другая сессия и моя обработка прерывается.

Подскажите, после выполнения ALTER DATABASE SET SINGLE_USER, могу ли я гарантировано занять коннект к базе?
...
Рейтинг: 0 / 0
Как гарантировано переименовать таблицу?
    #40131084
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa,

Если этот код выполняется в одном пакете, то как другой сеанс подключится к базе? Значит пакет падает с ошибкой и вы теряете подключение.
...
Рейтинг: 0 / 0
Как гарантировано переименовать таблицу?
    #40131091
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
teCa,

Если этот код выполняется в одном пакете, то как другой сеанс подключится к базе? Значит пакет падает с ошибкой и вы теряете подключение.

Вопрос неверный.

Верный вопрос: нафига в данном скрипте SET SINGLE_USER WITH ROLLBACK IMMEDIATE?

Пригорает, чтоли?

ЗЫ. За такую профнепригодность гнать надо.
...
Рейтинг: 0 / 0
Как гарантировано переименовать таблицу?
    #40131092
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa,

Оберните все ваше хозяйство в
Код: sql
1.
2.
3.
4.
5.
6.
7.
SET XACT_ABORT ON
BEGIN TRAN
EXEC ('...')
EXEC ('...')
EXEC ('...')
EXEC ('...')
COMMIT TRAN 



без SET SINGLE_USER
...
Рейтинг: 0 / 0
Как гарантировано переименовать таблицу?
    #40131110
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нафига в данном скрипте

Ну как... понаехали тут, переименовать не дают...
...
Рейтинг: 0 / 0
Как гарантировано переименовать таблицу?
    #40131192
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222,

А что не так, можете объяснить? В BOL именно такой пример:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
USE master;
GO
ALTER DATABASE AdventureWorks2012
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE AdventureWorks2012
SET READ_ONLY;
GO
ALTER DATABASE AdventureWorks2012
SET MULTI_USER;
GO



https://docs.microsoft.com/ru-ru/sql/relational-databases/databases/set-a-database-to-single-user-mode?view=sql-server-ver15
...
Рейтинг: 0 / 0
Как гарантировано переименовать таблицу?
    #40131203
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa
aleks222,

А что не так, можете объяснить? В BOL именно такой пример:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
USE master;
GO
ALTER DATABASE AdventureWorks2012
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE AdventureWorks2012
SET READ_ONLY;
GO
ALTER DATABASE AdventureWorks2012
SET MULTI_USER;
GO



https://docs.microsoft.com/ru-ru/sql/relational-databases/databases/set-a-database-to-single-user-mode?view=sql-server-ver15


Ничего личного, но тут ажно ТРИ примера. Почему именно 1-й?

ЗЫ. Как тебе уже доложили, мученик науки, если ты выполняешь приведенный тобой скрипт - никто не может подключиться к базе
Владислав Колосов

Если этот код выполняется в одном пакете, то как другой сеанс подключится к базе? Значит пакет падает с ошибкой и вы теряете подключение.


А ежели у тя ошибка, вырубающая подключение, на что ты жалуешься?

SINGLE_USER придуман не для развлекухи - это "опасный" режим. Используя его на работающей, нагруженной базе - надо быть готовым тормозить сервер и использовать выделенное административное подключение.
Для твоих сюрплясов - транзакции достаточно.
А уж переименование индексов - это за гранью добра и зла.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как гарантировано переименовать таблицу?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]