Архив метки: SQL

PostgreSQL. Добавление пользователей с правами на чтение.

Создание группы:

CREATE ROLE user_group;

Создание пользователя:

CREATE ROLE user_db WITH LOGIN ENCRYPTED PASSWORD ‘passdb’;

Добавление пользователя в группу:

GRANT user_group TO user_db;

Выдача прав на подключение к БД:

GRANT CONNECT ON DATABASE server_DB TO user_group;

Выдача права на чтение (только на выполнение SELECT):

GRANT SELECT ON all tables IN schema public TO user_group;

 

0

PostgreSQL выполнение запросов к нескольким базам

В PostgreSQL не существует способа создать запрос к базам данных отличным от текущей (https://wiki.postgresql.org/), но выполнять запросы между базами возможно при помощи расширения dblink (https://www.postgresql.org/docs/9.6/static/dblink.html).

Читать далее

0

MS SQL Включение Service Broker в БД

Для того чтобы проверить у каких БД включен Service Broker, необходимо выполнить скрипт:

USE master
SELECT name, is_broker_enabled FROM sys.databases

Чтобы включить Service Broker, необходимо чтобы к нему не было открытых соединений. Включить Service Brocker можно скриптом:

ALTER DATABASE [DatabaseName] SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE

Выключить Service Broker можно скриптом:

ALTER DATABASE [DatabaseName] SET DISABLE_BROKER WITH ROLLBACK IMMEDIATE

Источник: http://zarez.net/?p=755

0

MS SQL Анализ фрагментации индексов в БД

USE DatabaseName
SELECT DatbaseName = DB_NAME(),
       TableName = OBJECT_NAME(s.[object_id]),
       IndexName = i.name,
       i.type_desc,
       [Fragmentation %] = ROUND(avg_fragmentation_in_percent,2),
       page_count,
       partition_number,
       'alter index [' + i.name + '] on [' + sh.name + '].['+ OBJECT_NAME(s.[object_id]) + '] REBUILD' + case                                                                                                           when p.data_space_id is not null then ' PARTITION = '+convert(varchar(100),partition_number)                                                                                                           else ''                                                                                                         end + ' with(maxdop = 4,  SORT_IN_TEMPDB = on)' [sql]
  FROM sys.dm_db_index_physical_stats(db_id(),null, null, null, null) s
  INNER JOIN sys.indexes as i ON s.[object_id] = i.[object_id] AND
                                 s.index_id = i.index_id
  left join sys.partition_schemes as p on i.data_space_id = p.data_space_id
  left join sys.objects o on  s.[object_id] = o.[object_id]
  left join sys.schemas as sh on sh.[schema_id] = o.[schema_id]
  WHERE s.database_id = DB_ID() AND
        i.name IS NOT NULL AND
        OBJECTPROPERTY(s.[object_id], 'IsMsShipped') = 0 and
        page_count > 100 and
        avg_fragmentation_in_percent > 10
  ORDER BY ROUND(avg_fragmentation_in_percent,2) DESC, page_count
0

MS SQL определение Job-ы от которой запущена транзакция

Если в выводе процедуры sp_WhoIsActive (http://whoisactive.com/) искомая транзакция (например, транзакция которая долго выполняется или вешает другие транзакции) в поле program_name содержит запись вида:

SQLAgent - TSQL JobStep (Job 0x3E7DB8B391F4CB4AA406DDF1A3644E5B : Step 1)

Значит эта транзакция запущена Job-ой. Чтобы определить что это за Job-а, необходимо подключиться студией SSMS к инстансу сервера с которого запущена Job-а — в выводе sp_WhoIsActive сервер указан в поле host_name, затем выполнить на нем запрос:

SELECT * FROM msdb.dbo.sysjobs WHERE CONVERT(binary(16), job_id)=0xC50B629D34BB244589E226D81312BECF

Подставив после знака «=» значение из записи в поле program_name.

В результате выполнения запроса в поле name будет содержаться название искомой Job-ы из SQL Server Agent. Номер шага указан в выводе процедуры sp_WhoIsActive после ID Job-ы (Step).

0