Verification: a143cc29221c9be0

No php exe has been selected

No php exe has been selected

Содержание

Сообщения о временных ошибках (40197, 40613 и др.)

Инфраструктура Azure способна динамически изменять конфигурацию серверов при высокой рабочей нагрузке на службу баз данных SQL. Такое динамическое поведение может привести к разрыву подключения между клиентской программой и базой данных или экземпляром. Такое состояние называется временной ошибкой. События перенастройки базы данных обычно происходят в запланированном случае (например, при обновлении программного обеспечения) или в незапланированном случае (например, при сбое процесса или балансировке нагрузки). Большей частью события перенастройки кратковременные и должны завершаться в течение 60 секунд максимум. Тем не менее завершение этих событий иногда может занимать больше времени, например когда большая транзакция приводит к длительному восстановлению. В следующей таблице перечислены различные временные ошибки, которые могут отображаться в приложениях при подключении к Базе данных SQL

Список кодов ошибок для временных сбоев

Код ошибки Статус Описание
4060 16 Невозможно открыть базу данных %.*ls, запрашиваемую именем входа. Сбой при входе. Дополнительные сведения см. в разделе Ошибки с 4000 по 4999
40197 17 При обработке вашего запроса служба обнаружила ошибку. Повторите попытку. Код ошибки: %d.

Эта ошибка возникает, если служба не работает по причине обновления программного или аппаратного обеспечения, аппаратных ошибок или проблем при отработке отказа. Код ошибки (%d), указанный в сообщении об ошибке 40197, содержит дополнительные сведения о характере сбоя или отработки отказа. В сообщении об ошибке 40197 может быть указан код ошибки 40020, 40143, 40166 или 40540.

При повторном подключении происходит автоматическое подключение к рабочей копии базы данных. Приложение должно зафиксировать ошибку 40197, зарегистрировать указанный в сообщении код ошибки (%d) для устранения неполадок и повторять попытки подключения к базе данных SQL, пока не появится доступ к ресурсам, а подключение не будет восстановлено. Дополнительные сведения см. в разделе Временные ошибки.

40501 20 Служба занята. Повторите запрос через 10 секунд. Идентификатор инцидента: %ls. Код: %d. Дополнительные сведения см. в разделе:
•  Ограничения ресурсов логического сервера SQL Server
•  Ограничения на основе DTU для отдельных баз данных
•  Ограничения на основе DTU для пулов эластичных баз данных
•  Ограничения на основе виртуального ядра для отдельных баз данных
•  Ограничения на основе виртуального ядра для пулов эластичных баз данных
•  Ограничения ресурсов Управляемого экземпляра SQL Azure.
40613 17 База данных %.*ls на сервере %.*ls в данный момент недоступна. Повторите попытку подключения позже. Если проблема повторится, обратитесь в службу поддержки пользователей и сообщите идентификатор трассировки сеанса %.*ls.

Эта ошибка может возникать в том случае, если с базой данных уже установлено выделенное административное соединение (DAC). Дополнительные сведения см. в разделе Временные ошибки.

49918 16 Не удается обработать запрос. Недостаточно ресурсов для обработки запроса.

Служба занята. Повторите запрос позже. Дополнительные сведения см. в разделе:
•  Ограничения ресурсов логического сервера SQL Server
•  Ограничения на основе DTU для отдельных баз данных
•  Ограничения на основе DTU для пулов эластичных баз данных
•  Ограничения на основе виртуального ядра для отдельных баз данных
•  Ограничения на основе виртуального ядра для пулов эластичных баз данных
•  Ограничения ресурсов Управляемого экземпляра SQL Azure.

49919 16 Невозможно обработать запрос на создание или обновление. Для подписки "%ld" выполняется слишком много операций создания или обновления.

Служба занята обработкой нескольких запросов на создание или обновление для вашей подписки или сервера. В данный момент запросы блокируются для оптимизации ресурсов. Выполните запрос sys.dm_operation_status для ожидающих операций. Подождите, пока выполнятся ожидающие запросы на создание или обновление, либо удалите один из ожидающих запросов и повторите свой запрос позже. Дополнительные сведения см. в разделе:
•  Ограничения ресурсов логического сервера SQL Server
•  Ограничения на основе DTU для отдельных баз данных
•  Ограничения на основе DTU для пулов эластичных баз данных
•  Ограничения на основе виртуального ядра для отдельных баз данных
•  Ограничения на основе виртуального ядра для пулов эластичных баз данных
•  Ограничения ресурсов Управляемого экземпляра SQL Azure.

49920 16 Не удается обработать запрос. Для подписки «%ld» выполняется слишком много операций.

Служба занята обработкой нескольких запросов для этой подписки. В данный момент запросы блокируются для оптимизации ресурсов. Выполните запрос sys.dm_operation_status для состояния операции. Подождите, пока выполнятся ожидающие запросы, либо удалите один из ожидающих запросов и повторите свой запрос позже. Дополнительные сведения см. в разделе:
•  Ограничения ресурсов логического сервера SQL Server
•  Ограничения на основе DTU для отдельных баз данных
•  Ограничения на основе DTU для пулов эластичных баз данных
•  Ограничения на основе виртуального ядра для отдельных баз данных
•  Ограничения на основе виртуального ядра для пулов эластичных баз данных
•  Ограничения ресурсов Управляемого экземпляра SQL Azure.

4221 16 Произошел сбой при входе в базу данных-получатель для чтения из-за длительного ожидания выполнения HADR_DATABASE_WAIT_FOR_TRANSITION_TO_VERSIONING. Вход в реплику невозможен, так как отсутствуют версии строк для транзакций, которые выполнялись при перезапуске реплики. Чтобы устранить проблему, откатите реплику или зафиксируйте активные транзакции в первичной реплике. Большинство таких случаев можно избежать, если не выполнять длительные транзакции записи в базе данных-источнике.

Порядок устранения временных проблем подключения

  1. Проверьте панель мониторинга служб Microsoft Azure на наличие каких-либо известных сбоев, произошедших в то время, когда приложение сообщало об ошибках.
  2. Приложения, подключающиеся к облачной службе, такой как база данных SQL Azure, должны ожидать периодические события перенастройки и реализовывать логику повторов для обработки этих ошибок, а не отображать ошибки приложения пользователям.
  3. Если база данных близка к исчерпанию доступных ресурсов, может возникать временная проблема подключения. Дополнительные сведения см. в статье Обзор ограничений ресурсов базы данных SQL Azure.
  4. Если проблемы подключения остаются или интервал, во время которого приложение обнаруживает ошибку, превышает 60 секунд, а также если в определенный день такая ошибка возникает многократно, зарегистрируйте запрос на поддержку Azure, нажав Получить поддержку на сайте Поддержка Azure .

Реализация логики повторов

Настоятельно рекомендуем включить в клиентской программе логику повторных попыток, чтобы программа смогла восстановить подключение после определенного периода, позволяющего временной ошибке самоустраниться. Рекомендуется подождать 5 секунд, прежде чем выполнять первую повторную попытку. Повторная попытка после ожидания менее 5 секунд может привести к перегрузке облачной службы. Для каждой последующей повторной попытки ожидание должно увеличиваться экспоненциально, но не более чем до 60 секунд.

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

  • Выполнение устойчивого подключения к SQL с помощью ADO.NET
  • Выполнение устойчивого подключения к SQL с помощью PHP

Дополнительные сведения об обработке временных ошибок в приложении см. в статье Устранение временных ошибок подключения к базе данных SQL

Обсуждение периода блокировки для клиентов, которые используют ADO.NET, см. в статье Организация пулов соединений (ADO.NET).

Эта проблема возникает в том случае, если приложению не удается подключиться к серверу.

Чтобы устранить эту проблему, попробуйте выполнить действия (в указанном порядке), описанные в разделе Инструкции по устранению распространенных неполадок с подключением.

Сервер/экземпляр не найден или недоступен (ошибки 26, 40, 10053)

Ошибка 26: ошибка при поиске указанного сервера

System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections.(provider: SQL Network Interfaces, error: 26 – Error Locating Server/Instance Specified)

Ошибка 40: невозможно открыть соединение с сервером.

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

Ошибка 10053: ошибка на транспортном уровне при получении результатов с сервера

10053: A transport-level error has occurred when receiving results from the server. (Provider: TCP Provider, error: 0 - An established connection was aborted by the software in your host machine)

Эти проблемы возникают в том случае, если приложению не удается подключиться к серверу.

Чтобы устранить эти проблемы, попробуйте выполнить действия (в указанном порядке), описанные в разделе Инструкции по устранению распространенных неполадок с подключением.

Не удается подключиться к серверу из-за проблем с брандмауэром

Ошибка 40615: не удается подключиться к

Чтобы устранить эту проблему, настройте параметры брандмауэра в базе данных SQL с помощью портала Azure.

Ошибка 5: не удается подключиться к

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

Не удалось войти на сервер (ошибки 18456, 40531)

Пользователю '' не удалось войти в систему

Login failed for user ''.This session has been assigned a tracing ID of ''. Provide this tracing ID to customer support when you need assistance. (Microsoft SQL Server, Error: 18456)

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

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

  1. Войдите на сервер с помощью SQL Server Management Studio (SSMS).

  2. Отправьте следующий SQL-запрос в базе данных master, чтобы проверить, отключено ли имя для входа.

    SELECT name, is_disabled FROM sys.sql_logins;
    
  3. Если имя отключено, включите его с помощью следующей инструкции:

    ALTER LOGIN  ENABLE;
    
  4. Если имя пользователя для входа SQL не существует, внесите изменения и отправьте следующий SQL-запрос, чтобы создать новое имя входа SQL:

    CREATE LOGIN 
    WITH PASSWORD = '';
    GO
    
  5. В обозревателе объектов SSMS разверните узел Базы данных.

  6. Выберите базу данных, на доступ к которой пользователю нужно предоставить разрешение.

  7. Щелкните правой кнопкой мыши значок Безопасность, а затем выберите Новый, Пользователь.

  8. Подставьте значения в созданный скрипт с заполнителями и выполните следующий запрос SQL:

    CREATE USER 
    FOR LOGIN 
    WITH DEFAULT_SCHEMA = ;
    GO
    
    -- Add user to the database owner role
    EXEC sp_addrolemember N'db_owner', N'';
    GO
    

    Также можно использовать sp_addrolemember, чтобы сопоставить данные определенных пользователей с конкретными ролями базы данных.

    Примечание

    В базе данных SQL Azure рассмотрите новый синтаксис ALTER ROLE для управления членством в роли базы данных.

Дополнительные сведения см. в статье Управление базами данных и учетными записями в Базе данных SQL Azure.

Ошибки, связанные с истечением времени ожидания подключения.

System. Data. SqlClient. SqlException (0x80131904): время ожидания подключения истекло

System.Data.SqlClient.SqlException (0x80131904): Connection Timeout Expired. The timeout period elapsed while attempting to consume the pre-login handshake acknowledgement. This could be because the pre-login handshake failed or the server was unable to respond back in time. The duration spent while attempting to connect to this server was - [Pre-Login] initialization=3; handshake=29995;

System. Data. SqlClient. SqlException (0x80131904): время ожидания истекло

System.Data.SqlClient.SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

System.Data.Entity.Core.EntityException: произошла ошибка базового поставщика при открытии

System.Data.Entity.Core.EntityException: The underlying provider failed on Open. -> System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. -> System.ComponentModel.Win32Exception: The wait operation timed out

Не удается подключиться к серверу

Cannot connect to .ADDITIONAL INFORMATION:Connection Timeout Expired. The timeout period elapsed during the post-login phase. The connection could have timed out while waiting for server to complete the login process and respond; Or it could have timed out while attempting to create multiple active connections. The duration spent while attempting to connect to this server was - [Pre-Login] initialization=231; handshake=983; [Login] initialization=0; authentication=0; [Post-Login] complete=13000; (Microsoft SQL Server, Error: -2) For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=-2&LinkId=20476 The wait operation timed out

Такие исключения могут возникать из-за проблем с подключением или запросами. Чтобы убедиться, что эта ошибка вызвана проблемами подключения, см. статью Проверьте, вызвана ли ошибка проблемой подключения.

Ошибки, связанные с истечением времени ожидания подключения, возникают из-за того, что приложению не удается подключиться к серверу. Чтобы устранить эту проблему, попробуйте выполнить действия (в указанном порядке), описанные в разделе Инструкции по устранению распространенных неполадок с подключением.

Ошибки управления ресурсами

Ошибка 10928: идентификатор ресурса: %d

10928: Resource ID: %d. The %s limit for the database is %d and has been reached. See http://go.microsoft.com/fwlink/?LinkId=267637 for assistance. The Resource ID value in error message indicates the resource for which limit has been reached. For sessions, Resource ID = 2.

Попробуйте устранить эту проблему с помощью одного из следующих методов.

  • Проверьте наличие долго выполняющихся запросов.

  1. Отправьте следующий запрос SQL, чтобы проверить представление sys.dm_exec_requests на предмет блокирующих запросов:

    SELECT * FROM sys.dm_exec_requests;
    
  2. Определите буфер входных данных для главной причины блокировки при помощи функции динамического управления sys.dm_exec_input_buffer и session_id запроса, вызвавшего ошибку, например:

    SELECT * FROM sys.dm_exec_input_buffer (100,0);
    
  3. Настройка запроса по главной причине блокировки.

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

Дополнительные сведения об ограничениях базы данных см. в статье Ограничения ресурсов базы данных SQL для серверов.

Ошибка 10929: идентификатор ресурса: 1

10929: Resource ID: 1. The %s minimum guarantee is %d, maximum limit is %d and the current usage for the database is %d. However, the server is currently too busy to support requests greater than %d for this database. See http://go.microsoft.com/fwlink/?LinkId=267637 for assistance. Otherwise, please try again later.

Ошибка 40501: служба сейчас перегружена

40501: The service is currently busy. Retry the request after 10 seconds. Incident ID: %ls. Code: %d.

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

Дополнительные сведения об ограничениях ресурсов см. в статье Ограничения ресурсов логического сервера SQL.

Ошибка 40544: база данных достигла предельного размера

40544: The database has reached its size quota. Partition or delete data, drop indexes, or consult the documentation for possible resolutions. Incident ID: . Code: .

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

Описанные ниже действия помогут вам решить эту проблему или предоставят дополнительные возможности.

  1. Проверьте текущий размер базы данных с помощью панели мониторинга на портале Azure.

    Примечание

    Чтобы узнать, какие таблицы потребляют наибольшее пространство, и, следовательно, являются потенциальными претендентами на очистку, отправьте следующий SQL-запрос:

    SELECT o.name,
     SUM(p.row_count) AS 'Row Count',
     SUM(p.reserved_page_count) * 8.0 / 1024 AS 'Table Size (MB)'
    FROM sys.objects o
    JOIN sys.dm_db_partition_stats p on p.object_id = o.object_id
    GROUP BY o.name
    ORDER BY [Table Size (MB)] DESC;
    
  2. Если текущий размер не превышает максимальный размер, предусмотренный в данном выпуске, можно увеличить значение параметра MAXSIZE при помощи функции ALTER DATABASE.

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

    • Выполните обычные действия по очистке базы данных. Например, можно очистить ненужные данные с помощью функции усечения/ удаления или переместить данные при помощи служб SQL Server Integration Services (SSIS) или программы для массового копирования (bcp).
    • Секционируйте или удалите данные, удалите индексы или попробуйте найти возможное решение в документации.
    • Сведения о масштабирования баз данных см. в статье Масштабирование ресурсов отдельной базы данных и Масштабирование ресурсов эластичного пула.

Ошибка 40549: сеанс завершен по причине долго выполняющейся транзакции

40549: Session is terminated because you have a long-running transaction. Try shortening your transaction.

Если эта ошибка повторяется, попробуйте устранить проблему, выполнив описанные ниже действия.

  1. Проверьте представление sys.dm_exec_requests на предмет открытых сеансов, имеющих высокое значение в столбце total_elapsed_time. Выполните эту проверку, запустив следующий скрипт SQL:

    SELECT * FROM sys.dm_exec_requests;
    
  2. Определите буфер входных данных для главной причины блокировки при помощи функции динамического управления sys.dm_exec_input_buffer и session_id запроса, вызвавшего ошибку, например:

    SELECT * FROM sys.dm_exec_input_buffer (100,0);
    
  3. Настройте запрос.

Также рассмотрите возможность пакетной обработки запросов. Сведения о пакетной обработке см. в статье Как повысить производительность приложений базы данных SQL с помощью пакетной обработки.

Ошибка: 40551: сеанс был завершен в связи с чрезмерным использованием базы данных TEMPDB.

40551: The session has been terminated because of excessive TEMPDB usage. Try modifying your query to reduce the temporary table space usage.

Чтобы устранить эту проблему, выполните следующие действия:

  1. Измените запросы, чтобы уменьшить использование временного пространства таблицы.
  2. Удалите временные объекты, которые вам уже не нужны.
  3. Выполните усечение таблиц или удалите неиспользуемые таблицы.

Ошибка 40552: сеанс был завершен в связи с чрезмерным использованием объема журнала транзакций

40552: The session has been terminated because of excessive transaction log space usage. Try modifying fewer rows in a single transaction.

Устранить эту проблему можно с помощью следующих методов.

  • Эта проблема может возникать из-за операций вставки, обновления или удаления. Попробуйте сократить количество строк, которые обрабатываются непосредственно, выполнив пакетную обработку или разделение на несколько меньших транзакций.

  • Эта проблема может возникать из-за операций перестроения индекса. Чтобы решить эту проблему, убедитесь, что число затронутых строк в таблице * (средний размер обновляемого поля в байтах + 80) составляет

    Примечание

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

Ошибка 40553: сеанс был завершен в связи с чрезмерным использованием памяти

40553 : The session has been terminated because of excessive memory usage. Try modifying your query to process fewer rows.

Чтобы устранить эту проблему, попробуйте оптимизировать запрос.

Подробное описание процедуры устранения неполадок см. в статье Правильно ли работает мой запрос в облаке?

Таблица дополнительных сообщений об ошибках управления ресурсами

Код ошибки Статус Описание
10928 20 Идентификатор ресурса: %d. Предел %s для базы данных составляет %d, и он достигнут. Дополнительные сведения см. в статье Ограничения ресурсов Базы данных SQL для отдельных баз данных и баз данных в пуле.

Идентификатор ресурса указывает на ресурс, предел которого был достигнут. Для рабочих потоков идентификатор ресурса = 1. Для сеансов идентификатор ресурса — 2.

Дополнительные сведения об этой ошибке и способах ее устранения см. в статье:
•  Ограничения ресурсов логического сервера SQL Server
•  Ограничения на основе DTU для отдельных баз данных
•  Ограничения на основе DTU для пулов эластичных баз данных
•  Ограничения на основе виртуального ядра для отдельных баз данных
•  Ограничения на основе виртуального ядра для пулов эластичных баз данных
•  Ограничения ресурсов Управляемого экземпляра SQL Azure.

10929 20 Идентификатор ресурса: %d. Минимальная гарантия %s составляет %d, максимальное значение равно %d, а текущее использование для базы данных — %d. Тем не менее, в настоящее время сервер слишком занят, чтобы обработать более чем %d запросов для этой базы данных. Идентификатор ресурса указывает на ресурс, предел которого был достигнут. Для рабочих потоков идентификатор ресурса = 1. Для сеансов идентификатор ресурса — 2. Дополнительные сведения см. в разделе:
•  Ограничения ресурсов логического сервера SQL Server
•  Ограничения на основе DTU для отдельных баз данных
•  Ограничения на основе DTU для пулов эластичных баз данных
•  Ограничения на основе виртуального ядра для отдельных баз данных
•  Ограничения на основе виртуального ядра для пулов эластичных баз данных
•  Ограничения ресурсов Управляемого экземпляра SQL Azure.
В противном случае повторите попытку.
40544 20 База данных достигла предельного размера. Секционируйте или удалите данные, удалите индексы или попробуйте найти возможное решение в документации. Сведения о масштабирования баз данных см. в статье Масштабирование ресурсов отдельной базы данных и Масштабирование ресурсов эластичного пула.
40549 16 Сеанс завершен по причине долго выполняющейся транзакции. Рекомендуется сократить транзакцию. Сведения о пакетной обработке см. в статье Как повысить производительность приложений базы данных SQL с помощью пакетной обработки.
40550 16 Сеанс был завершен в связи с тем, что он получил слишком много блокировок. Рекомендуется сократить число строк, считываемых или изменяемых в одной транзакции. Сведения о пакетной обработке см. в статье Как повысить производительность приложений базы данных SQL с помощью пакетной обработки.
40551 16 Сеанс остановлен из-за чрезмерного использования TEMPDB. Попробуйте изменить запрос, чтобы сократить объем использования временных таблиц.

Если вы используете временные объекты, то для экономии места в базе данных TEMPDB удаляйте их сразу после того, как в них исчезнет необходимость. Дополнительные сведения об использовании tempdb в Базе данных SQL см. в статье База данных tempdb в Базе данных SQL.

40552 16 Сеанс был завершен в связи с чрезмерным использованием объема журнала транзакций. Рекомендуется сократить число строк, изменяемых в одной транзакции. Сведения о пакетной обработке см. в статье Как повысить производительность приложений базы данных SQL с помощью пакетной обработки.

В случае выполнения массовых вставок с использованием служебной программы bcp.exe или класса System.Data.SqlClient.SqlBulkCopy попробуйте ограничить количество строк, копируемых на сервер при каждой транзакции, с помощью параметра -b batchsize или BatchSize. В случае перестройки индекса с помощью оператора ALTER INDEX попробуйте использовать параметр REBUILD WITH ONLINE = ON. Сведения о размерах журналов транзакций для модели приобретения vCore см в статьях:
•  Ограничения на основе виртуального ядра для отдельных баз данных
•  Ограничения на основе виртуального ядра для пулов эластичных баз данных
•  Ограничения ресурсов Управляемого экземпляра SQL Azure.

40553 16 Сеанс был завершен в связи с чрезмерным использованием памяти. Рекомендуется изменить запрос, сократив число обрабатываемых строк.

Сокращение количества операций ORDER BY и GROUP BY в коде Transact-SQL позволяет уменьшить потребление памяти при выполнении запроса. Сведения о масштабирования баз данных см. в статье Масштабирование ресурсов отдельной базы данных и Масштабирование ресурсов эластичного пула.

Ошибки пула эластичных БД

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

Код ошибки Статус Описание Действие по исправлению
1132 17 Хранилище эластичного пула достигло своего предельного значения. Уровень использования хранилища для эластичного пула не может превышать (%d) МБ. Попытка записи данных в базу данных, когда было достигнуто предельное значение хранилища эластичного пула. Сведения об ограничениях ресурсов см. в статьях:
•  Ограничения на основе DTU для пулов эластичных баз данных
•  Ограничения на основе виртуального ядра для пулов эластичных баз данных.
Если это возможно, попробуйте увеличить DTU эластичного пула и (или) добавить в него пространство хранения для увеличения предельного размера его хранилища, сократить объем памяти, используемой отдельными базами данных в эластичном пуле, или удалить базы данных из пула. Сведения о масштабировании эластичных пулов см. в статье Масштабирование ресурсов эластичного пула. Дополнительные сведения об удалении неиспользуемого пространства из баз данных см. в статье Управление пространством для баз данных в Базе данных SQL Azure.
10929 16 Минимальная гарантия %s составляет %d, максимальное значение равно %d, а текущее использование для базы данных — %d. Тем не менее, в настоящее время сервер слишком занят, чтобы обработать более чем %d запросов для этой базы данных. Сведения об ограничениях ресурсов см. в статьях:
•  Ограничения на основе DTU для пулов эластичных баз данных
•  Ограничения на основе виртуального ядра для пулов эластичных баз данных.
В противном случае повторите попытку. Минимальное количество DTU или виртуальных ядер на базу данных; максимальное количество DTU или виртуальных ядер на базу данных. Общее количество одновременных работников (запросов) по всем базам данных в эластичном пуле превысило ограничение пула.
Если это возможно, попробуйте увеличить DTU или число виртуальных ядер эластичного пула для увеличения предельно допустимого количества работников или удалить базы данных из эластичного пула.
40844 16 База данных '%ls' на сервере '%ls' является базой данных выпуска '%ls' в эластичном пуле и не может иметь связь непрерывной копии. Н/Д
40857 16 Эластичный пул для сервера '%ls' не найден, имя эластичного пула: '%ls'. На указанном сервере указанный эластичный пул не существует. Укажите допустимое имя эластичного пула.
40858 16 Эластичный пул "%ls" на сервере "%ls" уже существует. Указанный эластичный пул уже существует на указанном сервере. Укажите новое имя эластичного пула.
40859 16 Эластичный пул не поддерживает уровень служб '%ls'. Для подготовки эластичного пула указанный уровень служб не поддерживается. Укажите правильный выпуск или оставьте значение уровня служб пустым, чтобы использовать значение по умолчанию.
40860 16 Недопустимая комбинация эластичного пула '%ls' и цели службы '%ls'. Эластичный пул и уровень служб можно указать вместе только в том случае, если тип ресурса задан как ElasticPool. Укажите правильную комбинацию эластичного пула и уровня служб.
40861 16 Выпуск "%.ls" базы данных не может отличаться от уровня служб пула эластичных БД, который равен "%. ls". Выпуск базы данных отличается от уровня служб эластичного пула. Не указывайте выпуск базы данных, который отличается от уровня служб эластичного пула. Обратите внимание, что выпуск базы данных указывать не требуется.
40862 16 Если указана цель служб эластичного пула, то необходимо указать имя этого эластичного пула. Цель службы эластичного пула неоднозначно определяет эластичный пул. Если используется цель служб эластичного пула, укажите имя этого эластичного пула.
40864 16 Число DTU для эластичного пула должно составлять по крайней мере (%d) DTU для уровня служб "%.*ls". Попытка задать для эластичного пула DTU, значение которого ниже минимального ограничения. Повторите попытку, установив для эластичного пула DTU, значение которого хотя бы равно минимальному ограничению.
40865 16 Число DTU для эластичного пула не должно превышать (%d) DTU для уровня служб "%.*ls". Попытка задать для эластичного пула DTU, значение которого выше максимального ограничения. Повторите попытку, установив для эластичного пула DTU, значение которого не превышает максимальное ограничение.
40867 16 Максимальное количество DTU на каждую базу данных должно составлять как минимум (%d) для уровня служб "%.*ls". Попытка задать максимальное количество DTU на каждую базу данных ниже поддерживаемого ограничения. Попробуйте использовать уровень служб эластичного пула, который поддерживает желаемый параметр.
40868 16 Максимальное количество DTU на каждую базу данных не должно превышать (%d) для уровня служб "%.*ls". Попытка задать максимальное число DTU на каждую базу данных, которое находится за пределами поддерживаемого ограничения. Попробуйте использовать уровень служб эластичного пула, который поддерживает желаемый параметр.
40870 16 Минимальное количество DTU на каждую базу данных не должно превышать (%d) для уровня служб "%.*ls". Попытка задать минимальное число DTU на каждую базу, которое находится за пределами поддерживаемого ограничения. Попробуйте использовать уровень служб эластичного пула, который поддерживает желаемый параметр.
40873 16 Количество баз данных (%d) и минимальное количество DTU на каждую базу данных (%d) не может превышать DTU эластичного пула (%d). Попытка задать минимальное количество DTU для баз данных в эластичном пуле, превышающее DTU эластичного пула. Попробуйте увеличить количество DTU эластичного пула, уменьшить минимальное количество DTU на каждую базу данных или уменьшить количество баз данных в эластичном пуле.
40877 16 Эластичный пул не может быть удален до тех пор, пока он содержит какую-либо базу данных. Эластичный пул содержит одну или несколько баз данных и не может быть удален. Чтобы удалить эластичный пул, удалите из него базы данных.
40881 16 В эластичном пуле '%.*ls' достигнуто предельное количество баз данных. Предельное количество баз данных не может превышать (%d) для эластичного пула с DTU (%d). Попытка создания или добавления базы данных в эластичный пул, когда было достигнуто предельное количество баз данных эластичного пула. Если это возможно, попробуйте увеличить DTU эластичного пула, чтобы увеличить предельное количество баз данных, или удалить базы данных из эластичного пула.
40889 16 Невозможно уменьшить количество DTU или размер хранилища для эластичного пула '%.*ls', так как недостаточно места в хранилище баз данных. Попытка ограничить размер хранилища эластичного пула, при которой уменьшается размер используемого им хранилища. Попробуйте сократить использование хранилища отдельными базами данных в эластичном пуле или удалить базы данных из пула, чтобы уменьшить количество DTU или размер хранилища.
40891 16 Минимальное число DTU на базу данных (%d) не может превышать максимального числа DTU на базу данных (%d). Попытка задать минимальное число DTU на каждую базу данных, превышающее максимальное число DTU на каждую базу данных. Убедитесь, что минимальное число DTU на базу данных не превышает максимального числа DTU на базу данных.
TBD 16 Размер хранилища для отдельной базы данных в эластичном пуле не может превышать максимальный размер, допустимый уровнем служб эластичного пула "%.*ls". Максимальный размер базы данных превышает максимальный размер, допустимый уровнем служб эластичного пула. Укажите максимальный размер базы данных, который находится в пределах ограничений на максимальный размер, допустимый уровнем служб эластичного пула.

Не удается открыть базу данных "master", запрошенную при входе в систему. Не удалось выполнить вход

Эта проблема возникает из-за того, что учетная запись не имеет разрешения на доступ к базе данных master. Но по умолчанию SQL Server Management Studio (SSMS) пытается подключиться к базе данных master.

Проблему можно устранить следующим способом.

  1. На экране входа SSMS выберите Параметры, а затем — Свойства подключения.

  2. В поле Подключение к базе данных введите имя базы данных пользователя по умолчанию в качестве базы данных для входа по умолчанию, а затем выберите Подключить.

    Свойства подключения

Проверьте, вызвана ли ошибка проблемой подключения.

Чтобы проверить, вызвана ли ошибка проблемой подключения, просмотрите трассировку стека для фреймов, показывающих вызовы, чтобы открыть подключение, как показано ниже (обратите внимание на ссылку на класс SqlConnection):

System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
 at System.Data.SqlClient.SqlConnection.Open()
 at AzureConnectionTest.Program.Main(String[] args)
ClientConnectionId:

Если исключение срабатывает из-за проблем с запросами, вы увидите стек вызовов, аналогичный приведенному ниже (обратите внимание на ссылку на класс SqlCommand). В этом случае выполните настройку запросов.

  at System.Data.SqlClient.SqlCommand.ExecuteReader()
  at AzureConnectionTest.Program.Main(String[] args)
  ClientConnectionId:

Дополнительные рекомендации по точной настройке см. в следующих ресурсах:

  • Как поддерживать актуальность статистики и индексов Azure SQL
  • Ручная настройка производительности запросов в Базе данных SQL Azure
  • Мониторинг производительности Базы данных SQL Azure с помощью динамических административных представлений
  • Управление хранилищем запросов в Базе данных SQL Azure

Инструкции по устранению распространенных неполадок с подключением

  1. Убедитесь, что протокол TCP/IP включен в качестве клиентского протокола на сервере приложений. Дополнительные сведения см. в статье Настройка клиентских протоколов. На серверах приложений, на которых не установлены средства SQL, убедитесь, что протокол TCP/IP включен, запустив cliconfg.exe (служебная программа SQL Server Client Network).

  2. Проверьте строку подключения приложения, чтобы убедиться, что она настроена правильно. Например, убедитесь, что в строке подключения указан правильный порт (1433) и полное имя сервера. См. статью Получение сведений о подключении.

  3. Попробуйте увеличить значение времени ожидания подключения. Мы рекомендуем устанавливать время ожидания подключения не менее 30 секунд.

  4. Проверьте подключение между сервером приложений и Базой данных SQL Azure с помощью SQL Server Management Studio (SSMS), файла UDL, проверки связи или telnet. Дополнительные сведения см. в статьях Устранение неполадок с подключением и Диагностика проблем с подключением.

    Примечание

    На этапе устранения неполадок можно также проверить возможность подключения на другом клиентском компьютере.

  5. Рекомендуется убедиться в том, что логика повторных попыток выполнена. Дополнительные сведения о логике повторных попыток см. в статье Устранение временных сбоев и ошибок подключения к Базе данных SQL.

Если эти действия не помогли устранить проблему, попробуйте собрать дополнительные данные, а затем обратитесь в службу поддержки. Если приложение является облачной службой, включите ведение журнала. Это действие возвращает метку времени ошибки в формате UTC. Кроме того, база данных SQL возвращает идентификатор трассировки. Эти сведения могут использовать службы поддержки пользователей Майкрософт.

Дополнительные сведения о ведении журналов см. в статье Включение ведения журнала диагностики для приложений в службе приложений Azure.

Установка и настройка системы и необходимых компонентов

Во время установки Ubuntu Server, отметить для установки SSH Server и LAMP. Выбрать автоустановку обновлений безопасности.

# Войти в режим рута
sudo -i
# Задать статический IP:
nano /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.1.7
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.1
dns-search workgroup

Перезагрузиться.

Зайти в систему по SSH и обновить систему целиком:

sudo -i
apt-get update && apt-get upgrade -y && apt-get dist-upgrade -y && apt-get autoremove

Установить все необходимые компоненты и, в данном случае, механизм кэширования APCu + Redis и компоненты для автогенерации favicon:

apt-get install php-zip php-xml php-gd php-json php-curl php-mbstring php-bz2 php-intl php-mcrypt php-apcu redis-server php-redis php-imagick libmagickcore-6.q16-2-extra -y

Если нужен SMB client (для подключения внешних накопителей в Nextcloud), LDAP и Midnight Commander:

apt-get install smbclient php-ldap mc -y

Установка Nextcloud

# Скачать последнюю версию
wget https://download.nextcloud.com/server/releases/latest.tar.bz2
# Распаковать архив в корневую папку веб-сервера
tar xjf latest.tar.bz2 --strip=1 -C /var/www/html
# Удалить исходный архив (если нужно)
rm latest.tar.bz2
# Создать папку для пользовательских данных
mkdir /var/nextcloud-data
# Дать права владельца веб-серверу:
chown -R www-data:www-data /var/www/html /var/nextcloud-data
# Перезапустить Apache:
systemctl restart apache2
# Создать базу MySQL с именем "nextcloud":
mysql -u root -p -e "create database nextcloud";

Открыть браузер, зайти на веб-интерфейс (здесь: 192.168.1.7), задать логин и пароль админа, путь к папке с данными пользователей (здесь: /var/nextcloud-data) и имя БД (здесь: nextcloud). Либо настроить из командной строки:
FIXME - уточнить, можно ли тут обойтись без паролей

sudo -u www-data php /var/www/html/occ maintenance:install --database "mysql" --data-dir "/var/nextcloud-data" --database-name "nextcloud" --database-user "root" --database-pass "password" --admin-user "admin" --admin-pass "password"

Настройка

# Убрать закрывающую строку из конфига и заменить строку overwrite.cli.url на нужную.
# В sed экранирование апострофа безумное - '"'"'
sed -i '
/);/d
/overwrite.cli.url/c \'"'"'overwrite.cli.url\'"'"' => \'"'"'https://192.168.1.7\'"'"',' /var/www/html/config/config.php
 
# Настроить конфиг - "pretty URLs", кэширование, часовой пояс для логов и их ротацию (100 МБ)
echo "'htaccess.RewriteBase' => '/',
'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\OC\Memcache\Redis',
 'redis' => array(
      'host' => 'localhost',
      'port' => 6379,
       ),
'logtimezone' => 'Europe/Moscow',
'log_rotate_size' => 104857600,
);" >> /var/www/html/config/config.php
 
# Настроить максимальный размер файла на закачку в PHP и лимит памяти
# Проверить версию PHP и путь к используемым php.ini (php --ini), например, он может быть
# /etc/php/7.3/fpm/php.ini. Есть ещё
# /etc/php/7.3/cli/php.ini.
sed -i '
/upload_max_filesize =/c upload_max_filesize = 4G
/post_max_size =/c post_max_size = 4G
/memory_limit =/c memory_limit = 512M' /etc/php/7.3/apache2/php.ini
 
# Настроить параметры opcache
sed -i '
/opcache.enable=/c opcache.enable=1
/opcache.enable_cli=/c opcache.enable_cli=1
/opcache.memory_consumption=/c opcache.memory_consumption=128
/opcache.interned_strings_buffer=/c opcache.interned_strings_buffer=8
/opcache.max_accelerated_files=/c opcache.max_accelerated_files=10000
/opcache.revalidate_freq=/c opcache.revalidate_freq=1
/opcache.save_comments=/c opcache.save_comments=1' /etc/php/7.3/apache2/php.ini

Список часовых поясов для PHP

SSL, mod_env и mod_rewrite для pretty URLs

a2enmod ssl headers env rewrite && a2ensite default-ssl

Включить Strict transport security, Referrer Policy и Forward secrecy:

echo "
 Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains"
 Header always set Referrer-Policy "no-referrer-when-downgrade"

 
# Set Forward Secrecy
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder on
SSLCipherSuite HIGH:!aNULL:!MD5:!3DES
" >> /etc/apache2/sites-available/default-ssl.conf

Перенаправить HTTP на HTTPS

nano /etc/apache2/sites-available/000-default.conf

VirtualHost *:80>
ServerName www.yourdomain.com
Redirect / https://www.yourdomain.com/
VirtualHost>
systemctl restart apache2

Настроить Pretty URLs

nano /etc/apache2/apache2.conf
 
# В разделе  изменить параметр AllowOverride None на AllowOverride All
# Выйти из редактора.
 
# Обновить файл .htaccess:
sudo -u www-data php /var/www/html/occ maintenance:update:htaccess
 
# Перезапустить Apache:
systemctl restart apache2

Переключить фоновые задачи на выполнение кроном

Выключить ненужные ссылки

config/config.php:

# Выключить ссылку на сброс пароля
'lost_password_link' => 'disabled',
# Remove link “Get your own free account”
'simpleSignUpLink.shown' => false,

Настроить аутентификацию через LDAP

Обновление

# Автоматически:
sudo -u www-data php /var/www/html/updater/updater.phar
 
# Вручную:
# Скачать последний релиз
wget https://download.nextcloud.com/server/releases/latest.tar.bz2
# Распаковать скачанный архив в папку установки
tar xjf latest.tar.bz2 --strip=1 -C /var/www/html
# Дать права владельца веб-серверу:
chown -R www-data:www-data /var/www/html
# Включить режим обслуживания
sudo -u www-data php /var/www/html/occ maintenance:mode --on
# Запустить процесс обновления
sudo -u www-data php /var/www/html/occ upgrade
# Выключить режим обслуживания
sudo -u www-data php /var/www/html/occ maintenance:mode --off

https://docs.nextcloud.com/server/latest/admin_manual/maintenance/update.html

Экспресс-обновление со сменой шлюза

ip route change default via 192.168.1.254 dev eth0
apt update && apt upgrade -y && apt autoremove -y
sudo -u www-data php /var/www/html/updater/updater.phar --no-interaction
ip route change default via 192.168.1.1 dev eth0

Обновление на след. мажорный релиз

# Нужно переключиться на бета-канал обновлений, обновляться, а затем переключиться обратно.
sed -i 's/stable/beta/' /var/www/html/config/config.php
sudo -u www-data php /var/www/html/updater/updater.phar --no-interaction
sed -i 's/beta/stable/' /var/www/html/config/config.php
sudo -u www-data php /var/www/html/updater/updater.phar --no-interaction

Настройка кэширования через сервер Redis

Как-то раз произошла ситуация - невозможно было стереть файл с сервера или обновить его, файл был заблокирован:

file is locked
Error transferring bva.dyndns.info/cloud/remote.php/dav/files/user/123.txt - server replied: Locked («123.txt» is locked)

В соответствующем howto советуют обнулить таблицу блокировок в базе mysql, а чтобы ситуация не повторялась, рекомендуют поставить кэширующий сервис Redis. Так как у меня уже был APCu, было решено поставить Redis для блокировок, а APCu оставить для локального кэша.

В Ubuntu это ставится просто, а в Armbian в репозитории отсутствуют соответствующие пакеты, так что пришлось их собирать из исходников.

Установить Redis

Информация устарела, в репозиториях для процессоров ARM появились собранные пакеты.
Теперь достаточно выполнить команду
apt-get install redis-server php-redis

Сборка из исходников

Настройка Nextcloud и разблокировка файлов

Конфиг Nextcloud в части кэширования нужно привести к следующему виду:

'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\OC\Memcache\Redis',
 'redis' => array(
      'host' => 'localhost',
      'port' => 6379,
       ),
# Перевести Nextcloud в режим обслуживания:
sudo -u www-data php /var/www/html/occ maintenance:mode --on
# Зайти в базу "cloud" и очистить блокировки:
mysql -u root -p cloud
DELETE FROM oc_file_locks WHERE 1;
quit
# Вывести Nextcloud из режима обслуживания:
sudo -u www-data php /var/www/html/occ maintenance:mode --off
# Перезапустить Apache:
systemctl restart apache2

Дополнительные материалы

Сертификаты

#Сделать папочку для сертификатов
mkdir /etc/ssl/certs/nextcloud
# самоподписанный сертификат на 10 лет без запроса пароля
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/certs/nextcloud/nextcloud.key -out /etc/ssl/certs/nextcloud/nextcloud.crt
nano /etc/apache2/sites-available/default-ssl.conf
SSLCertificateKeyFile /etc/ssl/certs/nextcloud/nextcloud.key
SSLCertificateFile /etc/ssl/certs/nextcloud/nextcloud.crt
#SSLCACertificateFile /etc/ssl/certs/nextcloud/nextcloud-int.crt

FIXME

sed -i '
/SSLCertificateKeyFile/c SSLCertificateKeyFile /etc/ssl/certs/nextcloud/nextcloud.key
/SSLCertificateFile/c SSLCertificateFile /etc/ssl/certs/nextcloud/nextcloud.crt' /etc/apache2/sites-available/default-ssl.conf

Импорт контактов из файла vcf

Проблема: выгруженный файл vcf с мобильника на Android 4.4 не загружается в приложение «Контакты» в Nextcloud.

Решение:

  1. Открыть файл в программе tcode (в Windows), чтобы строки с кодировкой Quoted Printable перекодировались в нормальный русский текст. Это можно сделать и из командной строки:

    tcode input.vcf /auto output.vcf
  2. Убрать из всего файла строки ;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE

  3. Строки VERSION:2.1 заменить на VERSION:3.0

  4. Сохранить файл в кодировке UTF-8.

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

https://path-to-nextcloud-site.com/apps/files/?dir=/.Contacts-Backup

Полезные плагины

Плагин для Outlook

https://download.nextcloud.com/outlook/ Ставить нужно плагин той же разрядности, что и у Офиса (не системы в целом).

Cкачать свежую версию:

# ((Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* |
# ? {$_.Displayname -match 'Microsoft Office' -and $_.InstallLocation -match "\w"} |
# select -expand installlocation -First 1) -split '\\')[1] -match 'x86'
 
$offx64 = gci "$env:ProgramFiles\Microsoft Office\outlook.exe" -Recurse
$offx86 = gci "${env:ProgramFiles(x86)}\Microsoft Office\outlook.exe" -Recurse
$u = "https://download.nextcloud.com/outlook/"
$f = (curl $u).links |? href -like "20*" | select -Last 1 -expand href
$uf = $u + $f
if ($offx64) {
$plugx64 = (curl $uf).links |? href -like "*64*.msi" | select -expand href
$url64 = $uf + $plugx64
curl $url64 -OutFile "$env:userprofile\Downloads\$plugx64"
}
if ($offx86) {
$plugx86 = (curl $uf).links |? href -like "*86*.msi" | select -expand href
$url86 = $uf + $plugx86
curl $url86 -OutFile "$env:userprofile\Downloads\$plugx86"
}
# Путь к файлам перевода:
${env:ProgramFiles(x86)}\Nextcloud Outlook\Resources\Translations

Перевод на русский:

Автоудаление файлов

Снежок

Полезные команды

Включить превью офисных форматов:

nano /var/www/html/config/config.php
'preview_libreoffice_path' => '/usr/bin/libreoffice',

Удалить пользователя username вместе с его каталогом:

u=username
sudo -u www-data php /var/www/html/occ user:delete $u && rm -rf /var/nextcloud-data/$u

Решение проблем

Failed to connect to www.nextcloud.com

В логах куча сообщений:
GuzzleHttp\Exception\ConnectException: cURL error 7: Failed to connect to www.nextcloud.com port 80: Connection timed out

Сайт nexcloud.com реально бывает недоступен. Workaround - отключить проверку на наличие интернета:

echo "'has_internet_connection' => false," >> /var/www/html/config/config.php

Или не обращать внимания.

Some files have not passed the integrity check

После обновления - ошибка подписи файлов:
Some files have not passed the integrity check. Further information on how to resolve this issue can be found in the documentation. (List of invalid files… / Rescan…)

Помимо выполнения рекомендаций, убедиться, что core/signature.json актуальный.

Поломались "красивые" ссылки (без index.php)

Specified key was too long; max key length is 767 bytes

При обновлении Nexcloud ошибка:
DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin ENGINE = InnoDB ROW_FORMAT = compressed': SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

Решение:

mysql -u root -p cloud
 
MariaDB [cloud]> set global innodb_large_prefix=on;
MariaDB [cloud]> set global innodb_file_format=Barracuda;
quit
 
sudo -u www-data php /var/www/html/occ maintenance:repair
sudo -u www-data php /var/www/html/occ upgrade

The database is missing some indexes

Проверка в админке пишет: The database is missing some indexes

Решение:

sudo -u www-data php /var/www/html/occ db:add-missing-indices
# В докере:
docker exec -u www-data nc php occ db:add-missing-indices

Обновление прошло неуспешно, PHP грузит систему на 100%, сайт в неотключаемом maintenance mode

Отключить регулярную задачу в crontab.

# Проверить, включен ли apc cli:
php -i | grep apc.enable
  apc.enable_cli => Off => Off
  apc.enabled => On => On
# Если нет, то включить
echo "apc.enable_cli=1" >> /etc/php/7.4/cli/php.ini
# Перейти в каталог NC (обязательно!) и запустить апгрейд заново
cd /var/www/html/cloud
sudo -u www-data php occ upgrade

Включить регулярную задачу в crontab.

https://help.nextcloud.com/t/nextcloud-21-update-needed/108714/25

Your installation has no default phone region set

sudo -u www-data php /var/www/html/occ config:system:set default_phone_region --value="RU"
# Докер
docker exec -u www-data nc php occ config:system:set default_phone_region --value="RU"

Last background job execution ran 15 hours ago. Something seems wrong

Запустить принудительно

sudo -u www-data php -f /var/www/html/cloud/cron.php

PHP Fatal error: Out of memory (allocated 3533701120) (tried to allocate 36864 bytes) in /var/www/html/lib/private/AppFramework/Utility/SimpleContainer.php on line 133

Установка роли Remote Desktop Licensing в Windows Server 2019/2016

Вы можете установить компонент Remote Desktop Licensing на любом сервере домена, не обязательно устанавливать его на одном из серверов фермы RDSH.

Переда началом установки сервера лицензирования RDS нужно добавить данный хост (или убедиться, что у вас есть право на добавление) в доменную группу Terminal Server License Servers, иначе сервер не сможет выдать CAL типа RDS Per User пользователям домена.

Установить службу Remote Desktop Licensing можно через консоль Server Manager. Для этого в мастере Add Roles and Features выберите роль Remote Desktop Services.

windows server 2016 роль Remote Desktop Services

В качестве компонента роли нужно выбрать службу Remote Desktop Licensing.

Remote Desktop Licensing - служба лицензирования терминалов

Осталось дождаться окончания установки роли.
установка службы Remote Desktop Licensing

Для управления службой RDS-Licensing используется консоль Remote Desktop Licensing Manager — licmgr.exe.

В Windows Server стандартные компоненты и роли проще всего установить с помощью PowerShell. Для установки службы лицензирования RDS и утилиты RD Licensing Diagnoser достаточно выполнить одну команду:

Install-WindowsFeature RDS-Licensing –IncludeAllSubFeature -IncludeManagementTools

Для вывода списка RDS служб, установленных на сервере, используйте команду:

Get-WindowsFeature -Name RDS* | Where installed

powershell проверить какие службы RDS установлены на Windows Server

Активация сервера лицензий RDS в Windows Server

Чтобы сервер лицензирования RDS мог выдавать лицензии клиентам, его необходимо активировать. Для этого, откройте консоль Remote Desktop Licensing Manager (licmgr.exe), щелкните ПКМ по имени вашего сервера и выберите пункт меню Activate Server.

активация сервера терминальных лицензий

Запустится мастер активации сервера лицензирования RDS, в котором нужно будет выбрать желаемый метод активации. Если ваш сервер имеет доступ в Интернет, он может автоматически подключиться к серверам Microsoft. Если доступа в интернет с сервера нет, можно активировать сервер через веб браузер или по телефону.

выберите метод активации сервера лицензирования

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

Осталось нажать кнопку Finish.

сервер лицензирования RDS успешно активирован

Щелкните в консоли по имени сервера правой клавишей и выбрать пункт Review Configuration. Здесь можно убедиться, что данный сервер лицензий RDS является активированным и может быть использован для активации RDS клиентов в домене.


  • This license server is a member of the Terminal Server License Servers group in Active Directory. This license server will be able to issue RDS Per User CALs to users in the domain, and you will be able to track the usage of RDS Per User CALs.
  • This license server is registered as a service connection point (SCP) in Active Directory Domain Services.

%MINIFYHTMLbea44fed3e5470d6e0b9bc453f8509a07% %MINIFYHTMLbea44fed3e5470d6e0b9bc453f8509a08%

Review Configuration

Типы клиентских терминальных лицензий (RDS CAL)

Каждый пользователь или устройство, которое подключается к серверам Remote Desktop Session Host, должно иметь клиентскую лицензию (CAL — client access license). Есть два типа терминальных CAL.

  • На устройство (Per Device CAL) – это постоянный тип лицензии, назначающийся компьютеру или устройству, которое подключается к RDS серверу более одного раза (при первом подключении устройства ему выдается временная лицензия). Данные лицензии не являются конкурентными, т.е. если у вас 10 лицензий Per Device, то к вашему RDS серверу смогут подключится всего 10 компьютеров. Актуальная OVL лицензия называется так: WinRmtDsktpSrvcsCAL 2019 SNGL OLV NL Each AP DvcCAL
  • На пользователя (Per User CAL) – такой тип лицензии позволяет одному пользователю подключиться к серверу RDS с любого количества компьютеров/устройств. Данный тип лицензий привязывается к учетной записи пользователя в Active Directory, но выдается не навсегда, а на определенный период времени. Лицензия выдается на срок от 52 до 89 дней (случайное число). Актуальная Open Value лицензия этого типа называется так: WinRmtDsktpSrvcsCAL 2019 SNGL OLV NL Each AP UsrCAL.

    Если вы попытаетесь использовать RDS CAL Per User 2019 в рабочей группе (не в домене), то RDSH сервер будет каждые 60 минут принудительно завершать сеанс пользователей с сообщением: “Проблема с лицензией удаленных рабочих столов и ваш сеанс будет завершен через 60 мин / There is a problem with your Remote Desktop license, and your session will be disconnected in 60 minutes ”. Поэтому для RDS серверов в среде workgroup нужно использовать только лицензирование на устройство — Per Device RDS CAL. Проблема с лицензией удаленных рабочих столов и ваш сеанс будет завершен через 60 мин

Примечание. Отметим, что 2016 RDS CAL можно установить только на сервере лицензирования под управлением Windows Server 2016 или 2019. Установка RDS CALs для более новые версий Windows Server на предыдущие версии Windows не поддерживается. Т.е. вы не сможете установить 2016 RDS CAL на хост лицензирования Windows Server 2012 R2.

При попытке добавить новые RDS CAL 2019 на Windows Server 2016 появится ошибка:

rds ошибка неверный код при добавлении лицензий RDS CAL

RD Licensing Manager
The license code is not recognized. Ensure that you have entered the correct license code.

Установка клиентских лицензий RDS CAL в Windows Server 2019/2016

Теперь на сервер лицензирования нужно установить приобретенный пакет терминальных лицензий (RDS CAL).

В консоли Remote Desktop Licensing Manager щелкните ПКМ по серверу и выберите Install Licenses.

Установка терминальных CAL на RDS сервере

Выберите способ активации (автоматически, через веб или по телефону) и программу лицензирования (в нашем случае Enterprise Agreement).

В сеть утекло уже довольно много enterprise agreement номеров для RDS (4965437). Найти номера думаю, не составит проблемы. Обычно даже не нужно искать кряки или активаторы.

программа лицензирования Enterprise Agreement

Следующие шаги мастера зависят от того, какой тип лицензирования выбран. В случае Enterprise Agreement нужно указать его номер. Если выбран тип лицензирования License Pack (Retail Purchase), нужно будет указать 25-символьный ключ продукта, полученный от Microsoft или партнера. номер лицензионного соглашения

Укажите тип продукта (Windows Server 2016 или 2019), тип лицензии (RDS Per User CAL) и количество терминальных лицензий, которые нужно установить на сервере.
тип и количество RDS лицензий

После этого, сервер может выдавать лицензии (RDS CAL) клиентам.

Вы можете сконвертировать RDS лицензии User CAL в Device CAL (и наоборот) с помощью контекстного меню Convert Licenses в консоли RD Licensing Manager.

сонвертировать rds cal из user в device

Если у вас закончились свободные лицензии, вы можете отозвать ранее выданные лицензии RDS Device CAL для неактивных компьютеров с помощью следующего скрипта PowerShell:

$RevokedPCName=”msk-pc2332”
$licensepacks = Get-WmiObject win32_tslicensekeypack | where {($_.keypacktype -ne 0) -and ($_.keypacktype -ne 4) -and ($_.keypacktype -ne 6)}
$licensepacks.TotalLicenses
$TSLicensesAssigned = gwmi win32_tsissuedlicense | where {$_.licensestatus -eq 2}
$RevokePC = $TSLicensesAssigned | ? sIssuedToComputer -EQ $RevokedPCName

$RevokePC.Revoke()

Можно отозвать до 20% Per-Device RDS CALs. Per-User CALs отозвать нельзя.

Отчеты об использовании лицензий CAL на RDS

В консоли управления CAL лицензиями RDS можно сформировать отчет по использованию лицензий. Для этого в контекстном меню сервера выберите Create Report -> CAL Usage.

сгенерирвать отчет об использовании лицензий rds cal

Однако, я предпочитаю использовать PowerShell для построения отчетов об использовании RDS CAL.

Следующий скрипт покажет оставшееся количество лицензий во всех паках RDS CAL:

Import-Module RemoteDesktopServices -ErrorAction Stop
Set-Location -Path 'rds:' -ErrorAction Stop
$licenses = (Get-Item -Path RDS:\LicenseServer\LicenseKeyPacks\* | Where-Object Name -Like "-Per User-*").Name
$total=0;
$issued=0;
foreach ($license in $licenses) {
$count=(Get-Item -Path RDS:\LicenseServer\LicenseKeyPacks\$license\TotalLicenses).CurrentValue
$total= $total + $count
$count2=(Get-Item -Path RDS:\LicenseServer\LicenseKeyPacks\$license\IssuedLicensesCount).CurrentValue
$issued= $issued + $count2
}
$available = $total - $issued
Write-Host "Total Licenses available: $available"

Вы можете запускать этот PowerShell скрипт через Zabbix и генерировать алерт, если оставшееся количество лицензий меньше, например, 5.

Следующий скрипт позволит получить таблицу по использованию Per User лицензий:

Import-Module RemoteDesktopServices -ErrorAction Stop
Set-Location -Path 'rds:' -ErrorAction Stop
$path = “C:\Logs\Reports\RDS_CAL_Report.csv”
$fileName = (Invoke-WmiMethod Win32_TSLicenseReport -Name GenerateReportEx).FileName
$fileEntries = (Get-WmiObject Win32_TSLicenseReport | Where-Object FileName -eq $fileName).FetchReportEntries(0,0).ReportEntries
$objArray = @()
foreach($entry in $fileEntries){
$objArray += $entry | select User, ProductVersion, CALType, ExpirationDate
$objArray[-1].User = $objArray[-1].User.Split('\') | select -Last 1
$time = $objArray[-1].ExpirationDate.Split('.') | select -first 1
$objArray[-1].ExpirationDate = [datetime]::ParseExact($time, "yyyyMMddHHmmss", $null)
}
$objArray | Export-Csv -Path $path -Delimiter ',' -NoTypeInformation

отчет об использовании лицензий rds per user cal с помощью powershell

Удаление RDS CAL с сервера лицензирования

Если вы хотите перенести свой набор лицензий RDS CAL с одного сервера лицензирования Remote Desktop на другой, вы можете удалить установленные лицензии с сервера лицензирования с помощью PowerShell.

Следующая команда выведет список установленных пакетов RDS лицензий на сервере:

Get-WmiObject Win32_TSLicenseKeyPack|select-object KeyPackId,ProductVersion,TypeAndModel,AvailableLicenses,IssuedLicenses |ft

rdc licensing cal Win32_TSLicenseKeyPack

Найдите значение KeyPackId для пакета RDS CAL, который нужно удалить и выполите команду:

wmic /namespace:\\root\CIMV2 PATH Win32_TSLicenseKeyPack CALL UninstallLicenseKeyPackWithId KEYPACKID

Также вы можете полностью удалить все наборы CAL, пересоздав базу лицензий RDS. Для этого остановите службу Remote Desktop Licensing:

Stop-Service TermServLicensing

Переименуйте файл C:\Windows\System32\lserver\TLSLic.edb в C:\Windows\System32\lserver\TLSLic.bak и запустите службу:

Start-Service TermServLicensing

После этого все RDS CAL лицензии будут удалены, и вы должны активировать их заново.

Версии

  • Номера версий перечисленные ниже являются версиями как среды разработки - IDE, так и версиями Application Server
  • Версии InTouch можно увидеть здесь

Где скачать дистрибутивы и/или лицензии и/или русскую документацию

Для получения дистрибутивов программного обеспечения Wonderware, временных лицензий (demo) и/или русской документации, пожалуйста, обращайтесь к менеджерам KLINKMANN. Контакты можно найти на сайте: http://www.klinkmann.ru/

Дополнительные ссылки

  • ArchestrA Symbol Editor
  • Процесс Deploy

Разные вопросы

Как определить версию по cab или aaPKG файлам

В корне .cab файла или .aaPKG есть файлик __GalaxyInfo.txt. Его необходимо открыть в текстовом редакторе и найти строку типа: CdiVersion="3388.0127.0126.0006" - вот этот номер и зависит от версии среды разработки в которой он последний раз открывался.


 IAS 2.1
 2.1              : 2559.1144.0.0
 2.1 Patch01      : 2559.1144.66.12
 2.1 Patch02      : 2559.1144.77.14

 WAS 3.0 
 3.0              : 2859.1293.0.0
 3.0 Patch01      : 2859.1293.24.2
 3.0 Patch02      : 2859.1293.53.4
 3.0 Patch03      : 2859.1293.70.5
 3.0SP1           : 2859.1293.95.15
 3.0SP2           : 2859.1293.239.40

 IDE 3.1
 3.1              : 3132.57.0.0
 3.1 SP1          : 3132.57.24.6
 3.1 SP2          : 3132.57.91.24
 3.1 SP2 P01      : 3132.57.103.28
 3.1 SP3          : 3132.57.119.34
 3.1 SP3 P01      : 3132.57.160.38
 
 IDE 2012
 3.5              : 3275.0113.0000.0000
 3.5 P01          : 3275.113.110.8
 
 IDE 2012 R2
 3.6              : 3388.0127.0000.0000
 3.6 P01          : 3388.0127.0126.0006
 3.6 Patch02      : 3388.0127.0212.0011
 3.6 Patch03      : 3388.0127.0300.0012

 IDE 2014
 4.0              : 3509.0148.0000.0000
 4.0 P01          : 3509.0148.0140.0007

 IDE 2014 R2
 4.1              : 3735.0233.0000.0000
 4.1 Patch 01     : 3735.0233.0223.0032
 4.1 SP1          : 3735.0233.0399.0061
 4.1 SP1 P02      : 3735.0233.0776.0085
 
 IDE 2017
 17               : 4148.0279.0000.0000
 17.1 (u01)       : 4545.0291.0000.0000
 17.2 (u02)       : 5019.0376.0000.0000 
 17.3 (u03 beta01): 5414.0408.0000.0000 (beta 1)
 17.3 (u03 RC1)   : 5539.0474.0000.0000 (release candidate)
 17.3 (u03)       : 5543.0474.0000.0000
 17.3 (u03) SP1   : 5593.0474.5686.1

 IDE 2020
 20.0             : 5800.0474.7005.1

  • см. TA174 System Corruption Can Result when Importing Object Files (aaPKG) Created in a Higher Application Server Version https://wdnresource.wonderware.com/support/kbcd/html/1/t002763.htm
  • см. TN614 (Legacy Tech Note #1009) How to Get the Application Server and Microsoft SQL Versions from the Galaxy Backup File

Как определить количество задействованных точек I/O

  • Если ссылки формируются из скриптов, то никак, только «ручками» посчитать. А если все ссылки прописаны, то ArchestrA IDE -> Help -> About -> View License -> IO Point: Configured Count

Вывод дерева area

  • Для вывода иерархии в режиме Runtime в InTouch арий можно воспользоваться символом Situational Awareness Library – Support – SA_PlantModelPicker