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

SQL Server 2017 - где взять инсталлятор?

$
0
0
По идее вышел SQL Server 2017.

Не могу найти инсталляторы для девелопер и экспресс, но чтобы полный оффлайн инсталлятор, а не огрызок, который будет ставить через интернет.

Вспоможыте, кто чем может

PIVOT

$
0
0
Народ, гуру ;-)
насмотрелся начитался материала как в SQL развернуть таблицу оп горизонтали..
Везде идет ссылка на коллекцию field in ('fld1','fld2'....'fldn')
Но иногда мы не знаем сколько вариантов столбцов получится. Есть ли возможность сделать запрос таким образом чтобы ни использовать технологию динамического селекта?
Всем спасибо.

Восстановление базы из Bak файла.

$
0
0
Ситуация- есть bak файл с другого компьютера.
Как из него восстановить базу?

Размер данных при выполнении SELECT

$
0
0
У меня проблемка: администратор сети уверяет, что моя программа сильно загружает канал связи. В моей программе, скрипты в основном состоят из SELECT. Причем не использую SELECT *, а перечисляю все необходимые для выборки поля.
Подскажите, как в Management Studio 2014 увидеть размер (в мегабайтах или килобайтах) , который возвращает клиенту , мой SELECT ?

Оптимизация производительности запросов SQL Server 2000

$
0
0
Доброго времени суток. Я новичок в администрировании БД, потребовалось изучение SQL
Прошу помощи, проходил некий тест и всплыл вот такой вот вопрос с несколькими вариантами ответов.
Перечитал тонну литературы, перелопатил весь интернет.
Ответ явно лежит на поверхности, но суть в том что я вопроса то не могу толком понять если честно.

Вопрос.
автор
Вы входите в роль db_owner базы данных userdb. Размер базы составляет 10 Гб, около 85% информации базы состоит из таблиц, содержащих статичную справочную информацию.
Какая последовательность действий позволит повысить производительность запросов и оптимизировать процесс резервного копирования базы данных MS SQL Server 2000?

1. Создать новую базу данных, воспользоваться утилитами DTS для перемещения в эту базу данных справочных таблиц

2. Воспользоваться мастером Database Maintenance Planner для определения интервалов резервного копирования, дефрагментации индексов, проверки целостности данных

3. Создать индексированные представления на основе изменяемых таблиц

4. Создать 2 файловых группы, в одну файловую группу поместить таблицы со справочными данными, в другую - изменяемые таблицы

5. Создать индексированные представления на основе справочных таблиц


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

Не происходит соединение с сервером SQLEXPRESS

$
0
0
Всем привет

Пытаюсь подключиться к серверу SQLEXPRESS, не получается выводится сообщение и я не могу подключиться

После проверки логи проблема с SQL Agent:
2017-10-06 11:07:51 - ! [298] SQLServer Error: 15247, User does not have permission to perform this action. [SQLSTATE 42000] (DisableAgentXPs)
2017-10-06 11:07:51 - ! [298] SQLServer Error: 229, The EXECUTE permission was denied on the object 'sp_sqlagent_has_server_access', database 'msdb', schema 'dbo'. [SQLSTATE 42000] (ConnIsLoginSysAdmin)

Запустила его в службах (services.msc) работает, но во второй раз когда запускаю выводит ошибка 1067

А в sql server configuration Manager он вообще stopped и не меняет на running когда стартую его

У меня MSQ SQL Server 2008 R2 и это не edition прочитала все связанное с этой проблемой решения не нашла


В чем дело помогите решить проблему

Как заставить SQL Server затянуть данные в кэш?

$
0
0
Есть сервер, на нем много ОЗУ.


Процесс SQL Server использует только 5% от ОЗУ.


Как заставить его использовать больше ОЗУ?

MS SQL Server 2016 и Service Broker!

$
0
0
Появилась такая проблема:
Произошла ошибка в кэше событий таймера. Ошибка 2905, состояние 2.
код: 9646
Данная ошибка повторяется без конца пока не забьет полностью жесткий диск!
Почитав статьи в интернете пришел к выводу что все дело в компоненте Service Broker!
Нашел скрипт который останавливает пересылку сообщений:
USE master ;
GO
ALTER DATABASE name_bd SET DISABLE_BROKER ;
GO

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

Microsoft SQL Server 2012 Service Pack 4 (SP4)

sql-процедура преобразования Swift-данных в XML

$
0
0
Рискну спросить )
Под рукой есть у кого рабочая хранимая процедура обработки Swift-данных в тип XML?
Надо... Swift-данные (по операциям, остаткам ЦБ) содержатся в базе в паре табличек...
Заранее спасибо.

MS SQL SERVER 2012R2 алиас для instance

$
0
0
Доброго времени.

Имеется SQLServer 2012R2 + SP3 под именем VMSQLServer-01, на нём инстанс по умолчанию MSSQLSERVER, пытаеемся развернуть в сети софтину и её БД разместить на этом сервере, но вот имя instance оно требует чётко определённое имя instance - ROLLDICE

Полистав форум и покурив мануалы по SQL Server так и не понял, а можно ли для VMSQLServer-01\MSSQLSERVER сделать алиас вида VMSQLServer-01\ROLLDICE т.е. что бы при обращении к БД в instance ROLLDICE попадать в БД с таким же именем, но лежащей в instance MSSQLSERVER на этом же сервере VMSQLServer-01

З.Ы. Надеюсь не сильно запутал, описывая проблему.
З.З.Ы. Можно развернуть новый instance ROLLDICE, но тогда все настройки придётся дублировать, и да instance MSSQLSERVER крутится на порту отличном от стандартного 1433

decimal (20, 11) даёт МЕНЕЕ точный результат чем decimal (18, 9)

$
0
0
Я наивно думал, что чем больше в decimal отведено на “количество разрядов, которое может быть расположено справа от десятичного разделителя”, тем точнее будут вычисления.
То есть я ожидал что тип “decimal (20, 11)” даст бОльшую (или уж по крайней мере не меньшую) точность чем decimal (18, 9).

Был у меня кусок программы (SQL Server 2012) вроде такого

CREATE TABLE #Tmp (
		AmountToRelease decimal (18, 9) 
		,ShareToRelease decimal (18, 9) 
		,ShareToRelease1stApproach decimal (18, 9) 
		,Dest decimal (18, 9) 
)

INSERT INTO #Tmp
	(	
		AmountToRelease
		,ShareToRelease
		,ShareToRelease1stApproach
	)
VALUES
	(   0.823673237,
		0.123456781,
		100.987654329
	)

UPDATE #Tmp
	SET Dest =  AmountToRelease  * (ShareToRelease / ShareToRelease1stApproach)

select * from #Tmp

drop table #Tmp


Он дал результат в поле #Tmp.Dest = 0.001006935.

“Абсолютно точный” же результат должен быть “0.823673237 * (0.123456781 / 100.987654329) = 0.0010069354230626”.

Поэтому я решил увеличить точность всех decimal с (18, 9) на (20, 11)
и переписал код так:

CREATE TABLE #Tmp (
		AmountToRelease decimal (20, 11) 
		,ShareToRelease decimal (20, 11) 
		,ShareToRelease1stApproach decimal (20, 11) 
		,Dest decimal (20, 11)  
)

INSERT INTO #Tmp
	(	
		AmountToRelease
		,ShareToRelease
		,ShareToRelease1stApproach
	)
VALUES
	(   0.823673237,
		0.123456781,
		100.987654329
	)

UPDATE #Tmp
	SET Dest =  AmountToRelease  * (ShareToRelease / ShareToRelease1stApproach)

select * from #Tmp

drop table #Tmp


Он дал результат в поле #Tmp.Dest = 0.00100694000.

То есть это даже хуже чем было при decimal (18, 9).

Почему? И что с этим делать?

Разрушения в БД

$
0
0
Здравствуйте, уважаемые.

Сразу скажу, я 1Сник, с mssql знаком поверхностно.
Прошу помощи в восстановлении БД.

Предыстория. Жила-была БД на 10 sas raid. Контроллер дешевенький, кэш Hdd был не выключен. На соседний сервер настроен logshipping. В один прекрасный день от сервера-приемника logshipping получаем сообщение

1. Could not redo log record (1718035:250:44), for transaction ID (0:807870501), on page (1:4299870), database 'tis103' (database ID 6). Page: LSN = (1717708:15918:51), type = 2. Log: OpCode = 11, context 3, PrevPageLSN: (1716153:4472:2). Restore from a backup of the database, or repair the database.

Полез в логи lohshipping, там нашел сообщение о том, что невозможно восстановить очередной файл журнала, т.к.(в вольном переводе и не помню дословно) файл не является корректным продолжением цепочки.
Что за ошибка я понять не смог, поэтому просто снес logshipping и начал настраивать поновой. В процессе восстановления получаем информацию о том, что полетел один hdd на рабочем сервере и все наглухо зависло, делаем ребут сервера. БАза в suspect, поэтому восстанавливаем копию на начало дня, работаем в ней.

Восстановление DBCC CheckDB ('bitaya', REPAIR_ALLOW_DATA_LOSS) выдает следующее:

Failed to restart the current database. The current database is switched to master.
Msg 5123, Level 16, State 1, Line 3
CREATE FILE encountered operating system error 3(Системе не удается найти указанный путь.) while attempting to open or create the physical file 'L:\tis103_log.ldf'.
Msg 5024, Level 16, State 2, Line 3
No entry found for the primary log file in sysfiles1. Could not rebuild the log.
Msg 5028, Level 16, State 2, Line 3
The system could not activate enough of the database to rebuild the log.
DBCC results for 'bitaya'.
CHECKDB found 0 allocation errors and 0 consistency errors in database 'bitaya'.
Msg 7909, Level 20, State 1, Line 3
The emergency-mode repair failed.You must restore from backup.


Из сообщения вижу, что mssql пытается найти журнал транзакций по старому пути(L: \ tis103_log.ldf), где его конечно же нет, так как базу я подцепил на другом сервере. Подцеплял так: создал БД с именем "bitaya", остановил службу сервера и на место пустых файликов "bitaya.mdf" и "bitaya_log.ldf" положил файлы базы, после чего запустил службу сервера. Пришлось делать так, потому что attach не работал, а копию базы после падения не делали, а просто скопировали файлики mdf и ldf

SQL Server. bcp. Файл форматирования.Кавычки то есть, то нет ... можно ли как-то победить?

$
0
0
Доброе время суток!
SQL Server 2016. Создаю файл форматирования fmt такой строчкой
bcp Base_S.dbo.tbl_S format nul -c -t, -f C:\TC\S.fmt –T

Разделителем полей выступает запятая, но в одном из полей есть запятая внутри значения поля, поэтому само значение поля выделено в кавычки. Чтобы такое принимать я правил руками файл fmt добавляя в разделитель ",\"" и "\",". Все работало хорошо, пока не пришел в руки csv файл в котором в этом поле то есть кавычки, то их нет ... Можно как-то обработать такую ситуацию?

Вот скрин - http://prntscr.com/gufqay

Заранее благодарю за помощь.

как скопировать значение в поле timestamp

$
0
0
Господа!
Есть проблема. после проверки CHECKDB показало что повреждена таблица , рекомендовано лечение repair_allow_data_loss.
Селектом, таблица вычитывается. Создал такуюже, хочу перегнать данные в неё.
Но выдаёт ошибку -

Cannot insert an explicit value into a timestamp column. Use INSERT with a column list to exclude the timestamp column, or insert a DEFAULT into the timestamp column.


почитал "этивашиинтернеты", насколько понял нельзя проинсертить это значение, верно? Как быть в такой ситуации?

Automatic export query from ms sql server into excel on specific time

$
0
0
Всем привет!

Можете помочь в таком вопросе, надо чтобы автоматический экспортировался select query в excel каждый день в два часа ночи
и чтобы excel экспортировался в серверную папку или через ftp

Как это можно реализовать?

Пара вопросов об автоматическом обновлении статистик.

$
0
0
Всем привет!

Подскажите, пожалуйста, каким образом происходит пересчет статистик при срабатывании автоматического обновления (опция [Auto Update Statistics] = true)?
Имею ввиду тип сканирования - full scan, или "какой-то процент строк" | "заданное чиcло строк"?
Где можно увидеть эти параметры для каждой статистики и как, в случае надобности, поменять?

Совсем хорошо было бы ткнуть в нужное место в доке. Читал статьи BOL, посвященные автообновлению статистики, но ответов на эти вопросы не увидел.

Заранее всем спасибо за ответы!

Контроль размера базы данных сервера MS SQL 2008R2 средствами VBA/ T-SQL

$
0
0
WinXP, MS SQL 2008R2 Express, имеется база данных, состоящая из одной таблицы dbo.Statistic, (модель Simple, autogrowth отключен).
Задача - контролировать размер таблицы, и удалять самые старые записи, если размер больше предельного.
Решение:

Периодически вызываю макрос на VBA, где создаю коннекцию к базе и:
1. Определяю размер таблицы
автор
SELECT
SUM(a.total_pages) * 8 / 1024 AS TotalSpaceMB
FROM sys.tables t
INNER JOIN sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id
WHERE
t.NAME LIKE 'Statistic' AND
i.index_id <= 1
GROUP BY
t.NAME


2. Удаляю записи, относящиеся самому последнему дню, если размер слишком большой.

автор
"DELETE FROM dbo.statistic WHERE dateandtime BETWEEN (SELECT MIN(dateandtime) FROM dbo.statistic) AND (SELECT MIN(dateandtime) FROM dbo.statistic) + 1"



Вроде всё должно работать. Но вопросы такие, хотелось бы упростить решение:

1. Можно ли создать процедуру/функцию в SQL Server Management Studio, чтобы она периодически (раз в час например) вызывалась, и выполняла эти действия средствами T-SQL и SQL Server, обойдясь без VBA. Или вызывать её с помощью Windows scheduler. Я никогда не создавал пользовательские процедуры или функции...(
2. SQL запрос для определения размера таблицы слишком наворочен, нет? Я просто нашел готовый универсальный запрос и адаптировал его под себя.

Спасибо.

Как создать алиасы сервера (net client) если установлен только SSMS 2017.2 ?

$
0
0
У себя на компе установил только SQL Server Management Studio 2017.2.
При этом "Configuration Manager" нет.
Все нормально работает, к нужным серверам подключается, но как мне задать алиас сервера ?

Как это работает?

$
0
0
Коллеги!

Достался нам вот такой вот монстр программисткой мысли (см. код ниже).
Работает функция хорошо - замечаний нет (результат ее работы на скрине)

Вопрос такой:
объясните как это работает? )))))


ALTER FUNCTION [dbo].[SplitStrings]
(
   @List VARCHAR(MAX),
   @Delimiter VARCHAR(5)
)
RETURNS TABLE
WITH SCHEMABINDING AS
RETURN
  WITH E1(N)        AS ( SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 
                         UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 
                         UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1),
       E2(N)        AS (SELECT 1 FROM E1 a, E1 b),
       E4(N)        AS (SELECT 1 FROM E2 a, E2 b),
       E42(N)       AS (SELECT 1 FROM E4 a, E2 b),
       cteTally(N)  AS (SELECT 0 UNION ALL 
						SELECT TOP (DATALENGTH(ISNULL(@List,1))) 
                         ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM E42),
       cteStart(N1) AS (SELECT t.N+1 FROM cteTally t
                         WHERE (SUBSTRING(@List,t.N,1) = @Delimiter OR t.N = 0))
  SELECT Item = SUBSTRING(@List, s.N1, ISNULL(NULLIF(CHARINDEX(@Delimiter,@List,s.N1),0)-s.N1,8000))
  FROM cteStart s;
Viewing all 7251 articles
Browse latest View live