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

Не поднимается SQL сервер.

$
0
0
Доброго дня, коллеги !
На днях возникла интересная ситуация c SQL Server'ом, которая на данный момент уже устранена. Хотелось бы услышать ваше мнение по поводу вариантов решения такой проблемы или какие-то рекомендации на будущее.

Конфигурация:
Есть SQL Failover Cluster, построенный в свою очередь на Windows Failover кластере. В кластере 6 узлов, из которых 5 активных (на каждом работает своя служба SQL), одна пассивная (резервный узел).
ПО: Windows Server 2012 R2, Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0

Проблема:
Из-за поломки кондиционера в серверной некоторые серверы перегрелись и самостоятельно отключились. В число этих серверов попали один основной узел и один резервный. После включения серверов служба SQL Server, расположенная на этих узлах не смогла стартовать, причем не смогла стартовать как на основном узле, так и на резервном. В логах были следующие сообщения:

Логи во вложении.

Служба SQL Server замирала в статусе Starting, в лог больше ничего не писалось, ждали 30-60 минут, рубили службу и пытались запустить на другом узле кластера, и так несколько раз с одним и тем же результатом.

Решение:
Т.к. времени ждать не было, предприняли следующие варианты решений:
1. Предположили, что повредились служебные БД SQL Server'а, поэтому была предпринята попытка их перестроения из файла дистрибутива (через командную строку). Операция перестроения завершилась, но результат не изменился. Команда на перестроение взята из MSDN.
2. Для экономии времени решили перейти к удалению и новой инсталляции службы SQL Server. В результате служба поднялась. Поскольку мы имели в запасе бэкапы системных баз, то решили попробовать восстановить на этом сервере БД Master (бэкап сделан несколько дней назад, восстановление в соответствии с инструкцией MSDN). В результате вернулись к тому, с чего начали. Служба не поднялась, в логах все то же самое.
3. Через дистрибутив пересоздали БД Master, после чего сервер поднялся, подцепили рабочие БД, проверили их целостность, убедились, что служба работает на обоих узлах. На этом история завершилась.

Вопросы:
1. С чем может быть связан сбой при старте SQL Server'а ?
2. Почему ситуация повторилась после восстановления БД Master ?
3. Какими еще способами можно было попробовать исправить ситуацию ?

Уточнение:
Что такое "DYNPERF_LONG_DURATION" и "DYNPERF_BLOCKING_DATA" никто сказать не смог, предположительно – ранее для анализа производительности на сервер была установлена утилита Dynamics Perf.

выбор данных по условию

$
0
0
Никак не могу понять, как организовать цикл поиска или просто выбор нужного справочника по условию... т.е. у меня в одном столбце зашиты данные (символы), которые относятся к разным справочникам.
в Колонке (SP11791) 0 - относится к справочнику КонтрАгенты, 7L и BJ - справочнику Сотрудники, 57 - справочник Фирмы
Как указать нужный???

выбор записей с ключом по умолчанию

$
0
0
Привет,

есть таблица (ID1, ID2), ID не уникальные(в качестве ключа используется пара), нужно выбрать такие записи, у которых ID2 равен заданному, но если нет ни одной пары ID1 с заданным ID2 нужно выбрать ID2 равный допустим 1. Мои попытки селфджойнить таблицу саму на себя не увенчались успехом(нет нулл значений для отсева с помощью coalesce), прошу помочь.

Последний день месяца

$
0
0
Добрый день.
Подскажите пожалуйста с решение одного вопроса.
Есть программа база которая изначально переведена из Access в SQL.

У нас есть Таблица qdfPrikazRace Где есть поля Общий км. (SummKm) и Дата Выезда (TSTime).
В другой таблице есть также поля DateFrom (С) и DateUntil (По) (Где мы выбираем период) и поле "км за месяц" где благодаря формуле ("SELECT ISNULL(SUM(SummKm), 0) FROM qdfPrikazRace WHERE TSTime BETWEEN <DateFrom> AND <DateUntil> AND UserFullNameCalc = <UserNameCalc>") мы видели сколько км проехало наше ТС за месяц, пока не поняли что если в таблице qdfPrikazRace в поле TSTime стоит последнее число месяца,то в другой таблице в поле "км за месяц" Км за последний день месяца просто не суммируется.

Подскажите пожалуйста с формулой чтобы последний день тоже суммировался.

Предикат LIKE и регулярные выражения

$
0
0
Прошу помощи...
Сервер MS SQL 2008R2

Имеется инфа о серии документа...
Требования к серии:
1. в серии должен быть дефис
2. Часть перед дефисом может содержать только буквы I, X, V, L, C, D, M (латинские) или Х, С, М русские. Содержит не меньше одной буквы.
3. Часть после дефиса может содержать только русские заглавные буквы количеством ровно 2 штуки.

Т.е. из набора:
SELECT name FROM
(SELECT 'XIII-РЕ' name UNION ALL
 SELECT '1234567' UNION ALL
 SELECT '1-ФМ' UNION ALL
 SELECT 'I-КИ' UNION ALL
 SELECT '12-УК' UNION ALL
 SELECT 'XM-САР' UNION ALL
 SELECT 'X-ГН'
) x
WHERE name like ....
должны выбраться
name
XIII-РЕ
I-КИ
X-ГН

Что-то аналогичное в Предикат LIKE и регулярные выражения

Не получается создать Foreign Key

$
0
0
Create table First1
(
id_Name varchar(15) NOT NULL
PRIMARY KEY
)
GO

Create table Second2
(
id_Interes varchar(15) NOT NULL
PRIMARY KEY,
FOREIGN KEY (id_Name) REFERENCES First1(id_Name)
)
GO

Только начинаю учить MS SQL. Что я делаю не так? Почему не создаётся Foreign key?
Спасибо!

SQL Server 2008. Не секционирует данные

$
0
0
Здравствуйте! Скажите пжлста, есть таблица большая, 100 млн строк. Настроена схема и функция секционирования, каждый день льются данные и почему то попадают в одну и ту же секцию. На таблице есть есть индексы, кластеризованнные и некластеризованные. Почему так?

Не удалось найти хранимую процедуру (а она точно есть!!)

$
0
0
Добрый день! Ситуация в следующем: есть приложение на c#, которое запускает различные хранимые процедуры MS SQL Server`a 2008, так вот есть одна хранимая процедура, которая у одного клиента не хочет запускаться на выполнение, тогда как у других клиентов она запускается.
У этого одного клиента вылазит ошибка:

".Net SqlClient Data Provider
Не удалось найти хранимую процедуру FA_GetShopsTVP"

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

Подскажите, пожалуйста, в какой стороне искать причину? (фото прикладываю)

Удаление строки

$
0
0
Подскажите как можна удалить 2 строки из 3 когда значения во всех колонках одинаковы. Когда переносил данные из внешней БД при обработке появились несколько строк с одинаковыми ID и все данные в колонках 1:1.

Запросом delete даже не знаю по какому условию удалять

Спасибо.

OPENROWSET( BULK ...

$
0
0
Пытаюсь тут загрузить .CSV

Файл
SUB_REGION_ID, SUB_REGION_CODE, SUB_REGION_NAME, REGION_ID, STATUS, STATUS_DATE, LAST_ACTIVITY_TYPE
"966","AG","Glacier Bay","29","True","2/16/2007 8:17:02 AM","I"

Файл формата
11.0
7
1 SQLCHAR 0 12 "," 1 SUB_REGION_ID ""
2 SQLCHAR 0 4 "," 2 SUB_REGION_CODE Cyrillic_General_CI_AS
3 SQLCHAR 0 128 "," 3 SUB_REGION_NAME Cyrillic_General_CI_AS
4 SQLCHAR 0 12 "," 4 REGION_ID ""
5 SQLCHAR 0 32 "," 5 STATUS Cyrillic_General_CI_AS
6 SQLCHAR 0 24 "," 6 STATUS_DATE ""
7 SQLCHAR 0 4 "\n" 7 LAST_ACTIVITY_TYPE Cyrillic_General_CI_AS

Инструкция SQL
    select *
      from openrowset(BULK 'C:\Gate\In\TB_SUB_REGION.csv'
                     , FORMATFILE = 'C:\Gate\In\TB_SUB_REGION.fmt'
                     , CODEPAGE = 'RAW'
                     , FIRSTROW = 2

                ) AS test_file


Результат
dummy SUB_REGION_ID SUB_REGION_CODE SUB_REGION_NAME REGION_ID STATUS STATUS_DATE LAST_ACTIVITY_TYPE
"966" "AG" "Glacier Bay" "29" "True" "2/16/2007 8:17:02 AM" "I"

1. В конце файла источник данных ставит 0x0D0A (т.е. конец файла 0x0A0D0A), хотя разделитель строк 0x0A. И это дает в конце инструкции SQL ошибку.

Сообщение 4832, уровень 16, состояние 1, строка 1
Массовая загрузка: непредвиденный конец файла данных.
Сообщение 7399, уровень 16, состояние 1, строка 1
Поставщик OLE DB "BULK" для связанного сервера "(null)" сообщил об ошибке. Поставщик не предоставил данных об ошибке.
Сообщение 7330, уровень 16, состояние 2, строка 1
Не удалось получить строку от поставщика OLE DB "BULK" для связанного сервера "(null)".

Если ручками убрать 0D0A - ошибка исчезает.

Есть какие идеи?
На крайняк, вдруг тут гуру .NET есть, загрузка файла идет так (powershell)

           $ftprequest = [System.Net.FtpWebRequest]::Create( $uri )
           $ftprequest.Credentials = $credentials
           $ftprequest.Method = [System.Net.WebRequestMethods+Ftp]::DownloadFile
           $responseStream = $ftprequest.GetResponse().GetResponseStream()

           $localfile = $target + $file
           $fileStream =  New-Object System.IO.FileStream( $localfile, [System.IO.FileMode]::Create, [System.IO.FileAccess]::Write )
           $responseStream.CopyTo($fileStream)
           $responseStream.Close()
           $fileStream.Close()


Я не силен в тонкостях .NET, но может есть дешевый способ просто отрезать этот конец (два последних байта)?

2. Как бы избавиться от кавычек ""? Советы https://blogs.msdn.microsoft.com/sqlserverfaq/2010/02/04/how-to-remove-unwanted-quotation-marks-while-importing-a-data-file/
приводят к "исчезновению" первой строки.

Запускается и останавливается Аген MS SQL Server 2012

$
0
0
Всем привет.
Помогите запустить этот долбаный агент...
Пришлось в очень срочном порядке переустанавливать винду сервера и сам MS SQL Server 2012
Все установилось - базы оперативно подключил - народ счастлив и довольный - работают!
Начал настраивать систему бекапов, и тут... "Служба SQLSERVERAGENT на SERVER запустилась, затем остановилась. "
Пробовал менять пользователя запуска, Сетевые настройки -> Протоколы... -> Именованные каналы (ВКЛЮЧИЛ)

Помогите, плиз, куда еще смотреть?
бекапы пока вручную делаю... а это геморно, 8 баз...

работа с AlwaysonAG из Entity Framework

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

есть синхронная группа AAG из двух серверов ms sql 2014. при высокой нагрузке на базу (операции импорта), получается вот такой Exception:

Jul 19 2016 12:43:20 PM / 1468914200
System.Data.Entity.Infrastructure.CommitFailedException
An error was reported while committing a database transaction but it could not be determined whether the transaction succeeded or failed on the database server. See the inner exception and http://go.microsoft.com/fwlink/?LinkId=313468 for more information.
System.Data.Entity.Infrastructure.CommitFailedException: An error was reported while committing a database transaction but it could not be determined whether the transaction succeeded or failed on the database server. See the inner exception and http://go.microsoft.com/fwlink/?LinkId=313468 for more information. ---> System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. ---> System.ComponentModel.Win32Exception: The wait operation timed out
--- End of inner exception stack trace ---
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(Byte[] buffer, TransactionManagerRequestType request, String transactionName, TransactionManagerIsolationLevel isoLevel, Int32 timeout, SqlInternalTransaction transaction, TdsParserStateObject stateObj, Boolean isDelegateControlRequest)
at System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransactionYukon(TransactionRequest transactionRequest, String transactionName, IsolationLevel iso, SqlInternalTransaction internalTransaction, Boolean isDelegateControlRequest)
at System.Data.SqlClient.SqlInternalTransaction.Commit()
at System.Data.SqlClient.SqlTransaction.Commit()

....


хотелось бы работать в режиме транзакционной целостности, "could not be determined whether the transaction succeeded or failed" не очень устраивает.

есть идеи на этот счет ?

Книги по оптимизации перформанса SQL Server

$
0
0
Коллеги, кто подскажет хорошие статьи или книги (названия) по оптимизации перформанса SQL Server?

Объясню на примере что "мучает". В соседнем отделе у коллег проблема, что некий SQL запрос выполняется 15 часов, при этом ни память не занята вся, ни CPU не взлетает, ни дисковой активности не наблюдается. Дедлоки проверяли - тоже не видно.

Хотелось бы фундаментально разобраться с тем как вообще SQL Server выполняет запросы и как промониторить процесс выполнения и найти причину тормозов.

Мы знаем хорошо что такое план выполнения; но план - это план, а выполнение - это выполнение, и хотелось бы знать все касательно трассировки самого выполнения и вылавливания инфы о том, что он делает в данный момент, касательно разных счетчиков производительности, касательно того, есть ли профайлер в природе (в смысле code profiler а не SQL profiler) - типа того, что дядька под линукс сделал http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html (и там же скриншот справа сверху как он MySQL отпрофайлил).

Хотелось бы систематично все это прочитать, перепробовать, и поднять свой уровень.

Посоветуйте материалы, которые следует прочитать. Спасибо.

Как быстрее всего сделать копию базы?

$
0
0
Есть рабочая база данных размером около 80ГБ, которая бэкапится каждую ночь.
Есть тестовая база данных, которая обычно восстанавливается из последнего бэкапа рабочей базы.
Иногда в тестовой базе нужны свежие данные, тогда делается бэкап рабочей базы и тут же восстанавливается в тестовую.
Иногда это делается несколько раз в течении дня.
Бэкап + восстановление занимают около 20. А нельзя ли ускорить процесс и просто скопировать рабочую базу в тестовую?
________________________
Мы смотрим с оптимизмом...
...в оптический прицел.

Свертка последовательностей

$
0
0
Помогите, пожалуйста.

Есть такой набор
declare @temptable table(Group1 int,Group2 int,N int,Val int )
INSERT @temptable(Group1,Group2,N,Val)
VALUES
	(1, 0, 1, 5503 ), 
	(1, 0, 2, 5504 ), 
	(1, 0, 3, 5505 ), 
	(1, 0, 4, 5506 ), 
	(1, 0, 5, 5507 ), 
	(1, 0, 6, 5508 ), 
	(1, 3, 7, 5509 ), 
	(1, 3, 8, 5510 ), 
	(1, 0, 9, 5511 ), 
	(1, 0, 10, 5512 ), 
	(2, 0, 11, 2655 ), 
	(2, 0, 12, 2656 ), 
	(2, 0, 13, 2657 ), 
	(2, 0, 14, 2658 ), 
	(4, 0, 15, 73 ), 
	(4, 0, 16, 74 ), 
	(4, 0, 17, 75 ), 
	(4, 0, 18, 76 ), 
	(4, 0, 19, 77 ), 
	(4, 0, 20, 78 ), 
	(4, 4, 21, 79 ), 
	(4, 11, 22, 80 ), 
	(1, 0, 23, 5513 ), 
	(1, 0, 24, 5514 ), 
	(1, 0, 25, 5515 ), 
	(1, 0, 26, 5516 ), 
	(1, 0, 27, 5517 ), 
	(1, 0, 28, 5518 ), 
	(3, 0, 29, 5 ), 
	(3, 0, 30, 6 ), 
	(3, 0, 31, 1 ), 
	(3, 0, 32, 2 ), 
	(3, 0, 33, 3 ), 
	(3, 0, 34, 4 ), 
	(3, 0, 35, 9 ), 
	(3, 0, 36, 10 ), 
	(3, 0, 37, 7 ), 
	(3, 0, 38, 8 ), 
	(3, 0, 39, 11 ), 
	(3, 0, 40, 12 ), 
	(4, 0, 41, 83 ), 
	(4, 0, 42, 84 ), 
	(3, 0, 43, 13 ), 
	(3, 0, 44, 14 ), 
	(4, 0, 45, 81 ), 
	(4, 0, 46, 82 ), 
	(4, 0, 47, 89 ), 
	(4, 0, 48, 90 ), 
	(4, 0, 49, 85 ), 
	(4, 0, 50, 86 ), 
	(4, 0, 51, 87 ), 
	(4, 0, 52, 88 )
	;


Хотелось бы на выходе получить следующее
Group1 Group2 ValFrom ValTo
1 0 5503 5508
1 3 5509 5510
1 0 5511 5512
2 0 2655 2658
4 0 73 78
4 4 79 79
4 11 80 80
1 0 5513 5518
3 0 5 6
3 0 1 4
3 0 9 10
3 0 7 8
3 0 11 12
4 0 83 84
3 0 13 14
4 0 81 82
4 0 89 90
4 0 85 88

+

SELECT *
FROM (VALUES
		(1,0,5503,5508),
		(1,3,5509,5510),
		(1,0,5511,5512),
		(2,0,2655,2658),
		(4,0,73,78),
		(4,4,79,79),
		(4,11,80,80),
		(1,0,5513,5518),
		(3,0,5,6),
		(3,0,1,4),
		(3,0,9,10),
		(3,0,7,8),
		(3,0,11,12),
		(4,0,83,84),
		(3,0,13,14),
		(4,0,81,82),
		(4,0,89,90),
		(4,0,85,88)
	) as q(Group1,Group2,ValFrom,ValTo)
	;



Сумел получить
SELECT q.Group1,
		q.Group2,
		min(q.Val) as ValFrom,
		max(q.Val) as ValTo
	FROM (
			SELECT q1.Group1,
				q1.Group2,
				q1.N,
				q1.Val,
				q1.Val - row_number() OVER(PARTITION BY q1.Group1,q1.Group2 ORDER BY q1.Val) as gr1,
				row_number() OVER(PARTITION BY q1.Group1,q1.Group2 ORDER BY q1.Val) - row_number() OVER(PARTITION BY q1.Group1,q1.Group2 ORDER BY q1.N) as gr2,
				q1.N - row_number() OVER(PARTITION BY q1.Group1,q1.Group2 ORDER BY q1.N) as gr3
			FROM @temptable as q1
			) as q
	GROUP BY q.Group1,q.Group2,q.gr1,q.gr2,q.gr3
	ORDER BY min(q.N);

но этот селект неправильно склеивает интервалы с N в диапазоне 31-38 и 45-52

Выборка оборота по минимальным ценам

$
0
0
Вечер добрый. Господа эксперты, подскажите, как корректно выбрать из интервала обороты только по минимальным ценам (при условии что они равны). Подозреваю. что нужно использовать функцию MIN, но как именно пока не догадался. Пример таблицы приложил в скрине.

Manual

$
0
0
Добрый день. Подскажите, что-то как Oracle Database Concepts, но для MS SQL Server

Подскажите с запросом

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

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

Если можно это сделать, то подскажите, как это реализуется?

Заранее спасибо.

Использование памяти- помогите разобраться плз.

$
0
0
День добрый!
Есть сервер с 65535 (MB) памяти. В настройках SQL Minimum server memory=0,Maximum Server Memory=61440

Т.е. если я правильно понимаю, под buffer pool SQL выделено порядка 62 гига, и если кроме SQL на сервере ничего не бежит, то основными потребителями памяти являются SQL и операционная система, т.е. в Windows Task Manager я ожидаю увидеть, что на сервере свободно менее 4 гигабайт. Но почему-то ни Task Manager ни Resource Monitor так не считает:

Картинка с другого сайта.

Картинка с другого сайта.

Хотелось бы знать или в Task Manager не всегда отображается верная информация и нужно смотреть в sys.dm_os_performance_counters или я не прав?
Картинка с другого сайта.


В моем случае речь идет о:
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) Jun 17 2011 00:54:03 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

Неправильная последовательность номеров

$
0
0
Блин... что-то не могу составить правильный запрос.
Прошу помощи.
SELECT @@VERSION
Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 
	May 14 2014 18:34:29 
	Copyright (c) Microsoft Corporation
	Express Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)

Есть набор записей:
	SELECT R.Num, CONVERT(varchar(10),R.Date,104) as Date1, R.Date
	FROM
	(
		SELECT 1 as Num, CAST('20100101' as datetime) as Date
		UNION ALL
		SELECT 2, CAST('20100102' as datetime)
		UNION ALL
		SELECT 3, CAST('20100103' as datetime)
		UNION ALL
		SELECT 4, CAST('20100102' as datetime)
		UNION ALL
		SELECT 5, CAST('20100103' as datetime)
		UNION ALL
		SELECT 10, CAST('20100103' as datetime)
		UNION ALL
		SELECT 7, CAST('20100104' as datetime)
		UNION ALL
		SELECT 6, CAST('20100103' as datetime)
		UNION ALL
		SELECT 8, CAST('20100103' as datetime)
		UNION ALL
		SELECT 13, CAST('20100103' as datetime)
		UNION ALL
		SELECT 9, CAST('20100105' as datetime)
	) R
	ORDER BY R.Date,R.Num;

Мне надо найти записи в которых "номер из меньшей даты был больше минимального номера из большей".

Составил вроде и доп. запрос:
SELECT CONVERT(varchar(10),R.Date,104) as Date1, R.Date, MIN(R.Num) as Min_N, MAX(R.Num) as Max_N
	FROM
	(
		SELECT 1 as Num, CAST('20100101' as datetime) as Date
		UNION ALL
		SELECT 2, CAST('20100102' as datetime)
		UNION ALL
		SELECT 3, CAST('20100103' as datetime)
		UNION ALL
		SELECT 4, CAST('20100102' as datetime)
		UNION ALL
		SELECT 5, CAST('20100103' as datetime)
		UNION ALL
		SELECT 10, CAST('20100103' as datetime)
		UNION ALL
		SELECT 7, CAST('20100104' as datetime)
		UNION ALL
		SELECT 6, CAST('20100103' as datetime)
		UNION ALL
		SELECT 8, CAST('20100103' as datetime)
		UNION ALL
		SELECT 13, CAST('20100103' as datetime)
		UNION ALL
		SELECT 9, CAST('20100105' as datetime)
	) R
	GROUP BY R.Date
	ORDER BY R.Date;

Но как правильно получить результат?
Должно быть:
НомерДата
402.01.2010
803.01.2010
1003.01.2010
1303.01.2010
Viewing all 7251 articles
Browse latest View live