gethostname()
POSIX способ получить локальное имя хоста. Выезд man
.
функция BSD getdomainname()
может дать Вам доменное имя, таким образом, можно создать полностью определенное имя хоста. Нет никакого POSIX способа получить домен, я боюсь.
Он может оставаться открытым, пока применяется пул соединений. Пример: тайм-аут команды может оставить блокировки и TXN, потому что клиент отправляет как «прервать».
2 решения:
Тест на клиенте, буквально:
IF @@ TRANCOUNT <> 0 ROLLBACK TRAN
Используйте SET XACT_ABORT ON
, чтобы гарантировать очистку TXN: Вопрос 1 и Вопрос 2
Я всегда использую SET XACT_ABORT ON
.
Обратите внимание, что при использовании пула соединений просто закрывая соединение без откат вернет только подключение к бассейну и сделка будет оставаться открытой до позже повторно используется или удаляется из пула. Это может привести к блокировке. ненужные и вызывают другие таймауты и скользящий блок
Из MSDN , раздел «Поддержка транзакций» (выделено жирным шрифтом)
Когда соединение закрывается, оно выпущен обратно в бассейн и в соответствующее подразделение на основе контекст транзакции. Следовательно, вы можете закрыть соединение без генерирует ошибку , даже если распределенная транзакция все еще в ожидании. Это позволяет вам совершать или прервать распределенную транзакцию в позже.
Незавершенные изменения не видны вне соединения, поэтому время отката не имеет значения. Так что да, транзакция в конечном итоге откатывается.
Сервер незамедлительно откатит любую незавершенную транзакцию при закрытии сеанса.
Пул ADO отвечает за очистку любой незавершенной транзакции перед возвратом транзакции в пул. Если вы удалите соединение с ожидающими транзакциями, оно откатится.
Транзакции могут быть запущены клиентом с помощью ADO API (SqlConnection.BeginTransaction) или путем выполнения инструкции BEGIN TRANSACTION. Протокол TDS между клиентом и сервером имеет специальные токены, информирующие клиента, когда транзакция была запущена / зафиксирована таким образом, поэтому ADO знает, что соединение имеет ожидающие транзакции, даже если они запущены в коде T-SQL.