Архив рубрики: Windows

Контроллер домена не берёт время с сервера точного времени

На команду

w32tm /resync

отвечает «Синхронизация не выполнена, поскольку нет доступных данных о времени.«
Команда

w32tm /monitor

кажет, примерно, следующее:
DC1.domain.local *** PDC ***[[::1]:123]: 
    ICMP: 0ms задержка 
    NTP: +0.0000000s смещение относительно DC1.domain.local 
        RefID: 'LOCL' [0x4C434F4C] 
        Страта: 1 

Т.е. время берётся с локальных часов, сервер присвоил себе страту 1. Хотя тут есть один ньюанс)) Никсовые машины с такого сервера время брать отказываются. То ли в силу того, что источник LOCL, то ли страта отображается как 1, а на деле 16. Ответ нашелся здесь. В групповую политику по умолчанию внесли Включить NTP-клиент Windows. И она применилась к контроллеру домена. Ключи реестра из Policies переопределили стандартные и сервер пытался брать время сам с себя, после чего уходил в себя брать время со своих часов.

Автор: Василий Иванов
Дата публикации: 2016-03-28T16:26:00.002-07:00

Плюшки SQL Server 2014.

Если лень читать можно сразу посмотреть небольшое видео
1. In-Memory OLTP
Новый механизм хранения данных в SQL Server.
Размещение таблиц в оперативной памяти  In-Memory OLTP для  устранения блокировок доступа к данным и ускорения чтения данных используется также при большом количестве подключений к таблице.
При перезапуске SQL Server после сбоя или запланированного завершения работы для устойчивых, оптимизированных для памяти таблиц повторно создаются экземпляры, чтобы вернуть их в состояние перед завершением работы или сбоем.
Существует два параметра устойчивости для оптимизированных для памяти таблиц:

1.Чтобы воспользоваться механизмом необходимо добавить в базу файл группу inmemory

ALTER DATABASE imoltp ADD FILEGROUP imoltp_file_group
    CONTAINS MEMORY_OPTIMIZED_DATA;

2.Создать таблицу с опцией MEMORY_OPTIMIZED=ON

CREATE TABLE [dbo].[InMemTable] (
  c1 INT NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT=1000000),
  c2 NCHAR(48) NOT NULL
) WITH (MEMORY_OPTIMIZED=ON, DURABILITY = SCHEMA_AND_DATA);
GO

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

CREATE PROCEDURE [dbo].[usp_InsertData]
  @rowcount INT,
  @c NCHAR(48)
  WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
  AS
  BEGIN ATOMIC
  WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english')
  DECLARE @i INT = 1;
  WHILE @i <= @rowcount
  BEGIN
    INSERT INTO [dbo].[inMemTable2](c1,c2) VALUES (@i, @c);
    SET @i += 1;
  END
END
GO

SCHEMA_ONLY (недолговечная таблица)
Этот параметр обеспечивает устойчивость схемы таблицы, в том числе индексов.При перезапуске SQL Server недолговечная таблица создается заново, но запускается без данных.(В отличие от таблицы в базе данных tempdb, где и таблица, и ее данные теряются после перезапуска.) Типичный сценарий для создания недолговечной таблицы — хранение временных данных, например промежуточной таблицы для процесса ETL.Устойчивость SCHEMA_ONLY предотвращает ведение журнала транзакций и создание контрольной точки, что может существенно уменьшить объем операций ввода-вывода.
SCHEMA_AND_DATA (долговечная таблица)
Этот параметр обеспечивает устойчивость как схем, так и данных.Уровень устойчивости данных зависит от того, выбрана ли фиксация транзакции как полностью устойчивая или отложенно устойчивая.Полностью устойчивые транзакции дают гарантию устойчивости данных и схемы аналогично таблице на диске.Отложенная устойчивость улучшает производительность, но может привести к потере данных в случае сбоя или отработки отказа сервера.(Дополнительные сведения об отложенной устойчивости см. в разделе
Сценарии использования In-Memory OLTP
• Интенсивные операции чтения на таблице
• Одновременная вставка большого количества данных из параллельных соединений к серверу
• Staging таблицы для ETL процессов
• Табличные типы in-memory (вместо временных таблиц и табличных переменных)
Подробно все описано на MSDN там же можно взять примеры кода.
Также есть интересные статьи на хабре 1 и 2
Технология пока еще довольно сырая так что существует много ограничений ко
торые не всегда придутся по вкусу.
Ограничения:
• Не поддерживаются DML триггеры
• Отсутствуют FOREIGN KEY и CHECK constraints
• Единственным уникальным индексом может быть только PRIMARY KEY
• Максимум можно создать 8 индексов, включая PRIMARY KEY
Не поддерживаемые типы данных
• DATETIMEOFFSET
• GEOGRAPHY
• GEOMETRY
• HIERARCHYID
• Large Objects (LOBs). For example, varchar(max), nvarchar(max),
varbinary(max), image, xml, text, and ntext.
• ROWVERSION
• sql_variant
• CLR functions
• User-defined types (UDTs)
2. PowerView для многомерных моделей
Раньше Power View работал только на реляционных данных, с 2014 версии можно использовать OLAP кубы в качестве источников данных Power View.
Это несомненный плюс для новой версии SQL сервера.
Отчет на многомерном источнике теперь может построить любой пользователь и поделиться им с коллегой через портал SharePoint.
Подробно также описано на MSDN .
Как запустить это дело на SharePoint описано тут
3. Обновляемые колоночные индексы
Появились еще в SQL Server 2012, для хранилищ данных и оптимизации запросов с  группировкой и агрегирующими функциями.
Однако появились в достаточно сыром виде  с существенным ограничением,  такие индексы нельзя было обновлять напрямую, только через задницу: удалить индекс, обновить данные и заново создать индекс.
В 2014 версии удалось победить это тупое ограничение и можно спокойно без извращений обновлять индексы, заработал таки REBUILD.
CREATE NONCLUSTERED COLUMNSTORE INDEX csindx_simple
ON SimpleTable
(OrderDateKey, DueDateKey, ShipDateKey)
WITH (DROP_EXISTING =  ON,
    MAXDOP = 2)
ON «default»
GO
— update mytable —
ALTER INDEX mycolumnstoreindex on mytable REBUILD
Как создать индекс  можно посмотреть на MSDN.  Интересно также написано тут
Небольшое  видео по теме
4. Расширяемый буферный пул  
Предлагается использовать в системах где память расходуется по максимуму через использование SSD дисков.
Включить опцию очень легко. Для этого достаточно использовать команду ALTER SERVER CONFIGURATION и указать расположение файла и его размер, который будет использоваться в качестве Buffer Pool Extension.
ALTER SERVER configuration
SET buffer pool extension
    ON (FILENAME = 'X:MyCache.bpe', SIZE = 64 gb);
GO
Отключается Buffer Pool Extension следующей командой.
ALTER SERVER configuration
SET buffer pool extension OFF;
GO
Сценарий использования
 ·      Ее рекомендуется использовать для OLTP систем, в которых преобладают запросы на чтение данных.
·      Нет никаких рисков потери данных, т.к. BPE кэширует только «чистые» страницы. При с

Дать права к представлению без права на таблицу.

В ситуации когда пользователь должен видеть только определенные данные из таблицы или не хочется заморачиваться с правами на таблицу
пригодится использование механизма цепочек владения.

Если кратко то  в случае когда  объектами владеет один и тот же  владелец то включается механизм цепочки владения  который позволяет исключить проверку прав для входящих в процедуру  или представление объектов.
Например хотим создать отдельную схему и дать доступ пользователю только на объекты данной схемы. Подробнее можно почитать тут
Создаем схему указываем владельца dbo, т.к будем использовать  в  представлениях и процедурах объекты данной схемы, таким образом включается цепочка наследования.
! Необходимо указать правильного владельца сразу иначе цепочка оборвется и придется пересоздавать схему.
CREATE SCHEMA [MDM] AUTHORIZATION [dbo]
Далее создаем представление, которое использует например  таблице TEST в схеме dbo
CREATE VIEW MDM.TESTVIEW AS
SELECT *
FROM dbo.TEST
Даем права нашему пользователю на селект и  грант, без гранта работать не будет.
GRANT SELECT , VIEW DEFINITION ON MDM.TESTVIEW TO [TestUser] WITH GRANT OPTION
Проверяем доступ  к представлению и убеждаемся что все работает

PS скриптом ниже можно проверить все права пользователя
EXECUTE AS LOGIN = N'TestUser';
GO
DECLARE @login NVARCHAR(256), @user NVARCHAR(256);
SELECT @login = login_name FROM sys.dm_exec_sessions WHERE session_id = @@SPID;
SELECT @user = d.name
  FROM sys.database_principals AS d
  INNER JOIN sys.server_principals AS s
  ON d.sid = s.sid
  WHERE s.name = @login;
SELECT u.name, r.name
  FROM sys.database_role_members AS m
  INNER JOIN sys.database_principals AS r
  ON m.role_principal_id = r.principal_id
  INNER JOIN sys.database_principals AS u
  ON u.principal_id = m.member_principal_id
  WHERE u.name = @user;
SELECT class_desc, major_id, permission_name, state_desc
  FROM sys.database_permissions
  WHERE grantee_principal_id = USER_ID(@user);
GO
REVERT;

Автор: Roman D
Дата публикации: 2016-03-04T06:42:00.001-08:00

Функция для подсчета количества рабочих часов

Бывает иногда полезной такая функция,  рассчитывает количество рабочих часов между датами
DECLARE @startdate datetime
DECLARE @enddate DATETIME
SET @startdate = '2015-04-28 12:33:19.000'
SET @enddate = '2015-04-30 09:45:20.000'
SELECT [dbo].[ufn_CalcWorkTime] (@startdate, @enddate) 
Результат расчета в часах
Текст самой функции
ALTER FUNCTION [dbo].[ufn_CalcWorkTime]
(
       @startdate     DATETIME,
       @enddate       DATETIME
)
RETURNS DECIMAL(10, 3)
AS
BEGIN
       —DECLARE @startdate datetime
       —DECLARE @enddate DATETIME
       DECLARE @ldate DATETIME,
               @rdate DATETIME,
               @ldaystartdate DATETIME,
               @rdaystartdate DATETIME,
               @StartWorkTime AS VARCHAR(8) = ' 9:30:00',
               @EndWorkTime AS VARCHAR(8) = ' 18:30:00',
               @DayzBetween AS INT
      
       DECLARE @result AS DECIMAL(10, 3)
       DECLARE @add_days       INT,
               @minus_days     INT
       —SET @startdate = '2015-12-18 16:07:54.000'
       —SET @enddate = '2015-12-22 12:21:56.000'
      
       SET @ldate = CAST(
               (CONVERT(VARCHAR(10), @startdate, 102) + @EndWorkTime) AS DATETIME
           )
      
       SET @ldate = CASE
                         WHEN @ldate > @startdate THEN @ldate
                         ELSE @startdate
                    END
      
       SET @ldaystartdate = CAST(
               (CONVERT(VARCHAR(10), @startdate, 102) + @StartWorkTime) AS DATETIME
           )
      
       SET @rdaystartdate = CASE
                                 WHEN @enddate > @rdaystartdate THEN @rdaystartdate
                                 ELSE @enddate
                            END
      
       SET @rdate = CAST(
               (CONVERT(VARCHAR(10), @enddate, 102) + @EndWorkTime) AS DATETIME
           )
      
       SET @rdate = CASE
                         WHEN @rdate < @enddate THEN @rdate
                         ELSE @enddate
                    END
      
       SET @rdaystartdate = CAST(
               (CONVERT(VARCHAR(10), @enddate, 102) + @StartWorkTime) AS DATETIME
           )
      
       SET @rdaystartdate = CASE
                                 WHEN @enddate > @rdaystartdate THEN @rdaystartdate
                                 ELSE @enddate
                            END
      
       SET @DayzBetween = (
               (
                   DATEDIFF(
                       dd,
                       CONVERT(VARCHAR(10), @startdate, 102),
                       CONVERT(VARCHAR(10), @enddate, 102)
                   )
               )
               -(DATEDIFF(wk, @StartDate, @EndDate) * 2)
               -(CASE WHEN DATEPART(DW, @StartDate) = 6 THEN 1 ELSE 0 END)
               -(CASE WHEN DATEPART(DW, @StartDate) = 7 THEN 1 ELSE 0 END)
           )
      
       —добавим рабочие праздники
       SELECT @add_days = COUNT(*)
       FROM   HolidaysAndWeekends (NOLOCK)
       WHERE  Дата BETWEEN @startdate AND @enddate
              AND [Рабочий День] = 1
      
      
       —вычтем выходные рабочие дни
       SELECT @minus_days = COUNT(*)
       FROM  HolidaysAndWeekends (NOLOCK)
     

Экспортировать историю браузера Chrome


Экспортировать историю браузера Chrome

Rudolf Manusadzhyan:

Здравствуйте, Кайрат.

История в Chrome хранится в SQLite, (в MacOS и Linux он скорее всего уже имеется, а в Windows надо будет установить).
Затем вам нужно будет перейти в папку с Chrome (C:UsersВАШ_ЛОГИНAppDataLocalGoogleChromeUser DataDefault) и найти там файл History (в нём то и хранится вся наша история, но нельзя так просто взять и просмотреть содержимое =))

Тут запускаем командную строку и пишем такую длинную команду:

sqlite History «select datetime(last_visit_time/1000000-11644473600,'unixepoch'),url from urls order by last_visit_time desc» > MyHistory.txt

Таким образом мы получили файл MyHistory.txt, который можно просмотреть в любом текстовом редакторе =)

P.S. Если выдаёт ошибку типа «Error: database is locked«, значит у вас открыт браузер. Закройте Chrome и попробуйте ещё раз =

Alexey Semyonov:

Rudolf спасибо,  мне помог твой ответ.
Только у меня есть еще есть несколько дополнительные вопросов, так как я почти ничего не понимаю в настройках Google браузера.
Допустим у меня еще не установлен Total Commander, и тогда как у тебя написано  «запускаем командную строку»,  но под командной строкой я подумал CMD.exe,  и запустил =)   а как туда вставить эту длинную строчку из буфера? Может это и глупый вопрос.
Вот из этой твоей ссылки на SQLite — http://sqlite.org/sqlite-3_7_3.zip,  я распаковал  sqlite3.exe, но наверно у меня уже есть SQLite в Win7  Loginvovchyk x64 за Октябрь.  Запуская этот файл sqlite3.exe появляется окно как CMD.exe, но справка в ней не работает и ничего не выдает help, в какой каталог на диске С: нужно скопировать sqlite3.exe чтобы работала ? и еще бы ссылку как пользоваться этой утилитой. 
Потом я скопировал History, sqlite3.exe в один каталог и запустил команду в Total Commander которую ты дал:
sqlite3.exe History «select datetime(last_visit_time/1000000-11644473600,'unixepoch'),url from urls order by last_visit_time desc» > MyHistory.txt
и все получилось, текстовый файл на 681405 байт, так это же за несколько дней история, а если бы за весь год то тут у меня будут проблемы при его просмотре, так как чтобы сразу открыть ссылку из AkelPad нужно поставить пробел перед ссылкой в этом тестовом файле.
И поэтому второй вопрос как сделать, чтобы при экспорте в текстовый файл перед http:// вставлялся еще пробел  ?
И вместо этой строки:  2014-12-12 11:16:25|http://blogs.technet.com/b/ken/
Была бы эта: 2014-12-12 11:16:25| http://blogs.technet.com/b/ken/
Тогда ссылка сразу открывается без дополнительных нажатий на

15 вещей, которые Chrome умеет делать без расширений

http://lifehacker.ru/2014/06/25/15-chrome/

15 вещей, которые Chrome умеет делать без расширений

1,2k 

 

 Поделиться в Facebook

 

 Поделиться ВКонтакте

 

 

Chromium

Браузер Google за последние пять лет вырвался далеко вперёд по числу пользователей в сравнении с конкурентами. Разработчики Chrome всегда делали упор на скорость работы, а не на функциональность, которая может расширяться до бесконечности благодаря расширениям. И всё же, разменяв четвёртый десяток версий, браузер научился делать множество в