Состояния восстановления SQL Server

Короткие и простые: поскольку элементы, которые вы ищете, не существуют в документе (пока).


В оставшуюся часть этого ответа я буду использовать getElementById как пример, но то же самое относится к getElementsByTagName , querySelector и любому другому методу DOM, который выбирает элементы.

Возможные причины

Есть две причины, по которым элемент может не существовать:

  1. Элемент с переданным идентификатором действительно не существует в документе. Вы должны дважды проверить, что идентификатор, который вы передаете на getElementById, действительно соответствует идентификатору существующего элемента в (сгенерированном) HTML и что у вас не было с ошибкой идентификатор (идентификаторы чувствительный !). Кстати, в большинстве современных браузеров , которые реализуют методы querySelector() и querySelectorAll(), нотация стиля CSS используется для извлечения элемента его id, например: document.querySelector('#elementID'), в отличие от способа, с помощью которого элемент извлекается его id в [[16]; в первом символе # необходимо, во втором это приведет к тому, что элемент не будет извлечен.
  2. Элемент не существует в данный момент , который вы вызываете getElementById ].

Последний случай довольно распространен. Браузеры анализируют и обрабатывают HTML сверху вниз. Это означает, что любой вызов элемента DOM, который встречается до появления этого элемента DOM в HTML, не будет выполнен.

Рассмотрим следующий пример:



Появляется div после script. В настоящий момент сценарий выполняется, элемент не существует , но и getElementById вернут null.

jQuery

То же самое относится к все селекторы с jQuery. jQuery не найдет элементов, если вы ошибочно написали ваш селектор, или вы пытаетесь выбрать их , прежде чем они на самом деле существуют .

Добавленный поворот - это когда jQuery не найден потому, что вы загрузили скрипт без протокола и запускаетесь из файловой системы:


этот синтаксис используется, чтобы позволить сценарию загружаться через HTTPS на странице с протоколом https: // и для загрузки HTTP-версии на странице с протоколом http: //

У этого есть неудачный побочный эффект попытки и невозможность загрузить file://somecdn.somewhere.com...


Решения

Прежде чем позвонить getElementById (или любой метод DOM, если на то пошло), убедитесь, что элементы, к которым вы хотите получить доступ, существуют, т. е. загружается DOM.

Это может быть обеспечено просто добавив ваш JavaScript после к соответствующему элементу DOM

, и в этом случае вы также можете поместить код непосредственно перед тегом закрывающего тела () (все DOM элементы будут доступны в момент выполнения скрипта). [/ g3 6]

Другие решения включают прослушивание событий load [MDN] или DOMContentLoaded [MDN] . В этих случаях не имеет значения, где в документе вы помещаете код JavaScript, вам просто нужно запомнить, чтобы весь обработчик DOM обрабатывался в обработчиках событий.

Пример:

window.onload = function() {
    // process DOM elements here
};

// or

// does not work IE 8 and below
document.addEventListener('DOMContentLoaded', function() {
    // process DOM elements here
});

Более подробную информацию об обработке событий и различиях браузера см. в статьях на странице quirksmode.org .

jQuery

Сначала убедитесь, что jQuery загружен правильно , Используйте инструменты разработчика браузера , чтобы узнать, был ли найден файл jQuery и исправлен ли URL-адрес, если он не был (например, добавьте схему http: или https: в начале, отрегулируйте путь, и т. д.)

Прослушивание событий load / DOMContentLoaded - это именно то, что делает jQuery с .ready() [docs] . Весь ваш код jQuery, который влияет на элемент DOM, должен находиться внутри этого обработчика событий.

На самом деле в учебнике j8uery явно указано:

Как почти все, что мы делаем при использовании jQuery, читает или манипулирует объектной моделью документа (DOM), мы должны убедиться, что мы начинаем добавлять события и т. д., как только DOM готов.

Для этого мы регистрируем готовое событие для документа.

$(document).ready(function() {
   // do stuff when DOM is ready
});
blockquote>

В качестве альтернативы вы также можете использовать сокращенный синтаксис:

$(function() {
    // do stuff when DOM is ready
});

Оба эквивалентны.

6
задан Andy Lester 3 August 2012 в 21:33
поделиться

2 ответа

GateKiller,

Простыми словами (и не вставка копии из SQLBOL), таким образом, можно понять понятия:

ВОССТАНОВЛЕНИЕ С ВОССТАНОВЛЕНИЕМ использует файл резервных носителей (например, fulldata.bak) для восстановления базы данных для поддержки ко времени, когда файл резервной копии был создан. Здорово, если Вы хотите возвратиться вовремя для восстановления базы данных к более раннему состоянию - как при разработке системы.

Если Вы хотите восстановить базу данных TO THE VERY LATEST DATA, (т.е. как то, если Ваше выполнение системного Аварийного восстановления и Вы не можете потерять данные), затем, Вы хотите восстановить то резервное копирование И ЗАТЕМ все журналы транзакций, созданные начиная с того резервного копирования. Это - при использовании ВОССТАНОВЛЕНИЯ NORECOVERY. Это позволит Вам восстанавливать более позднее право журналов транзакций на грани отказа (как долго, поскольку у Вас есть они).

ВОССТАНОВЛЕНИЕ С РЕЗЕРВНЫМ УСТРОЙСТВОМ является способностью восстановить базу данных до parital даты (как NORECOVERY выше), но позволить базе данных все еще использоваться ТОЛЬКО ДЛЯ ЧТЕНИЯ. Новые журналы транзакций могут все еще быть применены к базе данных, чтобы усовершенствовать его (резервный сервер). Используйте это, когда заняло бы слишком много времени восстанавливать полную базу данных для Возврата Операциям системы. (т.е. если бы у Вас есть много база данных TB, которая заняла бы 16 часов для восстановления, но могла получать обновления журнала транзакций каждые 15 минут).

Это немного похоже на зеркальный сервер - но не имея "каждой транзакции" отправляют к серверу резервного копирования в режиме реального времени.

8
ответ дан 8 December 2019 в 18:44
поделиться

Из Книг По строке я думаю, что это довольно ясно после чтения его

NORECOVERY

Дает операции восстановления команду не откатывать любые незафиксированные транзакции. Или NORECOVERY или Возможность резервирования должны быть указаны, если другой журнал транзакций должен быть применен. Если ни один, NORECOVERY, ВОССТАНОВЛЕНИЕ или РЕЗЕРВНОЕ УСТРОЙСТВО указаны, ВОССТАНОВЛЕНИЕ, не является значением по умолчанию.

SQL Server требует, чтобы опция WITH NORECOVERY использовалась на всех кроме заключительного оператора RESTORE при восстановлении резервного копирования базы данных и нескольких журналов транзакций, или когда несколько операторов RESTORE необходимы (например, полное резервное копирование базы данных, сопровождаемое дифференциальным резервным копированием базы данных).

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

При использовании с файлом или операцией восстановления группы файлов NORECOVERY вынуждает базу данных остаться в состоянии восстановления после операции восстановления. Это полезно в любой из этих ситуаций:

Скрипт восстановления запускается, и журнал всегда применяется.

Последовательность восстановлений файла используется, и база данных не предназначается, чтобы быть применимой между двумя из операций восстановления.

ВОССТАНОВЛЕНИЕ

Дает операции восстановления команду откатывать любые незафиксированные транзакции. После процесса восстановления база данных готова к употреблению.

Если последующие операции ВОССТАНОВЛЕНИЯ (ЖУРНАЛ ВОССТАНОВЛЕНИЯ или БАЗА ДАННЫХ ВОССТАНОВЛЕНИЯ от дифференциала) планируются, NORECOVERY или РЕЗЕРВНОЕ УСТРОЙСТВО должны быть указаны вместо этого.

Если ни один, NORECOVERY, ВОССТАНОВЛЕНИЕ или РЕЗЕРВНОЕ УСТРОЙСТВО указаны, ВОССТАНОВЛЕНИЕ, не является значением по умолчанию. При восстановлении наборов резервных копий от более ранней версии SQL Server может требоваться обновление базы данных. Это обновление выполняется автоматически, когда С ВОССТАНОВЛЕНИЕМ указан. Для получения дополнительной информации посмотрите Резервные копирования журнала транзакций.

РЕЗЕРВНОЕ УСТРОЙСТВО = undo_file_name

Указывает имя файла отката, таким образом, эффекты восстановления могут быть отменены. Размер, требуемый для файла отката, зависит от объема действий отмены, следующих из незафиксированных транзакций. Если ни один, NORECOVERY, ВОССТАНОВЛЕНИЕ или РЕЗЕРВНОЕ УСТРОЙСТВО указаны, ВОССТАНОВЛЕНИЕ, не является значением по умолчанию.

РЕЗЕРВНОЕ УСТРОЙСТВО позволяет базе данных быть поднятой для доступа только для чтения между восстановлениями журнала транзакций и может использоваться или с теплыми ситуациями с резервным сервером или со специальными ситуациями с восстановлением, в которых полезно осмотреть базу данных между восстановлениями журнала.

Если указанное имя файла отката не существует, SQL Server создает его. Если файл действительно существует, SQL Server перезаписывает его.

Тот же файл отката может использоваться для последовательных восстановлений той же базы данных. Для получения дополнительной информации посмотрите Используя Резервные серверы.

Важный, Если свободное пространство на диске исчерпывается на диске, содержащем указанное имя файла отката, операционные остановки восстановления.

РЕЗЕРВНОЕ УСТРОЙСТВО не позволяется, когда обновление базы данных необходимо.

1
ответ дан 8 December 2019 в 18:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: