четверг, 19 ноября 2020 г.

среда, 22 июля 2020 г.

Вывод длинной строки в nvarchar

Процедура, позволяющая вывести очень длинный текст переменной nvarchar. Полезно в случаях, когда переменная используется для перекладки динамического кода.

ALTER PROCEDURE [dbo].[Print_Unlimited]
    @String NVARCHAR(MAX)
AS

BEGIN

    BEGIN TRY
    ---------------------------------------------------------------------------------

    DECLARE @CurrentEnd BIGINT; /* track the length of the next substring */
    DECLARE @Offset TINYINT; /* tracks the amount of offset needed */
    SET @String = replace(replace(@String, CHAR(13) + CHAR(10), CHAR(10)), CHAR(13), CHAR(10))

    WHILE LEN(@String) > 1
    BEGIN
        IF CHARINDEX(CHAR(10), @String) BETWEEN 1 AND 4000
        BEGIN
            SET @CurrentEnd =  CHARINDEX(CHAR(10), @String) -1
            SET @Offset = 2
        END
        ELSE
        BEGIN
            SET @CurrentEnd = 4000
            SET @Offset = 1
        END   
        PRINT SUBSTRING(@String, 1, @CurrentEnd) 
        SET @String = SUBSTRING(@String, @CurrentEnd + @Offset, LEN(@String))   
    END /*End While loop*/

    ---------------------------------------------------------------------------------
    END TRY
    BEGIN CATCH
        DECLARE @ErrorMessage VARCHAR(4000)
        SELECT @ErrorMessage = ERROR_MESSAGE()    
        RAISERROR(@ErrorMessage,16,1)
    END CATCH
END

вторник, 21 июля 2020 г.

Скрипт размер кубов SSAS

Скрипт выполняется в Power Shell и может быть выполнен с другого сервера.

Param($ServerName="server_name")
$loadInfo = [Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices")
$server = New-Object Microsoft.AnalysisServices.Server
$server.connect($ServerName)
if ($server.name -eq $null) {
 Write-Output ("Server '{0}' not found" -f $ServerName)
 break
 }
 
$sum=0
foreach ($d in $server.Databases )
 {
 Write-Output ("Database: {0}; Status: {1}; Size: {2}MB" -f $d.Name, $d.State, ($d.EstimatedSize/1024/1024).ToString("#,##0") )
 $sum=$sum+$d.EstimatedSize/1024/1024
 }
 
$SizeGB=$Sum/1024
 
write-host 'Sum of Database = '$sum 'MB'
Write-host 'Total Size of Cube Databases =' $SizeGB  'GB'

пятница, 3 июля 2020 г.

Утилита для просмотра параметров VPN подключений


Dialupass

This utility enumerates all dialup/VPN entries on your computers, and displays their logon details: User Name, Password, and Domain. You can use it to recover a lost password of your Internet connection or VPN.
Dialupass also allows you to save the dialup/VPN list into text/html/csv/xml file, or copy it to the clipboard.

вторник, 11 февраля 2020 г.

SSMS Schema Folders

Удобное расширение для группировки объектов по схемам.

This an extension for SQL Server Management Studio 2012, 2014, 2016, 17 and 18. It groups sql objects in Object Explorer (tables, views, etc.) into schema folders.

пятница, 22 ноября 2019 г.

Мониторинг SQL server

Статья про мониторинг использования памяти, метрики буферного кэша, DROPCLEANBUFFERS, средняя продолжительность жизни страниц памяти


SQL Server In-Memory database internal memory structure monitoring

Полезные скрипты для оценки занимаемой памяти

среда, 3 апреля 2019 г.

Создание linked server к базе Oracle


Шаг 1. Установить Oracle Provider for OLE DB (обратиться к администратору базы Oracle, так как потребуется указать пользователя, имеющего права на клиентскую часть).

Шаг 2. Настроить провайдер, а именно установить свойство Allow inprocess - Enable.

понедельник, 21 января 2019 г.

SSAS: Which change makes the cube/dimension unprocessed?

На многих проектах есть OLAP кубы с большим объемом данных, полная сборка которых занимает много времени. Поэтому важно понимать, какие изменения после обновления проекта приведут к состоянию Unprocessed и потребуют полной обработки куба. Статус обработки измерений также критичен, так как если измерение становится unprocessed, то и все кубы, в которых оно используется, тоже становятся unprocessed.

четверг, 10 января 2019 г.

Парсинг структуры json файлов с помощью Python


Возникла задача: нужно загрузить в базу данных все данные из json файлов. Иерархия и состав атрибутов неизвестен, типы данных - тоже. Следующий скрипт позволяет построить набор уникальных веток дерева среди всех найденных вариантов в виде разрозненных списков. Сканируются все файлы в заданной директории. 

Остановка процесса SSIS вручную

Если нужно вручную остановить запущенный процесс ETL (например, с помощью агента), можно 
выполнить следующие действия:

1. Найти процесс
select * from catalog.executions where end_time is null

2. Остановить операцию по execution_id

exec catalog.stop_operation  @operation_id =  11

среда, 29 августа 2018 г.

Переименование схемы для представлений

Возникла задача переименования схемы для всех представлений, созданных в другой схеме. Да, можно в Object explorer details выделить все представления и с помощью search and replace переименовывать схемы, а потом запустить скрипт, но вот существует скрипт. Может, пригодится :)

понедельник, 13 августа 2018 г.

T-SQL script for delete all rows from MDS entity

truncate table stg.[TableName_Leaf]

insert into stg.[TableName_Leaf]
(
ImportType
,ImportStatus_ID
,BatchTag
,Code
)
select
4 as ImportType
,0 as ImportStatus_ID
,'DeleteALL' as BatchTag
,Code
from
mdm.TableName -- Integration Management View

exec stg.[udp_TableName_Leaf] @VersionName = 'VERSION_1', @LogFlag = 0, @BatchTag = 'DeleteALL'

четверг, 31 мая 2018 г.

Парсер строки с разделителями на T-SQL

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

вторник, 29 мая 2018 г.

Запуск Jupyter notebook внутри другого ноутбука


import io
from nbformat import current
def execute_notebook(nbfile):
 
    with io.open(nbfile) as f:
        nb = current.read(f, 'json')
 
    ip = get_ipython()
 
    for cell in nb.worksheets[0].cells:
        if cell.cell_type != 'code':
            continue
        ip.run_cell(cell.input)

execute_notebook("ntbk.ipynb")

воскресенье, 29 апреля 2018 г.

пятница, 23 марта 2018 г.

Загрузка курса валют за период с сайта ЦБ


Для доступа к API ЦБ используем библиотеку pycbrf. Главная проблема в написании скрипта возникла на этапе построчной записи в файл, потому что многочисленные туториалы в интернете просто не работали по разным причинам либо были перенасыщены лишними строчками кода. Скрипт использовался внутри Jupyter Notebook, поэтому даты просто забиты.

среда, 7 февраля 2018 г.

T-SQL script for quick select from csv

CREATE TABLE #entities (
  Model nvarchar(max),
  Entity nvarchar(max), 
  Description nvarchar(max)
); -- some fields, need from csv file

BULK INSERT #entities
FROM 'D:\test\entities.csv' -- some csv file into the file system
WITH
(
  FIRSTROW = 2,
  DATAFILETYPE='char',
  FIELDTERMINATOR = ';',
  ROWTERMINATOR = '\n',
  TABLOCK,
  KEEPNULLS
);

select * from #entities;


drop table #entities;