Команда chmod в каталоге data pump не работает второй раз с использованием кода Java, развернутого на сервере Oracle.

1

Я пытаюсь создать dmp файл таблицы A_LOCKER, используя команду expdp cmd, а затем перевести его обратно на локальный компьютер, на котором разворачивается мой Java-код. Сервер - сервер веб-журнала oracle. Код работает нормально в первый раз, но со второго раза он дает ошибку как: Permission denied

Файл dmp создается в каталоге насоса данных Extract, который создается мной.

Теперь я пытаюсь sftp dmp файл, и для этого мне нужно предоставить разрешение sudo для файла, поэтому я пробовал следовать в своем java-коде: 1) Создать сеанс:

    StringBuffer cmd = new StringBuffer();        

    FileOutputStream fileOutputStream = null;

    SshClient ssh = new SshClient();
    SessionChannelClient session = null;
    SftpClient sftp = null;


    HostKeyVerification host = new IgnoreHostKeyVerification();

    // Try to connect to the machine that includes the shared folder
    // Throw an exception when a connection is failed.
    try {
        ssh.connect(machine, host);
    } catch (IOException e) {


        logger.error("Cannot connect to dbserver in machine "
                        + machine,e);
        throw new EPCShareFileException(
                "Cannot connect to dbserver location in machine "
                        + machine, e);
    }


    PasswordAuthenticationClient auth = new PasswordAuthenticationClient();
    auth.setUsername(user);
    auth.setPassword(password);
    // Authenticate user name and password for connection
    // Throw an exception if authentication is failed

    try {
        ssh.authenticate(auth);
    } catch (IOException e) {
        logger.error("Cannot authenticate user "
                + user + " " + " password " + password);
        ssh.disconnect();

        throw new EPCShareFileException("Cannot authenticate user "
                + user + " " + " password " + password, e);
    }

2) Выполнение команды chmod с использованием псевдо разрешения

                  cmd.append("/usr/local/bin/sudo /bin/chmod -R 777 ")
                     .append(location+dbDumpFileName);
                   try{
        session = ssh.openSessionChannel();
        session.executeCommand(cmd.toString());

    } catch (IOException e){
        logger.error("Cannot execute chmod cmd");
    } 
    finally{
        try {
            session.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            logger.info("Cannot close the session:"+e.getMessage());
        }

    }

3) Затем я пытаюсь sftp dmp файл на локальный сервер

                   try {
        sftp = ssh.openSftpClient();
        } catch (IOException e) {
        logger.error("Cannot open connection to database server");
        ssh.disconnect();
        throw new EPCShareFileException(
                "Cannot open connection to database server");

    }

    try{
        fileOutputStream = new FileOutputStream(dbDumpFileName);

        sftp.get(location+dbDumpFileName, fileOutputStream);
    }catch (IOException e) {
        **throw new EPCShareFileException("Cannot retrive file "
                +"Error:"+e.getMessage());**
    }finally{
        try {
            fileOutputStream.close();
            sftp.quit();
            fileOutputStream = null;
            sftp = null;

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        ssh.disconnect();
        ssh = null;
    }

В первый раз, когда я развертываю свой код в качестве ушного файла на сервере oracle weblogic, он работает с файлом и создается файл dmp, а также удаляется в нужное место. Но со второго раза я получаю ошибку: Ошибка: разрешение отклонено

Пожалуйста помоги..

  • 0
    Ошибка permission denied в permission denied при попытке прочитать файл на сервере Oracle или записать его на локальный компьютер? Какие разрешения имеет локальный файл после первого get ? (Если, конечно, вы не удалите его перед второй попыткой ...)
  • 0
    .exception.ShareFileException: невозможно извлечь файл Extract20140408174212.dmp из / userhome / home / user / myuser / Extract / Error: разрешение отклонено java.io.IOException: разрешение отклонено Ошибка в следующем коде: try {fileOutputStream = new FileOutputStream (dbDumpFileName ); sftp.get (location + dbDumpFileName, fileOutputStream); } catch (IOException e) {throw new EPCShareFileException («Невозможно извлечь файл» + dbDumpFileName + «from» + location + «Ошибка:» + e.getMessage () + e.toString ()); } Я проверил созданный файл dmp на сервере unix, и у него есть разрешение rwx
Показать ещё 2 комментария
Теги:

1 ответ

0

Прежде всего, никогда не используйте chmod -R 777 - это, как публикация ваших данных для всех, у кого есть доступ к машине, никаких вопросов не задано. Если вы использовали это для отладки проблемы, тогда все в порядке, но не забудьте изменить его обратно (или избавиться от него, вам это совсем не нужно).

Чтобы отладить ошибки "Разрешения на отказ", вам необходимо иметь доступ к машине. На машине вам необходимо войти в систему как пользователь, получивший ошибку (не пытайтесь использовать root или другого пользователя).

Как этот пользователь, попробуйте получить доступ к каждой папке на пути, к которому вы не можете получить доступ. Поэтому, если это не удалось для /srv/www/foo/bar/x/y/z/file.txt, тогда вам нужно

ls /srv
ls /srv/www/
ls /srv/www/foo/
ls /srv/www/foo/bar/
ls /srv/www/foo/bar/x/
ls /srv/www/foo/bar/x/y/
ls /srv/www/foo/bar/x/y/z/
ls /srv/www/foo/bar/x/y/z/file.txt

Сделайте это в этом порядке. Найдите первую неудачную команду и проверьте, почему у этого пользователя нет разрешений для данной папки.

  • 1
    chmod 777 хуже, чем просто «публиковать» данные для всех (то есть позволяет им читать их) - каждый пользователь также может изменить или удалить их.
  • 0
    Я пытаюсь это для отладки только путем выполнения вышеуказанных команд, я могу получить доступ ко всем каталогам до места расположения моего файла
Показать ещё 15 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню