Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.94/64: Рейтинг темы: голосов - 64, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 30.05.2015
Сообщений: 10

Использование планировщика заданий Windows 8.1 как альтернатива SQL агента

16.06.2015, 22:05. Показов 11858. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Уважаемые форумчане, подскажите решение нижеописанной задачи:

Требуется использовать планировщик заданий как замену SQL агента. Я хочу запустить процедуру в БД на SQL SERVER 2012. Для доступа к БД использую EXPRESS-версию Management Studio 2012 используя имя сервера/логин/пароль.

Поискав ответа в сети, я наткнулся на статью с описанием данной проблемы, но там подключение к БД идет через IP, но я не понимаю как мне подключится описанным в статье способом.

Прошу помочь.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.06.2015, 22:05
Ответы с готовыми решениями:

Как изменить стандартные задания планировщика заданий Task Scheduler в WIM-образе Windows 10?
Как изменить стандартные задания планировщика заданий sheduler в образе (wim) Windows 10? Например SCHTASKS /Change /TN...

Альтернатива Oracle (условие: использование языка SQL и процедурного PL/SQL)
Здравствуйте! Проблема такая: мне надо написать курсовой проект в котором управление БД, созданной в Oracle, производится через приложение...

Создание и использование параметров агента. Генерация агента блоком source
Здравствуйте! У меня AnyLogic 7.2.0. Прошу помочь, кто знает: Как создавать агента с помощью блока Source, и при этом на каждом агенте...

20
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
17.06.2015, 08:57
IP\Имя или IP (если экземпляр неименованный)
1
2 / 2 / 4
Регистрация: 20.06.2014
Сообщений: 20
17.06.2015, 14:32
Если нужно для резервного копирование БД.
Есть готовый программный продукт.
https://sqlbackupandftp.com
1
9 / 9 / 2
Регистрация: 11.06.2015
Сообщений: 18
17.06.2015, 16:41
Я использую VBS вместо SQL агента для резервного копирования БД.
А зато... Обыкновенный планировщик Windows каждые 20 минут запускает мой скрипт, который:
1) делает разностную копию на резервный диск, ч-з сутки имена копий перекрываются.
2) циклически пингует компьютеры в сети по списку, если включен - архивирует туда, иначе, или если ошибка (кто-то вырубил некстати) - повтор на следующий. Ч-з неделю имена перекрываются.
3) все подробно протоколируется, с указанием основной копии БД (даты последней архивации), протоколы так же отсылаются по сети.
4) все это сделал я сам и годами работает как часы. Чудеса редко - но бывают.

Вот скрипт (но на сетевых компьютерах нужен полный доступ к архиву, в данном случае ресурс "Архив$", т. е. скрытый - и в планировщике таки указать файл скрипта "Наше имя.vbs" с нужным периодом, у меня - 20 минут):

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
Option Explicit
Dim f,  FSO, LogFile, cn, cm, rs, WD, TM, SecondFolder, Start, i, j, Shell, strCommand, strHost, ReturnCode, LastBackup
On Error Resume Next
'====================================================================
 
Const Period = 20                       ' период между запусками (мин.)
Const RarFile = """C:\Program Files\WinRAR\WinRAR.exe"""    ' путь к архиватору
Const SourceCatalog = "MyBD"                    ' имя БД
Const DestFolder = "F:\MyFolder\"               ' папка локальных архивов
Const DestFile = "MyBD"                     ' имя файла копии
Const TimeOut = 60                      ' таймаут
                                ' список путей к архивам
SecondFolder = Array( _
    "\\Cоmp1\Архив$\", _
    "\\Cоmp2\Архив$\", _
    "\\Cоmp3\Архив$\", _
    "\\Cоmp4\Архив$\" _
    )
 
'====================================================================
Set cn = CreateObject("ADODB.Connection")
Set cm = CreateObject("ADODB.Command")
Set rs = CreateObject("ADODB.Recordset")
WD=WeekDay(Date(), vbMonday): TM = Time()
Start = ((Hour(TM) * 60 + Minute(TM)) \ Period) Mod (Ubound(SecondFolder) + 1)
TM = "_" & Hour(TM) & "_" & Right("0" & Minute(TM),2)
cn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=" & SourceCatalog & ";Data Source=(local)"
cn.Open
rs.Open "SELECT MAX(bs.backup_finish_date) AS LastBackupDate FROM master.dbo.sysdatabases AS db INNER JOIN msdb.dbo.backupset AS bs ON bs.database_name = db.name WHERE (bs.type = 'D') AND (db.name = '" & SourceCatalog & "')", cn
If Not rs.Eof Then
    If Not IsNull(rs("LastBackupDate")) Then LastBackup = CStr(rs("LastBackupDate"))
End If
rs.Close
cm.ActiveConnection = cn
cm.CommandType = adCmdText
cm.CommandText = "BACKUP DATABASE [" & SourceCatalog & "] TO DISK = N'" & DestFolder & DestFile & TM & ".dat' WITH DIFFERENTIAL, NOFORMAT, INIT, NAME = N'MyBD backup', NOREWIND, NOUNLOAD, NOSKIP"
cm.CommandTimeout = TimeOut
cm.Execute
Set FSO = CreateObject("Scripting.FileSystemObject")
If Err.Number = 0 Or Err.Number = 500 Then
    Set Shell = wscript.createObject("wscript.shell")
    For i = 0 To Ubound(SecondFolder)
        Err.Clear
        j= (i + Start) Mod (Ubound(SecondFolder) + 1)
        strHost = Mid(SecondFolder(j), 3, InStr("3",SecondFolder(j),"\") - 3)
        strCommand = "ping -n 1 -w 300 " & strHost
        ReturnCode = Shell.Run(strCommand, 0, True)
        If ReturnCode = 0 Then
            If FSO.FileExists(SecondFolder(j) & DestFile & ".rar") Then FSO.DeleteFile SecondFolder(j) & DestFile & ".rar", True
            If Err.Number = 0 Then
                If FSO.FileExists(SecondFolder(j) & DestFile & "_" & WD & TM & ".rar") Then FSO.DeleteFile SecondFolder(j) & DestFile & "_" & WD & TM & ".rar", True
                If Err.Number = 0 Then
                    strCommand = RarFile & " A -inul " & SecondFolder(j) & DestFile & ".rar " & DestFolder & DestFile & TM & ".dat " & DestFolder & DestFile & ".log"
                    ReturnCode = Shell.Run(strCommand, 0, True)
                    If ReturnCode=0 Then
                        Set f = FSO.GetFile(SecondFolder(j) & DestFile & ".rar")
                        f.Name = DestFile & "_" & WD & TM & ".rar"
                        If Err.Number = 0 Then
                            Set LogFile = FSO.OpenTextFile(DestFolder & DestFile & ".log", 8, True)
                            LogFile.WriteLine Now & " (+" & LastBackup & ") - " & SecondFolder(j) & DestFile & "_" & WD & TM & ".rar (" & SecondFolder(Start) & ")"
                            LogFile.Close
                            Exit For
                        Else
                            Set LogFile = FSO.OpenTextFile(DestFolder & DestFile & ".log", 8, True)
                            LogFile.WriteLine Now & " (+" & LastBackup & ") - " & SecondFolder(j) & DestFile & "_" & WD & TM & ".rar (" & SecondFolder(Start) & ") --- ОШИБКА (Rename) !!! (" & Err.Number & " " & Err.Description & ")"
                            LogFile.Close
                        End If
                        f.Close
                    Else
                        Set LogFile = FSO.OpenTextFile(DestFolder & DestFile & ".log", 8, True)
                        LogFile.WriteLine Now & " (+" & LastBackup & ") - " & SecondFolder(j) & DestFile & "_" & WD & TM & ".rar (" & SecondFolder(Start) & ") --- ОШИБКА (Archive) !!! (" & strCommand & ")"
                        LogFile.Close
                    End If
                Else
                    Set LogFile = FSO.OpenTextFile(DestFolder & DestFile & ".log", 8, True)
                    LogFile.WriteLine Now & " (+" & LastBackup & ") - " & SecondFolder(j) & DestFile & "_" & WD & TM & ".rar (" & SecondFolder(Start) & ") --- ОШИБКА (Delete) !!! (" & Err.Number & " " & Err.Description & ")"
                    LogFile.Close
                End If
            Else
                Set LogFile = FSO.OpenTextFile(DestFolder & DestFile & ".log", 8, True)
                LogFile.WriteLine Now & " (+" & LastBackup & ") - " & SecondFolder(j) & DestFile & ".rar (" & SecondFolder(Start) & ") --- ОШИБКА (Delete) !!! (" & Err.Number & " " & Err.Description & ")"
                LogFile.Close
            End If
        End If
    Next
Else
    Set LogFile = FSO.OpenTextFile(DestFolder & DestFile & ".log", 8, True)
    LogFile.WriteLine Now & " (+" & LastBackup & ") - (" & SecondFolder(Start) & ") --- ОШИБКА (Backup) !!! (" & Err.Number & " " & Err.Description & ")"
    LogFile.Close
End If
Err.Clear
0
0 / 0 / 0
Регистрация: 30.05.2015
Сообщений: 10
17.06.2015, 21:04  [ТС]
Цитата Сообщение от VikNaz Посмотреть сообщение
Я использую VBS вместо SQL агента для резервного копирования БД.
А зато... Обыкновенный планировщик Windows каждые 20 минут запускает мой скрипт, который:
1) делает разностную копию на резервный диск, ч-з сутки имена копий перекрываются.
2) циклически пингует компьютеры в сети по списку, если включен - архивирует туда, иначе, или если ошибка (кто-то вырубил некстати) - повтор на следующий. Ч-з неделю имена перекрываются.
3) все подробно протоколируется, с указанием основной копии БД (даты последней архивации), протоколы так же отсылаются по сети.
4) все это сделал я сам и годами работает как часы. Чудеса редко - но бывают.

Вот скрипт (но на сетевых компьютерах нужен полный доступ к архиву, в данном случае ресурс "Архив$", т. е. скрытый - и в планировщике таки указать файл скрипта "Наше имя.vbs" с нужным периодом, у меня - 20 минут):

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
Option Explicit
Dim f,  FSO, LogFile, cn, cm, rs, WD, TM, SecondFolder, Start, i, j, Shell, strCommand, strHost, ReturnCode, LastBackup
On Error Resume Next
'====================================================================
 
Const Period = 20                       ' период между запусками (мин.)
Const RarFile = """C:\Program Files\WinRAR\WinRAR.exe"""    ' путь к архиватору
Const SourceCatalog = "MyBD"                    ' имя БД
Const DestFolder = "F:\MyFolder\"               ' папка локальных архивов
Const DestFile = "MyBD"                     ' имя файла копии
Const TimeOut = 60                      ' таймаут
                                ' список путей к архивам
SecondFolder = Array( _
    "\\Cоmp1\Архив$\", _
    "\\Cоmp2\Архив$\", _
    "\\Cоmp3\Архив$\", _
    "\\Cоmp4\Архив$\" _
    )
 
'====================================================================
Set cn = CreateObject("ADODB.Connection")
Set cm = CreateObject("ADODB.Command")
Set rs = CreateObject("ADODB.Recordset")
WD=WeekDay(Date(), vbMonday): TM = Time()
Start = ((Hour(TM) * 60 + Minute(TM)) \ Period) Mod (Ubound(SecondFolder) + 1)
TM = "_" & Hour(TM) & "_" & Right("0" & Minute(TM),2)
cn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=" & SourceCatalog & ";Data Source=(local)"
cn.Open
rs.Open "SELECT MAX(bs.backup_finish_date) AS LastBackupDate FROM master.dbo.sysdatabases AS db INNER JOIN msdb.dbo.backupset AS bs ON bs.database_name = db.name WHERE (bs.type = 'D') AND (db.name = '" & SourceCatalog & "')", cn
If Not rs.Eof Then
    If Not IsNull(rs("LastBackupDate")) Then LastBackup = CStr(rs("LastBackupDate"))
End If
rs.Close
cm.ActiveConnection = cn
cm.CommandType = adCmdText
cm.CommandText = "BACKUP DATABASE [" & SourceCatalog & "] TO DISK = N'" & DestFolder & DestFile & TM & ".dat' WITH DIFFERENTIAL, NOFORMAT, INIT, NAME = N'MyBD backup', NOREWIND, NOUNLOAD, NOSKIP"
cm.CommandTimeout = TimeOut
cm.Execute
Set FSO = CreateObject("Scripting.FileSystemObject")
If Err.Number = 0 Or Err.Number = 500 Then
    Set Shell = wscript.createObject("wscript.shell")
    For i = 0 To Ubound(SecondFolder)
        Err.Clear
        j= (i + Start) Mod (Ubound(SecondFolder) + 1)
        strHost = Mid(SecondFolder(j), 3, InStr("3",SecondFolder(j),"\") - 3)
        strCommand = "ping -n 1 -w 300 " & strHost
        ReturnCode = Shell.Run(strCommand, 0, True)
        If ReturnCode = 0 Then
            If FSO.FileExists(SecondFolder(j) & DestFile & ".rar") Then FSO.DeleteFile SecondFolder(j) & DestFile & ".rar", True
            If Err.Number = 0 Then
                If FSO.FileExists(SecondFolder(j) & DestFile & "_" & WD & TM & ".rar") Then FSO.DeleteFile SecondFolder(j) & DestFile & "_" & WD & TM & ".rar", True
                If Err.Number = 0 Then
                    strCommand = RarFile & " A -inul " & SecondFolder(j) & DestFile & ".rar " & DestFolder & DestFile & TM & ".dat " & DestFolder & DestFile & ".log"
                    ReturnCode = Shell.Run(strCommand, 0, True)
                    If ReturnCode=0 Then
                        Set f = FSO.GetFile(SecondFolder(j) & DestFile & ".rar")
                        f.Name = DestFile & "_" & WD & TM & ".rar"
                        If Err.Number = 0 Then
                            Set LogFile = FSO.OpenTextFile(DestFolder & DestFile & ".log", 8, True)
                            LogFile.WriteLine Now & " (+" & LastBackup & ") - " & SecondFolder(j) & DestFile & "_" & WD & TM & ".rar (" & SecondFolder(Start) & ")"
                            LogFile.Close
                            Exit For
                        Else
                            Set LogFile = FSO.OpenTextFile(DestFolder & DestFile & ".log", 8, True)
                            LogFile.WriteLine Now & " (+" & LastBackup & ") - " & SecondFolder(j) & DestFile & "_" & WD & TM & ".rar (" & SecondFolder(Start) & ") --- ОШИБКА (Rename) !!! (" & Err.Number & " " & Err.Description & ")"
                            LogFile.Close
                        End If
                        f.Close
                    Else
                        Set LogFile = FSO.OpenTextFile(DestFolder & DestFile & ".log", 8, True)
                        LogFile.WriteLine Now & " (+" & LastBackup & ") - " & SecondFolder(j) & DestFile & "_" & WD & TM & ".rar (" & SecondFolder(Start) & ") --- ОШИБКА (Archive) !!! (" & strCommand & ")"
                        LogFile.Close
                    End If
                Else
                    Set LogFile = FSO.OpenTextFile(DestFolder & DestFile & ".log", 8, True)
                    LogFile.WriteLine Now & " (+" & LastBackup & ") - " & SecondFolder(j) & DestFile & "_" & WD & TM & ".rar (" & SecondFolder(Start) & ") --- ОШИБКА (Delete) !!! (" & Err.Number & " " & Err.Description & ")"
                    LogFile.Close
                End If
            Else
                Set LogFile = FSO.OpenTextFile(DestFolder & DestFile & ".log", 8, True)
                LogFile.WriteLine Now & " (+" & LastBackup & ") - " & SecondFolder(j) & DestFile & ".rar (" & SecondFolder(Start) & ") --- ОШИБКА (Delete) !!! (" & Err.Number & " " & Err.Description & ")"
                LogFile.Close
            End If
        End If
    Next
Else
    Set LogFile = FSO.OpenTextFile(DestFolder & DestFile & ".log", 8, True)
    LogFile.WriteLine Now & " (+" & LastBackup & ") - (" & SecondFolder(Start) & ") --- ОШИБКА (Backup) !!! (" & Err.Number & " " & Err.Description & ")"
    LogFile.Close
End If
Err.Clear
Я с VBS никогда не работал, ровно как и с планировщиком задач.

Добавлено через 25 минут
Можешь поподробнее рассказать как пользоваться планировщиком задач в вопросе запуска процедур по расписанию на удаленной БД? Буду признателен!
0
9 / 9 / 2
Регистрация: 11.06.2015
Сообщений: 18
17.06.2015, 23:47
Планировщик задач Windows - это пункт меню "Назначенные задания". Или же в Панели управления тот же пункт.
Суть его проста. Открывается папка, где эти задания и находятся. Создаем запись "Новое задание" и указываем, какой
файл в какое время и как часто запускать. Это может быть программа, BAT-файл, даже TXT (просто откроется).
А если вбить команду Windows, к примеру shutdown -f -s -t 60 - то в указанное время начнет выключаться компьютер.
Одно но. Там я отметил пункт "Выполнять при выполненном входе в систему" - т. к. пароль не ставил, указать от чьего имени выполнять - не могу.
Этим я и воспользовался. Создал скрипт в блокноте, сменил расширение на .vbs, кинул в любую папку на сервер и настроил новое задание (там же) на него,
запускать каждый день и ч-з каждые 20 минут. Суть скрипта та же, что и BAT-файла, хорош для административных функций - но полноценное программирование.
Тот же Visual Basic. Работаем с файлами, с SQL-сервером и т. д. тот же доступ к серверу (ADODB). Хотим усовершенствовать - да просто редактируем файл скрипта.
Можем запускать хранимые процедуры, получать данные, что-то формировать.
Или вот примочка:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Option Explicit
Dim FSO, LogFile, cn, cm, Res
On Error Resume Next
'====================================================================
 
Const SourceServer = "MyServer"                 ' имя сервера
Const SourceCatalog = "MyBD"                ' имя БД
Const DestFolder = "F:\MyCopy\"                 ' папка архивов (сервер)
Const DestFile = "MyBD"                 ' имя файла копии
Const LogFolder = "D:\MyFolger\"                    ' папка логов
Const TimeOut = 120                     ' таймаут
 
'====================================================================
Res=MsgBox("Архивировать ?",vbOkCancel+vbQuestion+vbDefaultButton2,"ПОЛНАЯ АРХИВАЦИЯ...")
If Res=vbOk Then
    Set cn = CreateObject("ADODB.Connection")
    Set cm = CreateObject("ADODB.Command")
    cn.ConnectionString = "Provider=SQLOLEDB.1;Password=MyPassword;Persist Security Info=True;User ID=sa;Initial Catalog=" & SourceCatalog & ";Data Source=" & SourceServer
    cn.Open
    cm.ActiveConnection = cn
    cm.CommandType = adCmdText
    cm.CommandText = "BACKUP DATABASE [" & SourceCatalog & "] TO DISK = N'" & DestFolder & DestFile & ".dat' WITH NOFORMAT, INIT, NAME = N'TorgoviyDom backup', NOREWIND, NOUNLOAD, NOSKIP"
        cm.CommandTimeout = TimeOut
    cm.Execute
    If Err.Number = 0 Or Err.Number = 500 Then
        Set FSO = CreateObject("Scripting.FileSystemObject")
        Set LogFile = FSO.OpenTextFile(LogFolder & DestFile & ".log", 8, True)
        LogFile.WriteLine Now & " - " & DestFolder & DestFile & ".dat" & " - <ПОЛНЫЙ>"
        LogFile.Close
        wscript.echo "ОК"
    Else
        wscript.echo "ОШИБКА !!! (" & Err.Number & " " & Err.Description & ")"
    End If
End If
Err.Clear
Это я так, чтобы полную копию без Management Studio сделать.
Этот файл - на любом локальном компьютере (даже удаленном, из дому ч-з виртуальную сеть). Запускаю по настроению, двойным щелчком.
При том, бэкап будет на сервере, а лог - на локальном. Нелогично... Но это ж для прикола, просто студию лень лишний раз открывать. Но можно по сети сделать.
0
0 / 0 / 0
Регистрация: 30.05.2015
Сообщений: 10
18.06.2015, 20:27  [ТС]
Видимо, неминуемо придется разбираться в VBS А ведь хотел просто процедуру вызвать через EXEC
0
0 / 0 / 0
Регистрация: 30.05.2015
Сообщений: 10
19.06.2015, 21:40  [ТС]
VikNaz, подскажи, пожалуйста, как написать vbs скрипт, который будет запускать необходимую мне процедуру (процедура хранится в Management Studio) через N-ое количество минут? Заодно может знаешь учебники по VBS, ориентированные именно на подобные моей задачи(сетевые задачи), а не на Excel?
0
9 / 9 / 2
Регистрация: 11.06.2015
Сообщений: 18
21.06.2015, 09:27
Ну, процедура хранится на сервере, хоть и сделана в Management Studio.
Если положить на сервер вот такой скрипт, скажем, в файле "TEST.vbs":

Visual Basic
1
2
3
4
5
6
Dim cn, rs
Set cn = CreateObject("ADODB.Connection")
cn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=TestDB;Data Source=(local)"
cn.Open
Set rs = CreateObject("ADODB.Recordset")
rs.Open "TEST", cn
только вместо "TestDB" - конкретное имя базы, а вместо "TEST" - имя процедуры и настроить планировщик с требуемым периодом запуска - все работает. Полезно разок и вручную щелкнуть наш файл, чтоб убедиться в работоспособности.

Каких-то материалов по vbs у меня нет, работаю на VBA, тот, что в Excel и Access, там то же, чуть отличается,
Например, здесь Set cn = CreateObject("ADODB.Connection"), а там Set cn = CurrentProject.Connection.
Да в интернете полно всяких справочников, примеров. Сам там и уточняю различия в синтаксисе.

Проверяем...
Создам хранимку:
T-SQL
1
2
3
4
5
6
7
CREATE PROCEDURE [dbo].[TEST]
AS
BEGIN
    SET NOCOUNT ON;
    UPDATE ТестоваяТаблица
SET Номер = Номер + 1
END
Работает.
0
0 / 0 / 0
Регистрация: 30.05.2015
Сообщений: 10
21.06.2015, 10:14  [ТС]
А где в этом запросе надо писать имя сервера и логин/пароль доступа? Я подключаюсь к этой БД через имя сервера, имя пользователя и пароль - т.е. те поля, которые указываются в management studio при подключении.
0
9 / 9 / 2
Регистрация: 11.06.2015
Сообщений: 18
21.06.2015, 13:25
У меня скрипт на сервере, использую доверительное соединение, без пароля, сервер "(local)".
Ну а чтобы в любом случае работало, и удаленно (в принципе, запускать скрипт можно и на любом компьютере), если, конечно, включена аутентификация SQL-сервер, протокол TCP/IP, все как положено, тогда так:

Visual Basic
1
2
3
4
5
6
Dim cn, rs
Set cn = CreateObject("ADODB.Connection")
cn.ConnectionString = "Provider=SQLOLEDB.1;Password=MyPassword;Persist Security Info=True;User ID=sa;Initial Catalog=TestDB;Data Source=MyServer"
cn.Open
Set rs = CreateObject("ADODB.Recordset")
rs.Open "EXEC TEST", cn
Только поставить реальные MyPassword (пароль), TestDB (имя базы данных), MyServer (имя сервера), не исключено, что и юзер другой (sa). Все то же, что и в Management Studio при подключении.

Я еще и "EXEC" добавил, хотя в моем случае необязательно.
0
0 / 0 / 0
Регистрация: 30.05.2015
Сообщений: 10
21.06.2015, 15:01  [ТС]
Спасибо большое за помощь VikNazБудем пробовать.

Добавлено через 32 минуты
Все работает, но вот только пугает хранение пароля в открытом доступе. Этого можно как-то избежать? И это наверно и есть доверительный доступ как у вас?
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
21.06.2015, 15:16
Ну тут либо вы автоматизируете процесс и тогда пароль, логин являются частью процесса и естественно где-то должны хранится. Будете вы его хранить в открытом виде, в зашифрованном или вообще на внешнем usb при любом раскладе вы контроль делегируете системе на которой эта автоматизация запускается.
0
0 / 0 / 0
Регистрация: 30.05.2015
Сообщений: 10
21.06.2015, 15:18  [ТС]
Я к тому, что может имя и пароль, явно указанные в vbs можно как-то загнать в переменную, а саму переменную под замок или что-то вроде того? Каким шифрованием можно воспользоваться в данной cbnefwbb&
0
9 / 9 / 2
Регистрация: 11.06.2015
Сообщений: 18
21.06.2015, 20:15
Ну - у меня-то таких проблем не возникает, скрипт - на сервере, пароля в нем нет, не нужен, раз вошли в Windows - SQL-сервер нам доверяет. А как-то зашифровать пароль, если удаленно... Наверное, по-любому ломается, как и все программы, если есть доступ к этому компьютеру. Ну - взял скрипт пароль где-то из файла, расшифровал - а тут мы его СТОП ! и прочитали... Тогда как-то скрипт прятать другими средствами, или хотя-бы написать не на vbs а, к примеру, на Delphi. Как-никак .exe. Таки хакер нужен.
Защита... Тут я не смог защитить наиважнейшее. Когда с моей фирмы уходили некоторые - "слямзили" базу клиентов в 2000 человек - и ч-з пару дней начался их перехват. Вот потеха была... А как защитить? Для текущей работы иногда надо их распечатывать, ну - отменю печать, как-то заглушу Print Screen, флешки, отключу интернет (почта есть у всех). Так с помощью камеры телефона прямо с экрана где-то ночью (работа круглосуточная) за минуты все снимается. Вот и вся защита.
0
0 / 0 / 0
Регистрация: 30.05.2015
Сообщений: 10
21.06.2015, 20:20  [ТС]
VikNaz, осталось пару вопросов к вам:
1) Как сделать доверительное соединение и в чем его +/-?
2) Если SQL Server у меня на хостинге, а Management Studio на моей машине, то я могу как-то запрограммировать сервер(запрограммировать на запуск процедуры по расписанию) без необходимости работы, а значит и зависимости от,планировщика заданий на моей машине?
0
9 / 9 / 2
Регистрация: 11.06.2015
Сообщений: 18
21.06.2015, 20:31
На центральной машине доверительное соединение у меня получается автоматом после установки SQL-сервера, на удаленной - точно не знаю, что-то типа нужно создать такого же юзера, как-то приравнять там, нужно мне самому читать в интернете, увы. И считается более надежным ! Раз вошли в Windows - значит, право имеем. Во как.
Сам SQL-сервер на фирме, полностью мне доступен. Никаких проблем. Подошел (или Radmin, ситуацию не усложняю), настроил и все дела.
0
0 / 0 / 0
Регистрация: 30.05.2015
Сообщений: 10
21.06.2015, 20:45  [ТС]
Спасибо большое за ответы!
0
9 / 9 / 2
Регистрация: 11.06.2015
Сообщений: 18
21.06.2015, 21:12
А что если... обойтись без всего !
Вот, я попробовал:
T-SQL
1
2
3
4
5
6
7
8
9
10
CREATE PROCEDURE [dbo].[TEST]
AS
BEGIN
    SET NOCOUNT ON;
    WHILE 1 = 1
        BEGIN
            WAITFOR DELAY '00:01'
            UPDATE Константы SET Точек = Точек + 1
        END
END
И... процедура отрабатывает каждую минуту (зациклил как сумел).
Кроме того, есть еще WAITFOR TIME а также возможность автоматического запуска процедуры при включении сервера,
что-то там типа (по Биллу Гейтсу), чтоб сделать ее автозапускаемой:
T-SQL
1
2
3
EXEC sp_procoption @ProcName = '<procedure name>' 
    , @OptionName = ] 'startup' 
    , @OptionValue = 'on';
Не пробовал. Ну - обмозговать, покрутить... и чисто своими средствами, и никаких проблем !
0
0 / 0 / 0
Регистрация: 30.05.2015
Сообщений: 10
21.06.2015, 21:26  [ТС]
Я думал об этом, просто не знаю насколько хорошо использовать такие бесконечные циклы...хотя отличий от планировщика особо не видно.

Добавлено через 12 минут
Насколько безопасны подобные циклы и могут ли они вызвать взаимоблокировку или как-то нежелательно нагрузить сервер?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.06.2015, 21:26
Помогаю со студенческими работами здесь

Настройка планировщика заданий
Помогите, пожалуйста, настроить планировщик задач, чтобы он в заданное время сжимал базу данных Access и копировал ее по сети на другой...

Права планировщика заданий
Доброго времени суток. У меня возникла следующая проблема - я написал приложение, которое открывает файл на чтение и открывает другой...

Как в Windows XP выполнить вызов окна "Добавить задание" Планировщика заданий из окна "Выполнить"?
Необходимо вызвать окно &quot;Мастер планирования заданий&quot;, которое вызывается через &quot;Добавить задание&quot; в планировщике. Вложил скрин. ...

Остановка запуска задач из Планировщика заданий
Нужен был скрипт для запуска службы и 2х задач из планировщика. Я быстренько набросал батничек, но выясняется что нужна проверка на то что...

БП 3.0 ошибка доступа к файлу планировщика регламентных заданий
Добрый день! Платформа 8.3.12.1685 БП 3.0 (3.0.65.91). Файловая база на Windows Server 2016. При работе в программе выходит ошибка доступа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru