2016-09-22 2 views
1

Мне нужно войти в систему на удаленном хосте (Linux 2.6.39-400.210.2.el6uek.x86_64) в качестве пользователя oracle и запустить некоторые sql-скрипты с помощью утилиты sqlplus. Ansible config used:Почему ansible start_user oracle не запускает скрипты пользовательских профилей

tasks: 
    - name: Running oracle script 
     shell: "sqlplus/as sysdba @test.sql" 
     become: yes 
     become_method: sudo 
     become_user: oracle 

Но похоже, что/etc/profile и ~/.profile не выполняются после входа в систему. Результат в среде oracle не установлен правильно, и sqlplus не работает. отображается Ошибка:

fatal: [wh1.db]: FAILED! => {"changed": true, "cmd": "sqlplus/as sysdba @test.sql", "delta": "0:00:00.002729", "end": "2016-09-22 10:37:31.033209", "failed": true, "invocation": {"module_args": {"_raw_params": "sqlplus/as sysdba @test.sql", "_uses_shell": true, "chdir": null, "creates": null, "executable": null, "removes": null, "warn": true}, "module_name": "command"}, "rc": 127, "start": "2016-09-22 10:37:31.030480", "stderr": "/bin/sh: sqlplus: command not found", "stdout": "", "stdout_lines": [], "warnings": []} 

Если я войти в поле вручную, как пользователь оракула, SQLPLUS работает отлично. Любые идеи, как это работает? Было рекомендовано настроить переменные enacle env и запускать сценарии профилей вручную, но это выглядит нехорошим обходным путем.

+1

Кроме точки, но, пожалуйста, не подключиться как SYSDBA запускать скрипты. Это очень опасная практика и может серьезно повредить базу данных. Вместо этого используйте обычного пользователя Oracle. – sstan

+1

В целом, я считаю, что настройка параметров среды или вызов сценария вручную может быть лучшим решением. Обычно существует множество экземпляров на хосте, и для них обычно существует несколько домов Oracle, тем более что ASM использует отдельные двоичные файлы. Вы уверены, что можно с уверенностью предположить, что скрипт профиля всегда будет знать, какой экземпляр и путь использовать? (Также вы можете проверить мой проект с открытым исходным кодом [Method5] (https://github.com/VentechCMS/method5) через несколько недель. Цели проекта аналогичны проектам Ansible, но ориентированы на базы данных Oracle вместо того, чтобы работать систем.) –

+0

Благодаря вашей точке. В моем конкретном случае у нас есть только одна база данных на одном виртуальном ящике, так что да, я уверен, что в скрипте профиля будет установлен правильный oracle env. –

ответ

1

Вам необходимо настроить профиль через модуль оболочки. Попробуйте обновить команду своей оболочки следующим образом:

shell: source /home/username/.profile && "sqlplus/as sysdba @test.sql" 

Профиль прекращен, как только задача запущена, я считаю.

Вы также можете попробовать запустить sudo через shell, как это;

shell: sudo -iu oracle "sqlplus/as sysdba @test.sql" 

За страницу Судо человек:

Run the shell specified by the target user's password database entry as a login shell. 
This means that login-specific resource files such as .profile or .login will be read by the shell. 
+0

1st way works, но для этого требуется, чтобы некоторые env vars были объявлены как: ORACLE_BASE, ORACLE_HOME, ORACLE_SID, что не очень хорошо. Я бы предпочел, чтобы ifsible мог делать sudo так же, как «sudo -iu oracle», автоматически запуская всю инициализацию оракула ... 2-й путь не работает. не удалось с несколькими ошибками и советом использовать ключевые слова «стать» и «стать_методом». знак равно –

Смежные вопросы