Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Вопрос по запуску и использованию isql


Автор: Wanderer2019 29.7.2005, 08:59
Здравствуйте!
Возможно вопрос немного не по адресу... но не знаю больше некуда обратиться...
Ситуация такая...:
Есть сервер SQL, который расположен на удаленной машине.
Есть базовая машина (типа место менеджера)...
Необхордимо с помощью микрософтской утилитки isql ресторить на удаленной машине забэкапленную базу...
Соответственно из .NET программы (C#)...
ну isql вызвать проблемы нет...
isql открывает sql файл, где прописано что именно надо ресторить следующим образом:
Код

restore database MyBase FROM DISK = 'c:\DBMake\LF_EMPTY.bak' 
WITH REPLACE, MOVE 'Data' TO @dbfile, MOVE 'Log' TO @logfile


проблема в том, что он ищет LF_EMPTY.bak на удаленной машине, а у меня возможности туда его записывать не будет, т.е. нужно с локальной читать. UML имена не помогают, он почему то файл не находит.

Интересно, что если не обращаться к bak файлу, а просто запустить скрипт, то он читается с локальной машины.

как поступить???

smile

Автор: arilou 2.8.2005, 16:17
Если еще вопрос актуален, то отвечаю - нельзя. Бэкапы восстанавливаются из файлов, которые находятся только на той машине, где работает SQL Server. Задачу надо решать по-другому.

Автор: Wanderer2019 2.8.2005, 16:36
тема актуальна... до сих пор пытаюсь найти выход...
не знаю чего делать =(

Автор: arilou 2.8.2005, 16:43
Опиши проблему поподробнее

Автор: Wanderer2019 2.8.2005, 16:50
ну есть некий сервер приложение... он находится в другом помещении...
на нем стоит SQL SERVER на который и нужно развернуть базу...
в помещение с сервером никто никого не пускает...
соответственно есть комп (удаленный)...
у которого есть доступ к компу с SQL сервером...
ну вот собственно и задача:
Развернуть приложение на удаленном сервере...

Автор: AntonSaburov 2.8.2005, 16:50
Может можно заливать какой-то програмкой файл на удаленную машину. По тому же TCP. Клиентская часть коннектится а серверная часть принимает и кладет в нужное место. Потом восстанавливаем.

Автор: Wanderer2019 2.8.2005, 16:51
в качестве интерпритатора языка SQL используется isql

Добавлено @ 16:51
Цитата(AntonSaburov @ 2.8.2005, 16:50)
Может можно заливать какой-то програмкой файл на удаленную машину. По тому же TCP. Клиентская часть коннектится а серверная часть принимает и кладет в нужное место. Потом восстанавливаем.


bak весит 300 метров

Автор: AntonSaburov 2.8.2005, 16:53
Цитата(Wanderer2019 @ 2.8.2005, 16:51)
в качестве интерпритатора языка SQL используется isql

А тут уже вохможно ничего и не надо. Какая разница кто запрос будет посылать. Можно вообщем-то и в самом приложении это сделать. ЗАвести роль на SQL, которой можно бэкап восстанавливать и пусть она только этим и занимается.
Добавлено @ 16:53
Цитата(Wanderer2019 @ 2.8.2005, 16:51)
bak весит 300 метров

Так в любом случаем они все будут до SQL перекачиваться.

Автор: Wanderer2019 2.8.2005, 16:54
Цитата(AntonSaburov @ 2.8.2005, 16:53)
А тут уже вохможно ничего и не надо. Какая разница кто запрос будет посылать. Можно вообщем-то и в самом приложении это сделать. ЗАвести роль на SQL, которой можно бэкап восстанавливать и пусть она только этим и занимается.


поясни, пожалуйста, что ты имеешь ввиду??

Автор: arilou 2.8.2005, 17:01
Цитата(AntonSaburov @ 2.8.2005, 16:53)
Можно вообщем-то и в самом приложении это сделать. ЗАвести роль на SQL, которой можно бэкап восстанавливать и пусть она только этим и занимается.

Речь идет о том, куда положить файл backup'а, а не невозможности законнектиться с SQL'у.

Цитата(AntonSaburov @ 2.8.2005, 16:50)
Может можно заливать какой-то програмкой файл на удаленную машину.

Вот здесь возможно. Wanderer2019, делаешь в основной программе эдакого сервиса, который принимает файл через TCP и кладет его в локальную папку сервера (т.е. машины, на которой он запущен), делаешь маа-аленькое клиентское приложение, которое коннектится к серверному приложению по указанному порту и посылает 300-метровый файл.

Понимаешь?

Автор: AntonSaburov 2.8.2005, 17:01
Во-первых - в любом случае файл с бэкапом надо перелить на машину c SQL. Тут вариантов много - можно открыть какую-то директорию и тупо копировать. Можно пойти жестче - копировать через специальную программу, можно даже наложить секретность какую-то предварительну. Вообщем надо все равно закачать.

Во-вторых - для восстановления бэкапа MS SQL все равно выполняет запрос. Такие действия могут выполнять не все. Это можно тем у кого есть права db_owner, dbcreator или sysadmin.

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)