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

Удалённа хп не вылетает по таймауту

$
0
0
Приветствую!
Для одного теста написал хп, которая в цикле просто делает задержки

	declare @s int = 1
	declare @e int = 1000000

	while @s <= @e begin

		waitfor delay '10:00'; 

		set @s += 1

	end 


Удалённо запустил эту хп. Она выполняется уже час двадцать,

процесс подпроцесс db_name cpu_time status waittime
123 0 xdb_Other 0 suspended 4748333

хотя время ожидания удалённого запроса установлено в 50 минут.

remote query timeout (s) 0 2147483647 3000 3000


Почему запрос не отрубается?

Оба сервера

Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64)
Sep 21 2011 22:45:45
Copyright (c) 1988-2008 Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (VM)

metadata visibility

$
0
0
господа сейчас нашел какое то странное поведение sp_help

у когонибудь она работает по sp_hexadecimal?

+ репро


use master;
go
if object_id('[dbo].[sp_hexadecimal]', N'P') is not null drop procedure [dbo].[sp_hexadecimal];
go
CREATE OR ALTER PROCEDURE [dbo].[sp_hexadecimal]
    @binvalue varbinary(256),
    @hexvalue varchar (514) OUTPUT
AS
DECLARE @charvalue varchar (514)
DECLARE @i int
DECLARE @length int
DECLARE @hexstring char(16)
SELECT @charvalue = '0x'
SELECT @i = 1
SELECT @length = DATALENGTH (@binvalue)
SELECT @hexstring = '0123456789ABCDEF'
WHILE (@i <= @length)
BEGIN
  DECLARE @tempint int
  DECLARE @firstint int
  DECLARE @secondint int
  SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))
  SELECT @firstint = FLOOR(@tempint/16)
  SELECT @secondint = @tempint - (@firstint*16)
  SELECT @charvalue = @charvalue +
    SUBSTRING(@hexstring, @firstint+1, 1) +
    SUBSTRING(@hexstring, @secondint+1, 1)
  SELECT @i = @i + 1
END

SELECT @hexvalue = @charvalue
go

sp_help N'sp_hexadecimal'




и я чето не понимаю по sp_help_revlogin ну или любой другой пользовательской процедурку в мастере оно работает. а тут возникает
сообщение: 15009, уровень: 16, состояние: 1, процедура: sp_help, строка: 79 [строка начала пакета: 1]
The object 'sp_hexadecimal' does not exist in database 'master' or is invalid for this operation.


под sysadmin!

Вывод SQL из отказоустивочого кластера.

$
0
0
Господа, хотелось бы у вас уточнить.
Планируем вывод SQL из отказоустойчивого кластера. У кого был опыт? При выводе из кластера SQL полностью удаляется или удаляется кластеризация только? Почитал в MSDN, но определенности так и не появилось. Какие подводные камни есть?

MS SQL SERVER имена входа и пользователи базы данных

$
0
0
Такой вопрос.
.
Есть рабочий сервер MS SQL - SSS .
На этом сервере есть база данных ХХХ .
В базе данных ХХХ есть пользователи базы данных, которые продублированы как имена входа, т.е., например, есть пользователь YYY базы данных ХХХ , а также есть имя входа YYY , имя входа и пользователь базы данных ХХХ связаны (равны по имени) между собой.
.
Есть новый сервер MS SQL - SSSNNN .
На этом сервере SSSNNN создана пустая база данных ХХХNNN , аналогичная базе данных XXX сервера SSS .
Устанавливаем DUMP базы данных ХХХ с сервера SSS на сервер SSSNNN в базу ХХХNNN .
После установки DUMP на сервер SSSNNN пользователи базы данных XXXNNN присутствуют, например, пользователь YYY .
А вот имен входа, например, имя входа - YYY на сервере SSSNNN - НЕТ !!!
Для создания имени входа YYY на сервере SSSNNN для базы данных ХХХNNN необходимо сначала удалить пользователя YYY базы данных XXXNNN, а уже потом создавать имя входа, что НЕ всегда выполнимо и удобно, особенно если пользователи имеют свои схемы (являются владельцами схемы).
.
Вопрос.
.

Как на сервере SSSNNN создать имя входа YYY для базы данных XXXNNN при условии что пользователь YYY базы данных XXXNNN уже существует ? Как правильно связать имя входа YYY и имя пользователя YYY базы данных XXXNNN ?
.

.

Представление/view Творческое задание

$
0
0
По учебе задали поразмышлять на эту тему и ничего в голову стоящее не приходит.
Существует представление/view. По сути код view содержит несколько джойнов таблицы самой на себя.
В последнее время запросы на выборку данных из этой view стали работать очень долго, что замедляет скорость обновления отчетов.
Предложить перечень мероприятий по ускорению получения выборок из этой view.
Может у кого-то есть идеи?

Восстановить базу данных без бекапа

$
0
0
Добрый день, коллеги.
Ситуация:
есть база 1С + СУБД MS SQL 2014.
представлена двумя файлами main.mdf и main.ldf.
доступа до ms sql я самолично не имею.
информация от админов - база мейн повреждена, а именно сам файл базы мейн поврежден.
вход в конфигуратор 1С невозможен.
т.е. база повреждена на каком -то уровне глубже 1С.
впрс:
каков порядок действий для восстановления этой базы, если учесть, что никакие бекапы не создавались - вообще,
ни полные, ни разностные, ни журналов транзакций.
впрс. номер 2:
так как лог файл постоянно разрастается, если его не сжимать, то я могу предположить, что его можно использовать для восстановления - а как, к чему его добавить, нужно сделать какой-то начальный бекап.
нужно ли перевести испытуемую сломанную базу в емергенси режим , сделать бекап - какой???
к этому бекапу прицепить только что сделанный бекап лога?
какой вообще смысл имеют старые давно закоммиченные данные в лог файле, если сам файл не бекапится.
Или лог файл - это просто возможность восстановиться на необходимый момент времени в некоторых случаях и не более того.
А базу восстанавливать в случае её поломки и отсутствия бекапов нужно только с помощью чекдб?
_______________

Сортировка строк с условием

$
0
0
CREATE TABLE [PM](
	[VCode] [bigint] IDENTITY(1,1) NOT NULL,
        [PCode] [bigint] NULL
	[Comment] [varchar](max) NULL,
	[NumberBPStage] [bigint] NULL,
	[BP] [bigint] NULL
)


Insert into [PM] (Comment, PCode, NumberBPStage, BP) 
values ('Подготовка ТЗ', 1, 1, 1), 
('Подготовка КП', 1, 2, 1),
('Поставка', 1, 3, 1),
('Звонок', 2, NULL, NULL), 
('Встреча', 2, NULL, NULL),
('Договор', 2, NULL, NULL)



Есть такая таблица, мне надо написать запрос со следующей сортировкой. Если BP=NULL, то сортировать по VCode (desc) + PCode(desc), а если BP = 1, то по NumberBPStage (asc)+ PCode (desk)


Из данной таблицы я должна получить данные в таком порядке:
Договор, Встреча, Звонок, Подготовка ТЗ, Подготовка КП, Поставка

Объединение запросов по столбцам...

$
0
0
Хорошей пятницы,

подскажите пожалуйста, как реализовать следующую задачку:
Есть пользователи, которые входят и выходят на сайт, собирается статистика, кто с какими правами доступа вошёл.
Есть уже созданный запрос, который группирует, сколько зашло за день и с какими правами вида:

(Права) (Кол-во заходов)
Администраторов 4
Супер-Пользователей 15
Пользователей 90

Как разбить эти данные по часам (с 0 до 23), например

(Права) (0.00-0.59) (1.00-1.59) (2.00-2.59) (3.00-3.59) и тд.
Администраторов 3 0 0 1 ...
Супер-пользователей 10 5 0 0
Пользователей 30 30 10 20

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

Непредсказуемое поведение MAX OVER

$
0
0
запрос!
Хочу чтоб группировка MAX использовалась по максимальной дате!
в результате появляется дубль

select *, max(cmd_id) OVER(partition by dt  order by bdt desc) max_id from(

select cast('27.06.2018 13:13:00'AS DATETIME) as dt, 1 as n, 23045 as cmd_id, cast('26.06.2018 10:20:00' AS DATETIME) as bdt, cast('26.06.2018 11:00:00'AS DATETIME) as edt union all
select cast('27.06.2018 13:13:00'AS DATETIME) as dt, 1 as n, 23046 as cmd_id, cast('27.06.2018 12:00:00' AS DATETIME) as bdt, cast('27.06.2018 13:00:00'AS DATETIME) as edt union all
select cast('27.06.2018 13:13:00'AS DATETIME) as dt, 1 as n, 23059 as cmd_id, cast('27.06.2018 12:48:00' AS DATETIME) as bdt, cast('27.06.2018 13:00:00'AS DATETIME) as edt union all
select cast('27.06.2018 13:14:00'AS DATETIME) as dt, 2 as n, 23045 as cmd_id, cast('26.06.2018 10:20:00' AS DATETIME) as bdt, cast('26.06.2018 11:00:00'AS DATETIME) as edt union all
select cast('27.06.2018 13:14:00'AS DATETIME) as dt, 2 as n,23046 as cmd_id, cast('27.06.2018 12:00:00' AS DATETIME) as bdt, cast('27.06.2018 13:00:00'AS DATETIME) as edt union all
select cast('27.06.2018 13:14:00'AS DATETIME) as dt, 2 as n,23059 as cmd_id, cast('27.06.2018 12:48:00' AS DATETIME) as bdt, cast('27.06.2018 13:00:00'AS DATETIME) as edt union all
select cast('27.06.2018 13:14:00'AS DATETIME) as dt, 2 as n,23056 as cmd_id, cast('27.06.2018 13:13:00' AS DATETIME) as bdt, cast('27.06.2018 13:30:00'AS DATETIME) as edt
)s1

dt	n	cmd_id	bdt	edt	max_id
2018-06-27 13:13:00.000 1 23059 2018-06-27 12:48:00.000 2018-06-27 13:00:00.000 23059
2018-06-27 13:13:00.000 1 23046 2018-06-27 12:00:00.000 2018-06-27 13:00:00.000 23059
2018-06-27 13:13:00.000 1 23045 2018-06-26 10:20:00.000 2018-06-26 11:00:00.000 23059
2018-06-27 13:14:00.000 2 23056 2018-06-27 13:13:00.000 2018-06-27 13:30:00.000 23056 *****ОТКУДА
2018-06-27 13:14:00.000 2 23059 2018-06-27 12:48:00.000 2018-06-27 13:00:00.000 23059
2018-06-27 13:14:00.000 2 23046 2018-06-27 12:00:00.000 2018-06-27 13:00:00.000 23059
2018-06-27 13:14:00.000 2 23045 2018-06-26 10:20:00.000 2018-06-26 11:00:00.000 23059



Что я делаю не так? заранее благодарен

Диаграмма Ганта. КАК?)

$
0
0
Доброй пятницы,

подскажите пожалуйста, как создать диаграмму Ганта, используя средства MS SQL Server 2017 для данных типа


Имя пользователя 1 | время начала сессии | время завершения сессии
Имя пользователя 2 | время начала сессии | время завершения сессии
Имя пользователя 3 | время начала сессии | время завершения сессии
...


+Пример диаграммы Ганта:
Картинка с другого сайта.

Вопрос. Order by

$
0
0
Здравствуйте!

Есть SQL-запрос (без выделенного), который формируется за 6 минут при возвращении 20 000 строк.
+SQL-запрос
WITH
Выгрузка1 AS (
    SELECT
        ...
)
SELECT
	*
FROM
	Выгрузка4
ORDER BY
	[Город],
	[Клиент],
	[Регион ТТ],
	[Код ТТ],
	[Код привязанного ассортимента],
	[Тип общего SKU],
	[Общее SKU],
	[SKU]
Но если добавить ORDER BY, то выполняется дольше полтора часа, даже не дожидался.

Как можно обойти эту проблему? Есть вариант толкать в TEMPORARY TABLE и задавать индексы. Скажите, какие есть другие варианты?

Массив 4-значных чисел преобразовать в тип 'числа'

$
0
0
Данные:
1. есть набор 4-значных чисел
2. исполняется select ... where tr='*'
где * какое-то 4-значное число из набора


Понятно, когда чисел мало, используем или (tr='1234' or tr='3456'), или tr IN ('1234','3456')
Но чисел несколько сотен.

Полагаю, в нормальном варианте можно создать таблицу из одного столбца (временная/постоянная), перебить тип данных, использовать новую таблицу в seltect с inner join.
Но у меня доступ только "зеркало", никакие update и прочее недоступно.

Вопрос: как преобразовать сотни чисел в формат 'число из списка'? Может в IN можно менять тип? Или Word, Exel дают такую возможность замены (чего не нашел)?

функция OBJECT_ID

$
0
0
MS SQL Server 2000. При проверке существования возвращающей табличное значение функции 'fun_multi':
IF OBJECT_ID('fun_multi', 'TF') IS NOT NULL
выдается сообщение:
Invalid parameter 2 specified for object_id.
Хотя:
IF EXISTS (SELECT * FROM sysobjects WHERE (name = 'fun_multi') AND (xtype = 'TF') AND (type = 'TF'))

отрабатывается нормально!
Да и в MS SQL Server 2012 проблем нет. В чем проблема при использовании OBJECT_ID(..., ...)?

Клиентские приложения теряют связь с SQL

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

На сервере крутится служба SQL к которой обращается одновременно около 200 клиентских приложений (серверной части у приложений нет, запросы идут напрямую к SQL). Сама база на SSD диске.

Все хорошо, но бывают моменты с периодичность раз в неделю, когда все клиентские приложения просто зависают напрочь... и сами отвисают через 3-5 минут.

В это время сама база отвечает на запросы без проблем, но клиентские приложения висят. Сам сервер так же доступен - пинги к серверу идут. Но дело не в сети, так как клиентское приложение, установленное на самом сервере так же зависает.

По системному монитору в этот момент было замечено снижение активности диска, т.е. фактически нагрузка c него пропадала - падала загрузка процессора, падали очереди и т.д.

Скажите какие параметры можно дополнительно мониторить для выявления причины?

Возможно это чудит рейд контроллер? Возможно стоит мониторить какие-либо параметры самого SQLSERVER?
В журнале никаких ошибок в журнале нет.

Ошибка в запросе

$
0
0
Доброго времени суток!

Если ли разница в следующих запросах?

UPDATE Table1
SET Table1.Col1 = Table1.Col1 * @Num
WHERE Table1.ID = 1

и

UPDATE Table1
SET Col1 = Col1 * @Num
WHERE ID = 1

Не могу найти ошибку, данный запрос в ХП. Col1 иногда устанавливается в значение NULL.
Из-за чего может быть? Не правильное значение в @Num, если да как уловить?

Сравнение 2 строк

$
0
0
Привет всем!

Подскажите, пожалуйста, как сравнить две строчки и вывести результат сравнения, если это возможно?
Спасибо!

Пример: Есть 2 строчки с тегами html (я после тегов кавычку ставлю, чтобы в таблице здесь на сайте правильно отобразилось)
Header
Changes: <b'>Fruits</b'><br' /> Changes: <b'>Apples</b'><br' /> Changes: <b>Antonovka300</b>
Changes: <b'>Fruits</b'><br' /> Changes: <b'>Apples</b><br' /> Changes: <b'>Antonovka200</b>

Параметр базы "Отложенная устойчивость" для tempdb влияет ли на скорость записи в нее ?

$
0
0
У меня рабочая база и tempdb лежат рядом.
Если в таблицу на tempdb я вставляю строки с включенной "отложенной устойчивостью" или отключенной, то время одно и то же.
А если в таблицу на раб.базе я вставляю строки с включенной "отложенной устойчивостью", то по сравнению отключенным этим параметром скорость возрастает в 5 раз.

Т.е. для tempdb этот параметр как-то по другому работает ?

Оптимизация БД - путем удаления ненужных индексов и добавлением нужных

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

Есть задача которая звучит очень просто
-Нужно удалить ненужные индексы, и добавить нужные

Побродив в просторах интернете выяснил что с помощью Database Engine Tuning Advisor можно на основе статистики понять чего не хватает в бд (какие индексы нужны).
Там склоняется все к тому что надо профайлером записать в файл все что выполняется в бд (писать должно дней 5) и потом файл загрузить в Database Engine Tuning Advisor

Записав в профайлером в файл минут 10 работы сервера , адвизор выдает что нужно создать (статистику , индексы), но ни слова что удалить, наверное не так как то смотрю или статистика не показывает.
Вообщем хочу узнать насколько данный метод актуален, возможно есть более продвинутый метод.

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

DBF-FoxPro

$
0
0
Есть DBF(File Type - FoxPro). Как получить данные из DBF-файла в таблицу MsSQL или как все это реализовать с помощью Python(Pandas) или же сделать конвертацию. Например convert dbf to csv в Pandas.

Ошибка при уменьшении базы (файла) и при изменении начального размера

$
0
0
Добрый день.
Microsoft SQL Server 2008 R2 (SP3-GDR) (KB4057113) - 10.50.6560.0 (X64)

Возникла необходимость сжать базу - освободить место на диске. Объем базы 892 Гб, используемый объем 677 Гб, начальный размер файла 892 Гб (см.приложенный файл).

1. При уменьшении базы (файла) даже на немного (а хотелось бы до 677 Гб) из SSMS или скриптом:
USE [Reports]
DBCC SHRINKFILE (N'Reports' , 892000)

Возникает ошибка:
"Сообщение 0, уровень 11, состояние 0, строка 0
При выполнении текущей команды возникла серьезная ошибка.. При наличии результатов они должны быть аннулированы."


2. И при изменении начального размера тоже возникает ошибка:
------------------------------
ЗАГОЛОВОК: Microsoft SQL Server Management Studio
Действие Сжатие завершилось неудачно для объекта "DataFile" "Reports". (Microsoft.SqlServer.Smo)
ДОПОЛНИТЕЛЬНЫЕ СВЕДЕНИЯ:
При выполнении инструкции или пакета Transact-SQL возникло исключение. (Microsoft.SqlServer.ConnectionInfo)
При выполнении текущей команды возникла серьезная ошибка.. При наличии результатов они должны быть аннулированы. (Microsoft SQL Server, ошибка: 0)

------------------------------
Лог-файл уменьшается, но начальный размер лог-файла нет - та же ошибка.
Сама база доступна, обновляется статистика, реиндекс. Что-то не так, есть ли возможность её все-таки сжать Гб на 200?
Viewing all 7251 articles
Browse latest View live