С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/16: Рейтинг темы: голосов - 16, средняя оценка - 4.75
МИР ВАШЕМУ ДОМУ!!!
57 / 58 / 7
Регистрация: 01.04.2009
Сообщений: 890
Записей в блоге: 1

Снять дамп, используя стандартное средство оракла - EXP

19.02.2012, 16:47. Показов 3278. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте друзья.

Хочу снять дамп используя стандартное средство оракла - EXP.

C#
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Globalization;
 
namespace exportDumpOracle
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Снятие дампа.");
            int result;
            try
            {
                string arguments = string.Format(CultureInfo.CurrentCulture, "user/passw@u07 FILE=C:\\ur07.dmp");
                result = LaunchCommand("EXP.exe", arguments);
            }
            catch (Exception exc)
            {
                Console.WriteLine("Произошла ошибка снятия дампа: " + exc.Message);
                Console.ReadKey();
            }
            finally {  }
        }
 
        private static int LaunchCommand(string fileName, string arguments)
        {
            using (Process process = new Process())
            {
                process.StartInfo.FileName = fileName;
                process.StartInfo.Arguments = arguments;
                process.StartInfo.UseShellExecute = false; //Возвращает или задает значение, позволяющее определить, нужно ли использовать оболочку операционной системы для запуска процесса.
                process.StartInfo.CreateNoWindow = true; //Возвращает или задает значение, позволяющее определить, нужно ли запускать процесс в новом окне.
                process.StartInfo.RedirectStandardOutput = true;
                process.StartInfo.RedirectStandardError = true;
                process.OutputDataReceived += delegate(object sender, DataReceivedEventArgs e)
                {
                    Trace.WriteLine(e.Data, "PROCESS");
                };
                process.ErrorDataReceived += delegate(object sender, DataReceivedEventArgs e)
                {
                    Trace.WriteLine(e.Data, "PROCESS");
                };
 
                process.Start();
                process.BeginOutputReadLine();
                process.BeginErrorReadLine();
                process.WaitForExit();
 
                if (process.ExitCode != 0 && process.ExitCode != 3)
                {
                    throw new ApplicationException(string.Format(
                        CultureInfo.CurrentCulture,"rrrrr",
                        process.StartInfo.FileName,
                        process.ExitCode));
                }
 
                return process.ExitCode;
            }
        }
    }
}
При неверном пароле стоит на WaitForExit ожидая завершения процесса снятия дампа но оно не завершится т.к пароль неверен, при закрытии проги в процессах остается запущенный EXP.exe,
при неверном SID базы такого не происходит ОТЛАДЧИК ПРОХОДИТ ЧЕРЕЗ WaitForExit. Я ЗАМЕТИЛ ЧТО EXP.exe в диспетчере появляется и потом проподает. В отладчике также заметил ошибку выдоваемую в обоих случаях ExitTime = "process.ExitTime" запустило исключение типа "System.InvalidOperationException" - примерно такого содержания ошибка.

Как мне обработать эти ошибки грамотно?
Как добавить еще пользователей для снятия дамп для них?
Что посоветуете друзья, что добавить, что убавить?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.02.2012, 16:47
Ответы с готовыми решениями:

DDS текстуры и стандартное средство просмотра
Приветствую! Перешёл вот с Windows 8.1 на Windows 10 и столкнулся с проблемой не стандартного характера. Дело в том что в восьмёрке...

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

Acronis True Image Home vs Стандартное средство архивации в Windows 7
Доброго времени суток, уважаемые форумчане. Имеется один винт на 1 TB, на нем 300 GB ценной информации (фотографии, видео, проекты)....

11
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
20.02.2012, 08:17
Цитата Сообщение от A_R_S Посмотреть сообщение
Как мне обработать эти ошибки грамотно?
Ловить ошибки, которые выдает exp на выход.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private static Regex oraError = new Regex(@"^(ORA-\d{5})");
//
                process.ErrorDataReceived += delegate(object sender, DataReceivedEventArgs e)
                {
                    Trace.WriteLine(e.Data, "PROCESS");
 
                    Match m = oraError.Match(e.Data);
                    if (m.Success)
                    {
                        switch (m.Groups[1].Value)
                        {
                            case "ORA-28000":
                                Console.WriteLine("пользователь заблокирован");
                                break;
                            case "ORA-01017":
                                Console.WriteLine("Неверный логин/пароль");
                                break;
                        }
                        process.Kill(); //убиваем если еще жив
                        Console.WriteLine("After kill");
                    }
                };
Цитата Сообщение от A_R_S Посмотреть сообщение
Как добавить еще пользователей для снятия дамп для них?
Вот про это не понял. Возможно стОит почитать параметры exp
Code
1
exp help=y
1
МИР ВАШЕМУ ДОМУ!!!
57 / 58 / 7
Регистрация: 01.04.2009
Сообщений: 890
Записей в блоге: 1
20.02.2012, 09:11  [ТС]
Спасибо вам за ответ.

Ниже прикрепил исходник проекта (с него то я и взял часть кода экспорта). Он правда на французском.
В общем для чего я это все задумал (имею в виду писать такого рода программу).
На отделениях проводится ежедневное снятие дампа, снимается дамп таким образом:
Assembler
1
exp userName/chemaPassw@U17 file=D:\BACKUP\U17.DAG\DUMP\ur17.dmp
В файле батнике все это дело (export.bat к примеру) и ставим в задание виндовса на определенное время.
Как видите пароль легко можно просмотреть, открыв элементарно текстовый редактором.
Как быть в таком случае может посоветуете друзья?
Была идея делать пакетом DBMS_JOB (задания оракла типа как на виндовсе) но мне посоветовали не пользоваться эти сказав,
что джоб это сессия и исходя из этого лучше не пользоваться. Пользуйся отдельной прогой (exp.exe).
Вот я и решил поискать, написать что то отдельное
(в данном случае это консольное приложение яв-ся "оберткой" программы снятия дампа EXP.exe).

Хотелось бы услышать вашe мнения друзья по данной теме, может стоит сделать по иному?
Оракл стоит 9i.
Вложения
Тип файла: zip csharpfr_ORACLE-IMPORT-EXPORT___Page.zip (119.3 Кб, 15 просмотров)
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
20.02.2012, 09:29
Я так и не понял смысла в обертке.
Если у злоумышленника есть доступ к bat-нику, то почему не будет к проге с паролем?
Может стоит завести отдельного пользователя для снятия дампа, и запретить доступ к папке с bat-ником средствами ОС.
1
МИР ВАШЕМУ ДОМУ!!!
57 / 58 / 7
Регистрация: 01.04.2009
Сообщений: 890
Записей в блоге: 1
20.02.2012, 09:36  [ТС]
Цитата Сообщение от turbanoff Посмотреть сообщение
Если у злоумышленника есть доступ к bat-нику, то почему не будет к проге с паролем?
ДЛЯ того чтоб посмотреть в проге ее надо для начало просмотреть дизасемблером. Его надо еще установить на комп а такого в отделениях наверняка делать не будут.

Добавлено через 56 секунд
Цитата Сообщение от turbanoff Посмотреть сообщение
Может стоит завести отдельного пользователя для снятия дампа,
этот пользователь будет в винде или в базе?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
20.02.2012, 09:39
Цитата Сообщение от A_R_S Посмотреть сообщение
этот пользователь будет в винде или в базе?
В винде. Дать ему права на папку, а всем остальным запретить её чтение
1
МИР ВАШЕМУ ДОМУ!!!
57 / 58 / 7
Регистрация: 01.04.2009
Сообщений: 890
Записей в блоге: 1
20.02.2012, 15:09  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
       Console.WriteLine("Снятие дампа.");
            int result;
            try
            {
                string arguments = string.Format(CultureInfo.CurrentCulture, "user/passw@u07 FILE=C:\\ur07.dmp");
                result = LaunchCommand("EXP.exe", arguments);
 
         string arguments2 = string.Format(CultureInfo.CurrentCulture, "user1/passw@u08 FILE=D:\\ur08.dmp");
                result2 = LaunchCommand("EXP.exe", arguments2);
            }
            catch (Exception exc)
            {
                Console.WriteLine("Произошла ошибка снятия дампа: " + exc.Message);
                Console.ReadKey();
            }
            finally {  }
Возможно такое для нескольких схем?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
20.02.2012, 15:12
Цитата Сообщение от A_R_S Посмотреть сообщение
Возможно такое для нескольких схем?
разумеется возможно, почему нет?
1
МИР ВАШЕМУ ДОМУ!!!
57 / 58 / 7
Регистрация: 01.04.2009
Сообщений: 890
Записей в блоге: 1
20.02.2012, 15:43  [ТС]
Цитата Сообщение от turbanoff Посмотреть сообщение
разумеется возможно, почему нет?
К сожалению нет (!

Попробовал сделать так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
            int result;
 
            string[] libBase = new string[] { "user/q@u03 FILE=C:\\ur03.dmp", "user/q@u17 FILE=C:\\ur17.dmp" };
 
            try
            {
                foreach (string str in libBase)
                {
                    string arguments = string.Format(CultureInfo.CurrentCulture, str);
                    result =  LaunchCommand("EXP.exe", arguments); 
                }           
            }
сняв дамп 03 ругается на второй так:
Assembler
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
Unhandled Exception: System.ArgumentNullException: Value cannot be null.
Parameter name: input
   at System.Text.RegularExpressions.Regex.Match(String input)
   at exportDumpOracle.Program.<>c__DisplayClass4.<LaunchCommand>b__1(Object sen
der, DataReceivedEventArgs e)
   at System.Diagnostics.Process.ErrorReadNotifyUser(String data)
   at System.Diagnostics.AsyncStreamReader.FlushMessageQueue()
   at System.Diagnostics.AsyncStreamReader.ReadBuffer(IAsyncResult ar)
   at System.Runtime.Remoting.Messaging.AsyncResult.SyncProcessMessage(IMessage
msg)
   at System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(IMe
ssage msg, IMessageSink replySink)
   at System.Runtime.Remoting.Proxies.AgileAsyncWorkerItem.DoAsyncCall()
   at System.Runtime.Remoting.Proxies.AgileAsyncWorkerItem.ThreadPoolCallBack(Ob
ject o)
   at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object sta
te)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, C
ontextCallback callback, Object state, Boolean ignoreSyncCtx)
   at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWor
kItem.ExecuteWorkItem()
   at System.Threading.ThreadPoolWorkQueue.Dispatch()
   at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
Произошла непредвиденная ошибка: Ошибка при снятии дампа
Нажмите любую кнопку на клавиатуры для завершения приложения...
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
20.02.2012, 15:51
Ну так вы читайте что в ошибке написано. В Match нельзя передавать аргументом null
вот и добавьте проверку на null
C#
1
2
3
4
5
6
7
8
                 if (e.Data !=null)
                 {
                    Match m = oraError.Match(e.Data);
                    if (m.Success)
                    {
                       //...
                    }
                 }
1
МИР ВАШЕМУ ДОМУ!!!
57 / 58 / 7
Регистрация: 01.04.2009
Сообщений: 890
Записей в блоге: 1
20.02.2012, 17:32  [ТС]
Обработать то я обработаю, но мне непонятно почему null. Первый нормально снимает а второй null?

Сделал как вы мне сказали.
НУ ни как не хочет она переходить на второе снятие дампа!?

Вы представляете, я просто поменял местами 17 (поставил первым) и 03, дампы вроде оба снялись правильно. Но в конце попал в блок:

C#
1
2
3
4
5
6
7
 if (process.ExitCode != 0 && process.ExitCode != 3)
                {
                    throw new ApplicationException(string.Format(
                        CultureInfo.CurrentCulture,"Ошибка при снятии дампа",
                        process.StartInfo.FileName,
                        process.ExitCode));
                }
0
МИР ВАШЕМУ ДОМУ!!!
57 / 58 / 7
Регистрация: 01.04.2009
Сообщений: 890
Записей в блоге: 1
21.02.2012, 09:41  [ТС]
Здравствуйте, вот сделал вариант такой.

Правда там еще надо добавить архивирование дампа после завершения его снятия.
Спасибо вам turbanoff за помощь.
Вложения
Тип файла: rar exportDumpOracle.rar (30.0 Кб, 9 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.02.2012, 09:41
Помогаю со студенческими работами здесь

В window 7 есть стандартное средство чтоб через аналоговый модем звонить?
В window 7 есть стандартное средство чтоб через аналоговый модем звонить на обычный телефон (тот который проводной)

Как стандартное средство для "просмотра фотографий Windows" определяет путь к изображению при открытии программы?
Как стандартное средство для &quot;просмотра фотографий Windows&quot; определяет путь к изображению при открытии программы?

Снять дамп с портов
Добрый день . Интересует такой вопрос. Как снять дамп портов на оборудовании Huawei?

Ввести exp(2), exp(3) , exp(1). pi^2 c консоли
Требуется ввести экспоненту и число пи в степенях с клавиатуры.

Вычислить, не используя стандартные функции LN(x) и EXP(x) 2^n, n - натуральное число;
Вычислить, не используя стандартные функции LN(x) и EXP(x) 2^n, n - натуральное число;


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru