Quantcast
Channel: SQL.ru: Microsoft SQL Server
Viewing all 7251 articles
Browse latest View live

View с индексами или репликация

$
0
0
Добрый день,

Столкнулся с такой проблемой. Есть сторонная БД с таблицами, в которых нет ни ключей ни индексов, создавать или менять в этой БД мне ничего нельзя, данные(но не структура) в таблицах периодически обновляются третьими лицами путем пересоздания самих таблиц.
Моя задача заключается в построении в своей БД разных view для отчетности, опирающихся на таблицы сторонней базы. Поскольку запросы во view сложные и данных много, то все работает жутко медленно.

Собственно вопрос, есть ли какой-то способ получить в своей базе данных копию структуры сторонней БД, но с индексами? И эта структура должна обновляться одновременно с исходной структурой.

Версия SQL 2008

апдейт по линкед сервер в Оракл - отловить весь текст ошибки от OLE DB provider

$
0
0
        begin try
            update [ORACLE-03].."PPP".EXPORTDB
               set 
                    id_doc          = @p_id_doc,
                    id_package      = @p_id_package,
                    PR_MARK         = @p_PR_MARK         ,
                    PR_AN           = @p_PR_AN           ,
                    contract_otv    = @p_contract_otv    ,
                    row_version     = @p_row_version     ,
                    stat_change_info= @p_stat_change_info,
                    stat_change_date= @p_stat_change_date
             where export_id        = @p_export_id;
         end try
         begin catch

            --IF @@TRANCOUNT > 0
            --ROLLBACK TRANSACTION;

            set @ErrorNumber  = ERROR_NUMBER();
            set @ErrorLine    = ERROR_LINE();
            set @ErrorMessage = ERROR_MESSAGE();
            set @ErrorSeverity= ERROR_SEVERITY();
            set @ErrorState   = ERROR_STATE();

            insert into dbo.logs(log_txt, is_error) values(@ErrorMessage, 1);

         end catch

этот мессадж выводится в ERROR_MESSAGE() :
The OLE DB provider "OraOLEDB.Oracle" for linked server "ORACLE-03" could not UPDATE table "[ORACLE-03]..[PPP].[EXPORTDB]".

а этот в окно мессаджей тоже выводится, но в ERROR_MESSAGE() его нет
OLE DB provider "OraOLEDB.Oracle" for linked server "ORACLE-03" returned message "ORA-00001: unique constraint (PPP.UK_EXPORTDB) violated".

Лицензирование SQL Server кластера

$
0
0
Подскажите какая редакция нужна для создания кластера?
И какое количество лицензий скажем для двух серверов, есть ли какая-то разница для виртуальных машин?
Есть ли какая-то специализированная редакция для кластерных решений?

PS
сам никогда их не настраивал.

Восстанавливаю базу из bak на новом сервере и ошибка

$
0
0
Восстанавливаю базу из bak на новом сервере тут же база уходит в suspect.
Делаю по инструкции

EXEC sp_resetstatus 'db';
ALTER DATABASE db SET EMERGENCY
DBCC checkdb(db')

Все проходит довольно быстро.

Потом пытаюсь
ALTER DATABASE db SET SINGLE_USER WITH ROLLBACK IMMEDIATE

Очень долго идет, в логах:

Источник Вход
Сообщение
Login failed for user 'sa'. Причина: не удалось открыть явно указанную базу данных. [КЛИЕНТ: <local machine>]
Ошибка: 18456, серьезность: 14, состояние: 38.
Process 0:0:0 (0x12fc) Worker 0x00000000906921A0 appears to be non-yielding on Scheduler 0. Thread creation time: 13184860453421. Approx Thread CPU Used: kernel 1109 ms, user 4654421 ms. Process Utilization 57%. System Idle 29%. Interval: 4892183 ms.

И так бесконечно повторяется.
Есть смысл ждать и если нет - что делать?

Помогите разобраться с табличными функциями

$
0
0
Есть таблица Sale с двумя колонками. Code и Q - код товара и отгруженное количество.
есть справочник товаров где описана структура упаковки товара - штук в коробе, штук в палете и т.п.
Нужно к таблице Sale добавить колонки где будет разбито количество на "палет-коробов-блоков-штук"
Я написал табличную функцию F_Upak(Code , Q)
которая при вызове Select F_Upak('A11111' , 1000) возвращает строчку из четырех колонок. Тобишь сама отдельно она у меня работает.

вопрос - Как ей прикрутить к таблице Sale ?

Как правильно оформить конструкцию:

Select *
from Sale
left join F_Upak(Sale.Code,Sale.Q) on .........

Работа с большой вьюшкой

$
0
0
В системе есть вьюшка джойном объединяющая кучу таблиц и фактически представляющая собой всю БД собранную воедино.
Народ привык делать на нее прямые запросы для отчетов, типа select * from vw_report where ....

Сама вьюха представляет собой базовую таблицу base на которую зацеплено огромное количество справочников. В чем собственно говоря проблема. Проблема в том что когда человек пишет запрос select * from vw_report where id=xxx где id фактически является основным полем базовой таблицы base в вьюхе vw_report то парсер сначала объединяет все таблицы в vw_report что долго и только потом берет строку с указанным id. При этом id это кластерный PK на базовой таблице base.
Отсюда вопрос, что можно сделать дабы парсер сначала производил бы поиск по id в таблице base, а уже потом делал портянки джойнов для vw_report, а не наоборот.

BitLocker

$
0
0
Кто нибудь использует BitLocker с Sql Server?

Если да, какие впечатления:
- тормоза?
- проблемы?
- поиск нового работадателя?

Причина вопоса:
Один из серверов с данными подлежащими шифрованию - не энтерпрайз.
Так что с TDE там не включить.

Модератор: Дубль

TDE от третьих поставщиков

$
0
0
Какие есть способы зашифровать данные не меняя приложения если нельзя воспользоваться TDE?

Причина: TDE живёт только на энтерпрайзе.

Начну список

1) BitLocker
достоинства/недостатки - мне пока не известно, если кто знвет дополните пож.

2) TDE от третьих поставщиков
мне извесен пока только database-encryption
недостатки: дорого

Кто в теме, прошу дополнить.

помогите с апдейтом - неск. лет нормально все было - сейчас проблем всплыл

$
0
0
вот так по ключу доступ к записи все норм:
update dbo.tbl_AllOrdersToSattelites set [Send] = 1 where id = 301287 


вот по не индексированному полю зависает и при просмотре блокировок
появляется блок, запрос сам не умирает - приходится его отменять
апдейт не проходит - хотя таже запись верхним запросом апдейтится норм
update dbo.tbl_AllOrdersToSattelites set [Send] = 1 where idZ = 6014


селект тоже норм:
select * from dbo.tbl_AllOrdersToSattelites where idZ = 6415


если линкнутся из MSA (линковка по ключу) , то руками можно единицы проставлять
как хочешь, фильтры и сортировки по idZ тоже норм - блокировок нет

все таблицы крутятся несколько лет - вот седня позвонили и я не смог
понять в чем дело - может кто что посоветует...пока перевел в ручной режим
простановку признака

Запрос на выборку отсутсвующих данных

$
0
0
Всем доброго времени суток!
Я только начал осваивать sql запросы, поэтому не судите строго. Завис с одним запросом, и без помощи, видимо не разберусь.

Дано: таблицы a и b

Таблица а - таблица - справочник со всеми артикулами, котопые есть в производстве
Таблица b - событийная таблица движений артикулов.

Используемые столбцы в запросе:
a.id, b.id, b.date

Суть проблемы:
В таблицу b попадают все движения по всем артикулам за каждый день, следующего вида:

id,date,value.

Мне необходимо сформировать запрос, который бы формировал представление, отражающие, движения по каким артикулам не было вообще в каждый из этих дней, то есть что-то типа:

b.date,a.id

Знаний хватило только на right join с использованием предиката where a.id is null.
Но увы, мне выводятся артикула, но вместо даты - ожидаемо, красуется null.
Различные комбинации других join и селектов вообще ни к чему не привели ((

Если такой запрос не слишком сложный для понимания и реализации - очень прошу помочь напиаться опытом по этой теме!!!

Спасибо!!!

Выполнение DTSX хранимой процедурой, проблема с правами

$
0
0
Запускаю DTSX пакет с помощью хранимки на TSQL. В пакете есть два подключения ADO к SQL server 2017, одно подключение к серверу где развернут пакет , другое к удаленному серверу. В подключениях используется аутентификация WINDOWS. Проблема проявляется при попутке подключения к удаленному серверу, пишет что нет прав. Если выполнять пакет в режиме отладки, то все работает, а вот когда через хранимую процедуру, возникает указанная ошибка с правами. Если использовать SQL аутентификацию все работает. Кто подскажет как настроить корректную работу?

Блокировки после изменения размера поля

$
0
0
Добрый день

Прошу помощи, поскольку не знаю в какую сторону копать.

Досталась в наследство старая база, в одной из таблиц попросили увеличить размер поля с varchar(2000) до varchar(8000)

После этого через несколько месяцев база начала виснуть. sp_who показывает что виновником является запрос, который обращается к данной таблице. sp_lock показывает что процесс который залочил остальных накладывает порядка 150 -200 блокировок на страницы......

В какую сторону копать?

MSSQL через ADO - пул соединений и чудеса с незавершенными транзакциями

$
0
0
Использую вложенные транзакции при работе через ADO следующим образом:
- открываю соединение
- посылаю BEGIN TRANSACTION (пробовал и через begintrans/committrans - тот же эффект)
- выполняются всякие разные изменения связанных данных в базе (в т.ч. через сложные хранимки, где могут быть свои транзакции)
- посылаю COMMIT TRANSACTION
Соединение явно не закрываю и в ряде случаев при отмене транзакции не посылаю ROLLBACK, предполагая что он сделается неявно (как и закрытие соединения) при выходе из контекста создавшего соединение (который происходит тут же) - т.е. при уничтожении переменной соединения

Но, как оказалось, не тут-то было. Выяснилось, что по дефолту ADO не уничтожает такие соединения а помещает в пул и переиспользует. В результате на практике наблюдается интересная картина - если транзакция осталась незавершенной, то дальше в этом соединении могут происходить чудеса, механику которых я затрудняюсь объяснить. Когда в новой транзакции (с точки зрения посылающей стороны) происходит фиксация предыдущей незавершенной транзакция и часть новой. И так далее. Сайд-эффекты зависят от поведения пула.
Теоретически я конечно могу пытаться всегда когда надо откатывать транзакции и закрывать соединение явно, но на практике я все равно не могу этого гарантировать, поэтому хотелось бы чтобы неявное закрытие соединения приводило к его уничтожению с откатом незавершенных транзакций (фиг с ним, с затратами на создание соединений, не смертельно).

Нашел, что отключить сервис пула ADO можно через реестр и в строке соединения, установив опцию OLE DB Services=-2
Пока прописал в строке соединения, сижу наблюдаю... В реестре боюсь установить не там где надо, так как не до конца понимаю для какого провайдера прописать (в строке соединения у меня просто driver={SQL Server} прописано).
В чем вопрос, собственно. Встречал еще рекомендации установить OLE DB Services=-4. Это типа кроме пула соединений ADO отключает еще и некий "Automatic Transaction Enlistment", по которому что-то не шибко гуглится.
Скажите пожалуйста, кто в курсе, как именно изменится поведение при его отключении.
Ну и буду рад любым комментариям, способным помочь разобраться с ситуацией.

Легально ли установить SQL Server 2016 Evaluation,если в компании уже куплен EnterpriseEd?

$
0
0
День добрый,
поясните пожалуйста, если в компании уже установлен и работает SQL Server 2016 Enterprise Edition,
легально ли будет если я на пол года скачаю и поставлю на отдельный сервер внутри компании SQL Server 2016 Evaluation(на 180 дней), под отдельные задачи?

Это законно, неприятностей не будет потом? (не могут ли потом сказать что вы не имели право устанавливать Evaluation если у вашей компании уже куплен SQL Server 2016 Enterprise Edition, что в этом случае Evaluation уже к вам не применим и вы нарушили закон)

Тип данных float сравнивая 2 числа визуально одинаковых не срабатывает знак равенства

$
0
0
собственно говоря вопрос в теме
имеем 2 механизма которые возвращают 2 визуально одинаковых значения но знак равенства не срабатывает на них.

имеем результат в флоате
12715,845
и сравниваем с другим результатом в том же флоате
12715,845

визуально одинаковы , как можно отобразить реальные значения, чтобы понять в чем разница?

Частота процессора, кол-во ядер,... ? What the f**k :)) Help please.

$
0
0
Привет, всем.

Помогите, пожалуйста, в моей проблеме.

Рабочий ПК
ОС: Microsoft Windows 10 Pro
Процессор: QuadCore Intel Core i7-6820HK 3700 MHz (8 ядер, Кэш: L1-32Кб per core, L2-256Кб per core, L3-8Мб)
Оперативная память: 64 Гб
Дисковый накопитель: Intel Raid 0 Volume (476 Гб)

Версия SQL Server
Microsoft SQL Server 2012 (SP1) - 11.0.3368.0 (X64)
May 22 2013 17:10:44
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)


Вся работа проводится в SQL Server Management Studio
Есть локальная БД. Пользователей нет. Триггеров нет.
В SQL-скриптах довольно много: "cursor local forward_only static", insert, update, select.

База постоянно дополняется новыми данными и алгоритмами их обработки.

Два раза в год запускается хранимка. И тут есть 2-е проблемы:
1. БД разрастается до 400 Гб
2. Время выполнения хранимки около 1-го месяца.

Конечно же были сделаны шаги в сторону оптимизации, но в силу своих скромных знаний в этом направлении - тут еще есть к чему стремиться.

Я хочу собрать новый рабочий ПК для работы с данной БД
Для этого я отобрал 3-и топовых процессора:

1. Intel Core i9-7980XE
Число ядер ЦП: 18
Число потоков: 36
Базовая частота: 2.60GHz
Макс. частота: 4.2GHz
Объем кэш-памяти первого уровня:
Объем кэш-памяти второго уровня:
Объем кэш-памяти третьего уровня: 24,75MB
Техпроцесс: 14nm
Тип памяти: DDR4
Каналы памяти: 4
Макс. быстродействие памяти: 2666MHz


2. AMD Ryzen Threadripper 2990WX
Число ядер ЦП: 32
Число потоков: 64
Базовая частота: 3GHz
Макс. частота: 4.2GHz
Объем кэш-памяти первого уровня: 3MB
Объем кэш-памяти второго уровня: 16MB
Объем кэш-памяти третьего уровня: 64MB
Техпроцесс: 12nm
Тип памяти: DDR4
Каналы памяти: 4
Макс. быстродействие памяти: 2933MHz

3. AMD Ryzen Threadripper 2950X
Число ядер ЦП: 16
Число потоков: 32
Базовая частота: 3.5GHz
Макс. частота: 4.4GHz
Объем кэш-памяти первого уровня: 1.5MB
Объем кэш-памяти второго уровня: 8MB
Объем кэш-памяти третьего уровня: 32MB
Техпроцесс: 12nm
Тип памяти: DDR4
Каналы памяти: 4
Макс. быстродействие памяти: 2933MHz


Теперь вопросы:
Какой процессор для моих задач будет лучше?
Какой прирост производительности можно ожидать от использования новых процессоров?
Где можно почитать информацию по данному вопросу?

Спасибо всем.

0 строк возвращено

$
0
0
я хочу получить 10 групп, используя условие where

SELECT  *
	 

   --into chec
-- drop table chec
  FROM MYTAB




  where (product_id=11514  and shop_code='22906МСК')
  and product_id=11587 and shop_code='23499МСК'
  and product_id=13163 and  shop_code='23648МСК'
  and product_id=11543 and shop_code='22906МСК'
  and product_id=53109   and shop_code='23511МСК'
  and product_id=11511   and shop_code='24923МСК'
  and product_id=13189 and shop_code='27302МСК'
  and product_id=13087  and shop_code='31303МСК'
  and product_id=158051 and  shop_code='23863МСК'
  and product_id=158016 and  shop_code='23863МСК'



SQL сообщение, что 0 строк возвращено
Но такого не может быть, по отдельности они все есть.
Как их отобразить сразу в одном запросе.

Не работает отладка в Скрипте DTSX пакета

$
0
0
С некоторых пор перестала работать отладка в C# скрипте в пакете DTSX. Ставлю точку останова для отладки, но пакет выполняется не показывая мне ее. Хотя сам скрипт выполняется корректно и точно до точки останова доходит. Пакеты создавались в VS2012, а отлаживать пытаюсь в VS2015. В чем может быть проблема?

Оператор PIVOT

$
0
0
Приветствую Вас, Друзья

Прошу вас помочь с решением задачи, сам по примерам я не смог)

Создайте запрос, который возвращает табличное значение из таблицы Production.Product.
--Используйте оператор PIVOT.
--Результирующая таблица должна иметь поля с именами Name, RED, BLUE и BLACK и содержать значения полей
--SafetyStockLevel, Color, Name из таблицы Production.Product.
--Результирующий набор должен включать только те записи из таблицы Production.Product, для которых поле
--Name содержит строку 'Helmet'.
--Просуммируйте значения в поле SafetyStockLevel по цветам Red, Blue and Black.
--Отсортируйте результирующий набор по полю Name.


Заранее благодарен!

Bulk Insert и UTF-8

$
0
0
Добрый день! есть csv файл, генерируемый Crystal Report, который должен втавляться в sql базу c помощью bulk insert. Проблема в том, что csv файл в UTF-8, который, как я понимаю, распознается только SQL Server 2014SP и выше, а у нас 2012 SP4, поэтому вместо русских символов получается каша.

Есть ли способ обойти это с помощью SQL или надо копать в сторону смены кодировки файла, формируемого Crystal Report?

Спасибо
Viewing all 7251 articles
Browse latest View live