Это зависит от типа веб-сайта, загрузка, тип контента и т.д. nginx и lighttpd имеет высокопроизводительное и маленькое место памяти/CPU. В целом, если Ваш сайт служит только статическому содержанию (изображения, медиа и т.д., никакие динамические страницы как php), и это имеет много одновременных соединений - nginx, или lighttpd может быть лучшим выбором. апач является универсальным, но больше тяжелого веб-сервера, это высоконастраиваемо, и можно служить любому типу содержания с ним.
Интересное и чрезвычайно полезное приложение nginx/lighttpd проксирует апачский сервер позади них. В этом случае nginx (или lighty) принимает соединения от пользователей и также служит статическому содержанию непосредственно им, но отправляет запросы за динамическими страницами (php, cgi и т.д.) апачу. Таким образом апач только обрабатывает динамические страницы и передает их обратно для проксирования (nginx, lighty), которые в свою очередь просто служат им пользователям. Эта схема является очень эффективной на сайтах высокой загрузки.
Но в целом я согласился бы с ghs0 - в большинстве случаев, "у Вас есть все функции и функциональность, в которой Вы нуждаетесь" с апачем.
Никакая потребность восстановить к серверу царапины, можно восстановить его к чему-то как Вы, говорят, что (MSDB_old) и делают запрос для возвращения задания:
USE msdb_old
SELECT * FROM sysjobs
JOIN sysjobsteps ON sysjobs.job_id=sysjobsteps.job_id
WHERE sysjobs.NAME='My Lost Job'
ORDER BY sysjobsteps.step_id
Необходимо будет восстановить
Править: Вот сценарий, который должен сделать это в SQL 2005 и 2008 (предположение, что Ваше задание назвали "Моим Потерянным Заданием", и Вы восстановили к MSDB_Old),
DECLARE @JobID UNIQUEIDENTIFIER
SELECT @JobID = job_id FROM msdb_old.dbo.sysjobs WHERE NAME='My Lost Job'
INSERT msdb.dbo.sysjobs
SELECT * FROM msdb_old.dbo.sysjobs
WHERE job_id=@JobID
INSERT msdb.dbo.sysjobsteps
SELECT * FROM msdb_old.dbo.sysjobsteps
WHERE job_id=@JobID
SET IDENTITY_INSERT msdb.dbo.sysjobhistory ON
INSERT msdb.dbo.sysjobhistory
(instance_id,job_id,step_id,step_name,sql_message_id,sql_severity,
[message],run_status,run_date,run_time,run_duration,operator_id_emailed,
operator_id_netsent,operator_id_paged,retries_attempted,[server])
SELECT
instance_id,job_id,step_id,step_name,sql_message_id,sql_severity,
[message],run_status,run_date,run_time,run_duration,operator_id_emailed,
operator_id_netsent,operator_id_paged,retries_attempted,[server]
FROM msdb_old.dbo.sysjobhistory
WHERE job_id=@JobID
SET IDENTITY_INSERT msdb.dbo.sysjobhistory OFF
INSERT msdb.dbo.sysjobschedules
SELECT * FROM msdb_old.dbo.sysjobschedules
WHERE job_id=@JobID
Самый легкий способ извлечь единственное задание из MSDB состоит в том, чтобы щелкнуть правой кнопкой по заданию в SSMS и сказать, что Задание Сценария - затем берет сценарий к целевому серверу и выполняет его для воссоздания задания (с потенциально некоторыми необходимыми модификациями).
Это только работает, если msdb восстанавливается как msdb - что означает в Вашем случае, необходимо было бы восстановить резервное копирование как msdb на сервере царапины.
Я предполагаю, что Вы могли восстановить его как копию msdb и затем вручную вытащить все из различных msdb_copy.dbo.sysjobs/sysjobsteps/sysjobschedules/sysjobservers таблиц с помощью соединения.
Надеюсь, это поможет!
просто восстановите к любому серверу с новым именем, я делал это много раз прежде...
Сценарий частично основан на этом в принятом ответе. Он был обновлен для SQL 2014 с обработкой исключений, атомарными транзакциями и некоторыми другими улучшениями.
-- Script for SQL 2014
DECLARE @JobID UNIQUEIDENTIFIER
declare @servername sysname
set @servername = @@SERVERNAME
SELECT @JobID = job_id
FROM msdb_old.dbo.sysjobs
WHERE name='My Lost Job'
BEGIN TRAN
BEGIN TRY
INSERT msdb.dbo.sysjobs
SELECT * FROM msdb_old.dbo.sysjobs
WHERE job_id=@JobID
INSERT msdb.dbo.sysjobsteps
SELECT * FROM msdb_old.dbo.sysjobsteps
WHERE job_id=@JobID
SET IDENTITY_INSERT msdb.dbo.sysjobhistory ON
INSERT msdb.dbo.sysjobhistory
(instance_id,job_id,step_id,step_name,sql_message_id,sql_severity,
[message],run_status,run_date,run_time,run_duration,operator_id_emailed,
operator_id_netsent,operator_id_paged,retries_attempted,[server])
SELECT
instance_id,job_id,step_id,step_name,sql_message_id,sql_severity,
[message],run_status,run_date,run_time,run_duration,operator_id_emailed,
operator_id_netsent,operator_id_paged,retries_attempted,[server]
FROM msdb_old.dbo.sysjobhistory
WHERE job_id=@JobID
SET IDENTITY_INSERT msdb.dbo.sysjobhistory OFF
-- New insert in sysschedules
SET IDENTITY_INSERT msdb.dbo.sysschedules ON
INSERT msdb.dbo.sysschedules (schedule_id, schedule_uid,
originating_server_id, name, owner_sid, enabled,
freq_type,freq_interval, freq_subday_type,
freq_subday_interval, freq_relative_interval,
freq_recurrence_factor, active_start_date,
active_end_date, active_start_time, active_end_time,
date_created, date_modified, version_number)
SELECT schedule_id, schedule_uid, originating_server_id, name,
owner_sid, enabled, freq_type, freq_interval, freq_subday_type,
freq_subday_interval, freq_relative_interval,
freq_recurrence_factor, active_start_date, active_end_date,
active_start_time, active_end_time, date_created, date_modified,
version_number
FROM msdb_old.dbo.sysschedules a
WHERE schedule_id = (select schedule_id from msdb_old.dbo.sysjobschedules b where job_id=@JobID )
SET IDENTITY_INSERT msdb.dbo.sysschedules OFF
INSERT msdb.dbo.sysjobschedules
SELECT * FROM msdb_old.dbo.sysjobschedules
WHERE job_id=@JobID
-- Alter job as local job
EXEC msdb.dbo.sp_add_jobserver @job_id=@JobID, @server_name = @servername
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage;
ROLLBACK TRAN
RETURN
END CATCH
COMMIT TRAN
Привет, я хотел бы добавить к ответу Сквиллмана. Я протестировал его в 2008 R2.
Сначала, путем исправления ошибки с нарушением FK с помощью sysjobschedules и sysschedules.
Во-вторых, запустив dbo.sp_add_jobserver.
Наконец, зациклив все задания в msdb_old.dbo.sysjobs для полной репликации.
DECLARE @JobID UNIQUEIDENTIFIER
declare @jobname nvarchar(128)
DECLARE MY_CURSOR CURSOR
LOCAL STATIC READ_ONLY FORWARD_ONLY
FOR
SELECT DISTINCT job_id
FROM msdb_old.dbo.sysjobs
OPEN MY_CURSOR
FETCH NEXT FROM MY_CURSOR INTO @JobID
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @jobname = name FROM msdb_old.dbo.sysjobs WHERE job_id=@jobid
print @jobname
print 'insert in sysjobs'
INSERT msdb.dbo.sysjobs
SELECT * FROM msdb_old.dbo.sysjobs
WHERE job_id=@JobID
print 'insert in sysjobsteps'
INSERT msdb.dbo.sysjobsteps
SELECT * FROM msdb_old.dbo.sysjobsteps
WHERE job_id=@JobID
print 'insert in sysjobhistory'
SET IDENTITY_INSERT msdb.dbo.sysjobhistory ON
INSERT msdb.dbo.sysjobhistory
(instance_id,job_id,step_id,step_name,sql_message_id,sql_severity,
[message],run_status,run_date,run_time,run_duration,operator_id_emailed,
operator_id_netsent,operator_id_paged,retries_attempted,[server])
SELECT
instance_id,job_id,step_id,step_name,sql_message_id,sql_severity,
[message],run_status,run_date,run_time,run_duration,operator_id_emailed,
operator_id_netsent,operator_id_paged,retries_attempted,[server]
FROM msdb_old.dbo.sysjobhistory
WHERE job_id=@JobID
SET IDENTITY_INSERT msdb.dbo.sysjobhistory OFF
print 'insert in sysschedules'
SET IDENTITY_INSERT msdb.dbo.sysschedules ON
INSERT msdb.dbo.sysschedules
( [schedule_id]
,[schedule_uid]
,[originating_server_id]
,[name]
,[owner_sid]
,[enabled]
,[freq_type]
,[freq_interval]
,[freq_subday_type]
,[freq_subday_interval]
,[freq_relative_interval]
,[freq_recurrence_factor]
,[active_start_date]
,[active_end_date]
,[active_start_time]
,[active_end_time]
,[date_created]
,[date_modified]
,[version_number])
SELECT s.[schedule_id]
,s.[schedule_uid]
,s.[originating_server_id]
,s.[name]
,s.[owner_sid]
,s.[enabled]
,s.[freq_type]
,s.[freq_interval]
,s.[freq_subday_type]
,s.[freq_subday_interval]
,s.[freq_relative_interval]
,s.[freq_recurrence_factor]
,s.[active_start_date]
,s.[active_end_date]
,s.[active_start_time]
,s.[active_end_time]
,s.[date_created]
,s.[date_modified]
,s.[version_number]
FROM msdb_old.dbo.sysschedules s, msdb_old.dbo.sysjobschedules j
WHERE j.job_id=@JobID and s.schedule_id = j.schedule_id
SET IDENTITY_INSERT msdb.dbo.sysschedules OFF
print 'insert in sysjobschedules'
INSERT msdb.dbo.sysjobschedules
SELECT * FROM msdb_old.dbo.sysjobschedules
WHERE job_id=@JobID
print'exec adds job in server'
use msdb
EXEC dbo.sp_add_jobserver @job_id = @jobid
FETCH NEXT FROM MY_CURSOR INTO @JobID
END
CLOSE MY_CURSOR
DEALLOCATE MY_CURSOR