Как восстановить базу данных SQL Server с сетевого диска с помощью SQL-запроса [duplicate]

Есть больше различий между ereg() и preg_replace(), чем просто синтаксис:

  • Возвращаемое значение: При ошибке : оба возвращают FALSE Не соответствует : ereg() возвращает FALSE, preg_match() возвращает 0 В соответствии с : ereg() возвращает длину строки или 1, всегда возвращается preg_match() 1
  • Результирующий массив совпадающих подстрок: если какая-либо подстрока вообще не найдена ((b) в ...a(b)?), соответствующий элемент в ereg() будет FALSE, а в preg_match() он не будет установлен вообще.

Если кто-то не достаточно храбр, чтобы преобразовать его ereg() в preg_match(), он или она может использовать mb_ereg ( ) , который по-прежнему доступен в PHP 7.

35
задан Matt 25 November 2014 в 22:06
поделиться

9 ответов

База данных часто работает как служба под учетной записью без доступа к сети. Если это так, то вы не сможете восстановить его непосредственно по сети. Либо резервная копия должна быть скопирована на локальный компьютер, либо служба базы данных должна запускаться как пользователь с надлежащим доступом к сети.

16
ответ дан Curt Hagenlocher 22 August 2018 в 18:39
поделиться
  • 1
    Или выполнить EXEC xp_cmdshell 'NET USE... перед доступом к сети; см. другие ответы .. – JB. 17 June 2014 в 11:01
  • 2
    [Д0] mssqltips.com/sqlservertip/3499/… – Jasim Khan Afridi 22 May 2017 в 10:03

Вы можете использовать SP xp_cmdshell для сопоставления сетевого диска для сервера sql, после чего он появится в окне просмотра файлов.

EXEC xp_cmdshell 'NET USE Z: SERVERLOCATION PASSWORD /USER:DOMAIN\USERNAME'

подробнее здесь: Восстановление базы данных из сети Драйв

Работал для меня!

4
ответ дан aledpardo 22 August 2018 в 18:39
поделиться

Убедитесь, что пользователь, запускающий ваш SQL services в "Services.msc", является активным каталогом "Domain User", это устранит проблему.

4
ответ дан amesh 22 August 2018 в 18:39
поделиться

Вы не можете сделать это через GUI SSMS, но вы можете сделать это, используя скрипт. RESTORE DATABASE из DISK = '\ unc \ path \ filename' Если вам нужно автоматизировать этот процесс, лучше всего настроить SQL Server Job и запустить его как пользователя с доступом к файлу.

7
ответ дан baldy 22 August 2018 в 18:39
поделиться
  • 1
    Это неправда. Вы можете восстановить его по сети, пока вы подключили сетевой диск до открытия «Восстановить базу данных ...». Диалог. – Jim Aho 15 March 2017 в 09:56
  • 2
    Это не относится к инструментам SQL 2005 или SQL 2008 – baldy 20 March 2017 в 09:22

Мне приходилось делать это несколько раз, и есть только два варианта, о которых я знаю. Скопируйте файл локально на SQL Server или на сервере SQL создайте сопоставленный сетевой диск для общего ресурса, который содержит файл резервной копии.

0
ответ дан Brian G Swanson 22 August 2018 в 18:39
поделиться

В качестве побочного примечания, если вы выполняете SQL на виртуальной машине, часто бывает немного хлопот, чтобы просто временно установить новый диск на виртуальной машине с достаточным пространством для копирования ваших файлов резервных копий, выполните восстановление с этого нового локальную копию, а затем удалить временный диск.

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

0
ответ дан Brian Miller 22 August 2018 в 18:39
поделиться

Кроме того, вам необходимо убедиться, что служба SQL Server работает как пользователь, имеющий сетевой доступ, и разрешения для общего ресурса, в котором находится файл резервной копии. «Локальная система» не будет иметь прав доступа к сети.

0
ответ дан Daniel O 22 August 2018 в 18:39
поделиться

Создайте общий диск на компьютере с резервными копиями, скажем, server1 имеет резервные копии в папке «Резервные копии». Предоставьте полный контроль над учетной записью, на которой работает SQL Server. На сервере, который вы хотите восстановить для запуска SSMS, перейдите в базу данных восстановления и выберите «От устройства». В диалоговом окне «Locate Backup file-« Server »и удалите что-либо в поле« Выбранный путь », а в поле« Имя файла »укажите полный путь так:« \ server \ backups \ db.bak ». По крайней мере, это работало для меня при переходе с 05 на 08. Не предпочтительный метод, потому что любая икота сети может вызвать проблему с восстановлением.

0
ответ дан Kelly 22 August 2018 в 18:39
поделиться

У вас есть несколько вариантов использования сетевого файла в качестве источника резервного копирования

  1. Сетевой сетевой файл / путь к карте, файл для хостинга под SAME-пользователем в качестве MS-SQL Server.
  2. Используйте расширенную хранимую процедуру xp_cmdshell для сопоставления сетевого диска изнутри MS SQL (таким образом, командная оболочка будет иметь те же привилегии, что и учетная запись пользователя, использующая SSMS)
-- allow changes to advanced options 
EXEC sp_configure 'show advanced options', 1
GO
-- Update currently configured values for advanced options.
RECONFIGURE
GO
-- To enable xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
-- Update currently configured values for advanced options.
RECONFIGURE
GO
EXEC xp_cmdshell 'NET USE Z: \\Srv\Path password1 /USER:Domain\UserName'

Затем диск Z : будет отображаться в студии Server Managment или просто

RESTORE DATABASE DataBaseNameHere FROM DISK = 'Z:\BackNameHere.BAK'
GO
65
ответ дан TPAKTOPA 22 August 2018 в 18:39
поделиться
  • 1
    Вызов NET USE с текущим пользователем службы SQL Server решает проблему. Этот ответ действительно полезен. – JB. 17 June 2014 в 10:59
  • 2
    Это потрясающе. Это решение нашей проблемы: полный доступ к MSSQL, но не доступ к файловому серверу. Необходима копия. Как? Это решение. – David Betz 10 August 2015 в 15:08
  • 3
    Вам нужно будет запустить что-то вроде EXEC sp_configure 'xp_cmdshell', 0 после этого, чтобы отключить xp_cmdshell? (по соображениям безопасности или еще много чего). – Jim Aho 14 March 2017 в 13:10
  • 4
    Довольно круто, чтобы вызвать командную оболочку Windows внутри студии управления. Я думаю, что стоит упомянуть, что командная оболочка будет иметь те же привилегии , что и учетная запись пользователя, использующая SSMS. – Jim Aho 15 March 2017 в 09:54
  • 5
    @JimAho Я думаю, командная оболочка, запущенная с MS SQL Server, является большой проблемой безопасности. Но они реализовали его, чтобы покрыть недостаток функциональности или другие проблемы архитектуры. Другим серверам SQL не нужно иметь доступ администратора или запускать командную оболочку, выполнять обычные задачи, например восстанавливать резервную копию ... – TPAKTOPA 17 March 2017 в 12:49
Другие вопросы по тегам:

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