|
как поймать в триггере создание временной таблицы?
|
|||
---|---|---|---|
#18+
добрый день, требуется перенести несколько баз данных из SQL Server 2019 on-premise в облако google, в Fully Managed Database Service. проблема в том, что default collation и баз данных, и сервера - UTF8. google разрешает создать БД с default collation UTF8, но невозможно создать instance c UTF8. получается, что collation пользовательской БД и tempdb разные. и тогда возникает проблема: при создании временной таблицы, все varchar поля в collation БД [tempdb] (например SQL_Latin1_General_CP1_CI_AS). а все таблицы обычно БД в UTF8. при сравнение полей в разных collation, возникает ошибка. что можно сделать?
но: DDL триггер (и на tempdb, и на пользовательской БД) не ловит создание временных таблиц. на системых таблицах создать триггер невозможно. какие ещё могут быть варианты? спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2021, 16:23 |
|
как поймать в триггере создание временной таблицы?
|
|||
---|---|---|---|
#18+
Во, народ, ищет приключений на собственную задницу. PS. Tempdb должна создаваться по образу и подобию Model. https://docs.microsoft.com/ru-ru/sql/relational-databases/databases/model-database?view=sql-server-ver15 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2021, 17:27 |
|
как поймать в триггере создание временной таблицы?
|
|||
---|---|---|---|
#18+
valv, Если этот сервис поддерживает Contained Database, можно воспользоваться тем, что поля # таблиц для таких баз создаются с ее (базы) дефолтным коллейтом. https://docs.microsoft.com/en-us/sql/relational-databases/databases/contained-database-collations?view=sql-server-ver15 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2021, 17:47 |
|
как поймать в триггере создание временной таблицы?
|
|||
---|---|---|---|
#18+
aleks222 Во, народ, ищет приключений на собственную задницу. а те уже выкручивают руки нам. aleks222 PS. Tempdb должна создаваться по образу и подобию Model. https://docs.microsoft.com/ru-ru/sql/relational-databases/databases/model-database?view=sql-server-ver15 невозможно. Код: sql 1.
error: Cannot alter the database 'model' because it is a system database. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2021, 18:58 |
|
как поймать в триггере создание временной таблицы?
|
|||
---|---|---|---|
#18+
aleks222, в облаке откуда model... В облаке такое г-цо, что и не снилось в кошмаре девопса. Там collation сервера невозможно выбрать, он дефолтный америкосовский. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2021, 19:00 |
|
как поймать в триггере создание временной таблицы?
|
|||
---|---|---|---|
#18+
valv, авторIT гиганты завлекают в облака технически безграмотных управленцев именно так, разводят балбесов как детей. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2021, 19:01 |
|
как поймать в триггере создание временной таблицы?
|
|||
---|---|---|---|
#18+
valv, если это вопрос уже решенный, то очень плохо, если нет - то надо поставить в известность кого следует, что вы не готовы переносить workflow в облако ввиду технических ограничений облака. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2021, 19:03 |
|
как поймать в триггере создание временной таблицы?
|
|||
---|---|---|---|
#18+
Владислав Колосов aleks222, в облаке откуда model... В облаке такое г-цо, что и не снилось в кошмаре девопса. Там collation сервера невозможно выбрать, он дефолтный америкосовский. 1. в google облаке (Fully Managed Database Service) есть все системные БД: master, tempdb, model, msdb. но многие возможность по изменению не поддерживаются. 2. collation сервера выбрать можно. но список возможных collations не включает в себя UTF8. google консультанты утверждают, что в будущем добавят и UTF8 тоже. когда точно - не говорят. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2021, 19:14 |
|
как поймать в триггере создание временной таблицы?
|
|||
---|---|---|---|
#18+
valv aleks222 Во, народ, ищет приключений на собственную задницу. а те уже выкручивают руки нам. aleks222 PS. Tempdb должна создаваться по образу и подобию Model. https://docs.microsoft.com/ru-ru/sql/relational-databases/databases/model-database?view=sql-server-ver15 невозможно. Код: sql 1.
error: Cannot alter the database 'model' because it is a system database. Ты там админ или так? 1. Бякапим. 2. Восстанавливаем как xModel. 3. Делаем усе, шо хотим. 4. Бякапим. 5. Восстанавливаем Model. ЗЫ. Сломаем нахер это облако. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2021, 19:20 |
|
как поймать в триггере создание временной таблицы?
|
|||
---|---|---|---|
#18+
aleks222, я админ, все права у меня. это же не on-prem. это облако. подобные хаки наглухо закрыты. на попытку забекапить [model], получают ошибку: Код: html 1.
(дело не в доступе, это облако не разрешает). ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2021, 19:40 |
|
как поймать в триггере создание временной таблицы?
|
|||
---|---|---|---|
#18+
valv aleks222, я админ, все права у меня. это же не on-prem. это облако. подобные хаки наглухо закрыты. на попытку забекапить [model], получают ошибку: Код: html 1.
(дело не в доступе, это облако не разрешает). Это не права sysadmin. ЗЫ. Шо значит "хаки"? Model для того и дана народу. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2021, 19:45 |
|
как поймать в триггере создание временной таблицы?
|
|||
---|---|---|---|
#18+
aleks222, увы. sysadmin role не существует в google облаке. линк : SQL Server features unavailable for Cloud SQL: The sysadmin role and system stored procedures that require it ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2021, 19:52 |
|
как поймать в триггере создание временной таблицы?
|
|||
---|---|---|---|
#18+
valv это не народ ищет, это IT гиганты завлекают в облака технически безграмотных управленцев. а те уже выкручивают руки нам. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 08:20 |
|
как поймать в триггере создание временной таблицы?
|
|||
---|---|---|---|
#18+
valv что можно сделать?
В сотне команд создания временной таблицы написать после каждого строкового поля collate database_default не так уж сложно. Зато код будет правильный. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 08:42 |
|
как поймать в триггере создание временной таблицы?
|
|||
---|---|---|---|
#18+
alexeyvg, согласен, доработать вполне реально, но требует времени на подготовку и утверждения требования collation в правилах разработки. О чем необходимо доложить руководству, как я рекомендовал ранее. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 12:00 |
|
как поймать в триггере создание временной таблицы?
|
|||
---|---|---|---|
#18+
alexeyvg valv это не народ ищет, это IT гиганты завлекают в облака технически безграмотных управленцев. а те уже выкручивают руки нам. новый коллейшн UTF8 это одна из самых важных новых фич в SQL Server 2019. для тех, кто работает со строками на разных языках и системах записи (алфавитах, иероглифах) - это долгожданная возможность уйти от кошмара nvarchar; это архиважно для VLDB. так что да, это грамотное и разумное решение. уверен, UTF8 коллейшн станет промышленным стандартом. Microsoft молодцы. а вот гугль - подлые твари. в документации они декларирует поддержку UTF8 для Fully Managed Database Service. как мы могли предположить, что на уровне БД UTF8 есть, а на уровне сервера нет? в документации об этом ни слова. во время консультаций - ни слова. с моей точки зрения, это просто невероятная наглость и подлость гугля. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 13:11 |
|
как поймать в триггере создание временной таблицы?
|
|||
---|---|---|---|
#18+
valv какие ещё могут быть варианты? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 14:35 |
|
как поймать в триггере создание временной таблицы?
|
|||
---|---|---|---|
#18+
Конечно, если код работы со временными таблицами написан исключительно монопольно, и/или пользователи ходят под одним логином, то такой метод не подойдёт без разделения данных в этих "временных" таблицах. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 15:00 |
|
как поймать в триггере создание временной таблицы?
|
|||
---|---|---|---|
#18+
tunknown valv какие ещё могут быть варианты? Кстати да. M$ опубликовала вот такой интересный документ: https://docs.microsoft.com/ru-ru/sql/relational-databases/in-memory-oltp/faster-temp-table-and-table-variable-by-using-memory-optimization?view=sql-server-ver15 Тот же самый подход можно использовать и в данном случае. Но придется выловить все Create table # и Select into # во всём тексте. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 15:31 |
|
как поймать в триггере создание временной таблицы?
|
|||
---|---|---|---|
#18+
tunknown Конечно, если код работы со временными таблицами написан исключительно монопольно, и/или пользователи ходят под одним логином, то такой метод не подойдёт без разделения данных в этих "временных" таблицах. Решение есть, см. ниже... Гм... выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 15:32 |
|
как поймать в триггере создание временной таблицы?
|
|||
---|---|---|---|
#18+
uaggster tunknown Конечно, если код работы со временными таблицами написан исключительно монопольно, и/или пользователи ходят под одним логином, то такой метод не подойдёт без разделения данных в этих "временных" таблицах. Решение есть, см. ниже... Гм... выше. См. правее или левее ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 16:51 |
|
как поймать в триггере создание временной таблицы?
|
|||
---|---|---|---|
#18+
valv alexeyvgАга, управленцы безграмотные, а технари, которые закодили необходимость иметь для каждой своей гениальной проги свой сервер со своим коллейшеном, грамотные? :-) Код должен быть такой, что базу с любым коллешеном (которого ещё не было во время разработки), можно было восстановить на сервер с другим коллейшеном (которого тоже ещё не было во время разработки). Сделать это очень просто, нагуглить эти старые рекомендации можно за минуту, так было принято писать и лет 30 назад, ничего не поменялось. Проблема тут, конечно, в том, что разработчики ввиду отсутствия опыта не знали, что нужно гуглить, пока не столкнулись с проблемой :-) tunknown valv какие ещё могут быть варианты? tunknown Хотя и первый совет из области скорее вредных. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 21:39 |
|
как поймать в триггере создание временной таблицы?
|
|||
---|---|---|---|
#18+
alexeyvg В данном случае косяк не в выборе коллейшена. Код должен быть такой, что базу с любым коллешеном (которого ещё не было во время разработки), можно было восстановить на сервер с другим коллейшеном (которого тоже ещё не было во время разработки). Сделать это очень просто, нагуглить эти старые рекомендации можно за минуту, так было принято писать и лет 30 назад, ничего не поменялось. Проблема тут, конечно, в том, что разработчики ввиду отсутствия опыта не знали, что нужно гуглить, пока не столкнулись с проблемой :-) Это как, интересно? Всегда создавать темповые таблицы с указанием COLLATE полей и исключить Select into как факт? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 09:02 |
|
как поймать в триггере создание временной таблицы?
|
|||
---|---|---|---|
#18+
uaggster alexeyvg В данном случае косяк не в выборе коллейшена. Код должен быть такой, что базу с любым коллешеном (которого ещё не было во время разработки), можно было восстановить на сервер с другим коллейшеном (которого тоже ещё не было во время разработки). Сделать это очень просто, нагуглить эти старые рекомендации можно за минуту, так было принято писать и лет 30 назад, ничего не поменялось. Проблема тут, конечно, в том, что разработчики ввиду отсутствия опыта не знали, что нужно гуглить, пока не столкнулись с проблемой :-) Это как, интересно? Всегда создавать темповые таблицы с указанием COLLATE полей и исключить Select into как факт? select * into фсе делает правильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 10:51 |
|
|
start [/forum/topic.php?fid=46&fpage=10&tid=1684134]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 237ms |
total: | 384ms |
0 / 0 |