Acerca de admin

Tras más de 20 años trabajando con tecnologías Oracle, me decidí a recopilar en un Blog algunas de las cosillas útiles para el día a día.

impdp/expdp en 19c sin password

Uno de los problemas que podemos encontrarnos en la 19c es que cuando intentamos ejecutar un expdp en modo comando en el que tenemos seteado el usuario y la contraseña (o ocmo sysdba0 , el exdp quea detenido preguntando por el password.

Aunque pueda pareceerlo, esto no es una nueva funcionalidad de seguridad de la 19c, sino que esta provocado por un bug no publicado (bug 28707931 ) que afecta a la 19c

Desgraciadamente , las soluciones que nos da oracle no son nada del otro mundo

  • Acutualiza a 20.1 cuando este disponible
  • Aplica el parche Patch: 28707931 si puedes
  • Pulsa ua tecla para pasar la fase de passowd

Como siempre, mas informacion en soporte Oracle

  • Data Pump Prompts For A Password Even Though Using External Authentication (Doc ID 2556152.1)
  • Espacios y tabulaciones en Ansible

    Hoy vamos a empezar con una pequeña entrada referente a la automatización con Ansible

    Como sabemos, Ansible a diferencia de los lenguajes de programación clásicos basa los bloques de código en las sangrías ( creo que sangría es en nuestro caso la traducción mas correcta del ingles >i>Identation)

    Llegados a este punto, los programadores de toda la vida, aquellos que siempre hemos programado en la ventana de terminal, gente precisa y que optimiza el código, usamos tabulaciones, pero , hemos de tener cuidado, ya que Ansible no nos lo permite.

    Esto nos lleva a el siguiente video

    A parte de bromas, para todos aquellos que estamos acostumbrados a las tabulaciones, hay un pequeño truco para indicarle al vim que traslade las tabulaciones a espacios

    [code lang=plain]
    autocmd FileType yaml set local ai ts=2 sw=2 et
    [code]

    Con este sencillo comando podremos seguir usando nuestras tabulaciones mientras programamos en Ansible

    en casa de herrero …..

    Como dice el dicho, en casa de herrero cuchillo de palo
    Debido a una confusión con las cuentas de AWS hemos perdido todos los contenidos ( y backups ) de los últimos 6 meses, teniendo que recuperar una copia en local de agosto.

    Intentaremos reproducir los contenidos que hemos creado estos últimos 6 meses, pero llevara su tiempo 🙁

    Creación de Discos y ASM con Ansible

    Siguiendo con las entradas de Aprovisionamiento de una base de datos con ansible vamos a ver la manera de automatizar la configuracion de discos de ASM mediante ansible.

    Supongamos tenemos los prerrequisitos:

    • Un servidor OEL7 con el CRS instalado y el listener en marcha tal y como explicabamos en Instalando el grid infraesturcure con Ansible
      • Dos discos para nuestro diskgroup DATA
      • un disco para nuestro diskgroup FRA
      • un disco para nuestro diskgroup REDO1
      • un disco para nuestro diskgroup REDO2

          Para la ejecucion de nuestro taller de creacion de asm usaremos los siguientes ficheros del repositorio

          Raiz
          |
          |- vars:
               |- oracle_standard.yaml      Fichero con los estandares del departamento
          |
          |- templates
          |
           |- files
           |-REQ01_asm_create_disks.yaml  Ejemplo de informacon de  provisionamiento de discos para el ASM 
          |  
          | asmlib_configure.yaml         Playbook que configura el asmlib
          | asmlib_create_disks.yaml      Playbook que configura los discos de ASM 
          | asm_create.yaml               Playbook que crea una instancia +ASM con en el GRID y con los discos previamente instalados
          

          Ficheros de variables

          Al igual que en el resto de ejecuciones del taller vamos a necesitar el fichero oracle_standard.yaml que contiene todas la estandarizacion de nuestro departamento

          Ficheros informacion

          La creacion de discos necesita de la informacion de que discos del sistema operativo van a ir dedicados a que diskgroup, esta informacion la depositaremos en el directorio files, que va a ser el unico directorio donde deberemos/podremos modificar los ficheros .

          El formato del fichero sera el de una lista en yaml en el que indicaremos el nombre del dispositivo para cada uno de los diskgroups.
          [code lang=»py»]
          DATA:
          – /dev/sda
          – /dev/sdb
          FRA:
          – /dev/sdc
          REDO1:
          – /dev/sdd
          REDO2:
          – /dev/sde
          [/code]

          El nomre del fichero sera [REQ]_asm_create_disks. Donde REQ es el valor en mayusculas de la variable req que es el identificador unico de nuestro fichero, este identificador en un entorno de produccion real podria corresponderse con el numero de peticion del sistema gestion de la compañia.

          Creacion de los discos

          Una vez tenemos claros los ficheros de fuentes y variables ejecutaremos nuestros playbooks.

          asmlib_configure.yaml

          El playbook asmlib_configure.yaml vieje a ser el equialente a la ejecucion manual de oracleasm configure -i
          Como podeis ver en el codigo que es bastante basico, ejecuta la configuracion del oracleasm para cada uno de los campos obteniendo la informacion del fichero de variables generico

          [code lang=»py»]
          # Pamplona 2019
          # Playbook which configures_asmlib
          #
          # requires
          # env: name of the server which should be in the inventory
          # vars/oracle_standard.yaml configuration file with all the deppartment values

          – hosts: "{{env}}"
          remote_user: ansible
          become: yes
          become_user: root
          tasks:
          – fail: msg="Error no server definied, please define the env variable in the job"
          when: env is not defined

          – name: "Including standard variables"
          include_vars:
          file: "vars/oracle_standard.yaml"
          – name: configirando usuario
          command: /usr/sbin/oracleasm configure -u "{{oracle_user}}"

          – name: configurando grupo
          command: /usr/sbin/oracleasm configure -g "{{oracle_group}}"

          – name: seteamos al arranque
          command: /usr/sbin/oracleasm configure -e

          – name: activamos el logical block
          command: /usr/sbin/oracleasm configure -b

          – name: arrancamos
          command: /usr/sbin/oracleasm init

          – name: estado
          command: /usr/sbin/oracleasm status
          register: oasm_status

          [/code]

          asmlib_create_disks.yaml

          El segundo paso es la creacion de los discos en el asmlib .
          Este es el playbook que va a requerir de ese fichero externo [REQ]_asm_create_disks, para cada uno de los discos fisios incluidos.

          [code lang=»py»]
          # Pamplona 2019
          # Playbook which checks if the hosts has all the requested prerequisites
          #
          # requires
          # env: name of the server which should be in the inventory
          # REQ: number of request
          # vars/oracle_standard.yaml configuration file with all the department values

          – hosts: "{{env}}"
          remote_user: ansible
          become: yes
          become_user: root
          tasks:
          – fail: msg="Error no server definied, please define the env variable or de request number in the job"
          when: env is not defined or req is not defined

          – name: "Including standard variables"
          include_vars:
          file: "vars/oracle_standard.yaml"

          – name: "Including So {{version}} requisites"
          include_vars:
          file: "files/{{req|upper}}_asm_create_disks.yaml"

          – name: creating DATA disks
          shell:
          cmd: "/usr/sbin/asmtool -C -l /dev/oracleasm -n {{oracle_hostname|upper}}_DATA0{{ansible_loop.index}} -s {{item}} -a force=yes "
          loop: "{{DATA}}"
          loop_control:
          extended: yes

          – name: Creating FRA disks
          shell:
          cmd: "/usr/sbin/asmtool -C -l /dev/oracleasm -n {{oracle_hostname|upper}}_FRA0{{ansible_loop.index}} -s {{item}} -a force=yes "
          loop: "{{FRA}}"
          loop_control:
          extended: yes

          – name: Creating REDO1 disks
          shell:
          cmd: "/usr/sbin/asmtool -C -l /dev/oracleasm -n {{oracle_hostname|upper}}_REDO1_{{ansible_loop.index}} -s {{item}} -a force=yes "
          loop: "{{REDO1}}"
          loop_control:
          extended: yes

          – name: Creating REDO2 disks
          shell:
          cmd: "/usr/sbin/asmtool -C -l /dev/oracleasm -n {{oracle_hostname|upper}}_REDO2_{{ansible_loop.index}} -s {{item}} -a force=yes "
          loop: "{{REDO2}}"
          loop_control:
          extended: yes

          – name: scanning disks
          shell:
          cmd: "/usr/sbin/oracleasm scandisks"

          [/code]
          debilidades
          -Como curiosidad podeis ver que en mi taller no sigo las normativa de oracle, llamando a los diskgroups HOSTNAME_DATA en ved de DATA y manteniendo 2 grupos de REDO en ved e uno.
          -Este playbook solamente puede usarse para provisionamiento y no para añadir nuevos discos a un diskgroup ya exsistente ya que numerara los discos empezando desde cero. (uso del fact ansible_loop.index)

          Creacion del asm

          Llegados a este punto, tenemos el grid corriendo, el listener arriba y los dispositivos creados , por lo que solamente nos queda el crear el ASM
          El siguiente playbook simplemente va a llevar a cabo una creacion del ASM en modo command line silent y añadirle los discos a sus respectivos diskgroups

          [code lang=»py»]
          # Pamplona 2020
          # Playbook which creates a database
          #
          # requires
          # env: name of the server which should be in the inventory
          # vars/oracle_standard.yaml standard values for Oracle
          #

          – hosts: "{{env}}"
          vars:
          type: asm
          remote_user: ansible
          tasks:

          # checking prerequisites
          – fail:
          msg: "Error no server defined, please define the env variable in the job"
          when: env is not defined

          # Loading env
          – name: Including Standard_values
          include_vars:
          file: "vars/oracle_standard.yaml"

          – name: checking oratab
          shell:
          cmd: "cat /etc/oratab|grep +ASM |sed -e ‘s/# line added by Agent/ /g’ -e ‘s/:/ /g’|awk ‘{ print $1}’ "
          register: count

          – fail:
          msg: "ERROR: The chain {{item}} exists at {{env}} /etc/oratab file "
          when: item == "+ASM"
          with_items:
          – "{{count.stdout_lines}}"

          – set_fact:
          oracle_home: "{{oracle_home_directory.asm}}"
          when: type == ‘asm’

          – name: Creating syslog file
          copy:
          dest: /etc/rsyslog.d/30-oracle.conf
          content: |
          "local0.info {{oracle_home}}/rdbms/audit/asmaudit.log
          &~"
          force: yes
          become: yes
          become_user: root

          – name: Creating logrotate file
          copy:
          dest: /etc/logrotate.d/30-oracle_logs
          content: |
          "{{oracle_home}}/rdbms/audit/asmaudit.log {
          weekly
          rotate 4
          compress
          copytruncate
          delaycompress
          notifyempty
          }"
          force: yes
          become: yes
          become_user: root

          – name: create ASM
          become: yes
          become_user: "{{oracle_user}}"
          shell:
          cmd: "{{ oracle_home }}/bin/asmca -silent
          -configureASM
          -sysAsmPassword {{sysasm_passd}}
          -asmsnmpPassword {{asmdbsnmp_passwd}}
          -diskString \"/dev/oracleasm/disks/*\"
          -diskGroupName {{oracle_hostname|upper}}_DATA
          -disk \"/dev/oracleasm/disks/{{oracle_hostname|upper}}_DATA*\"
          -param ASM_POWER_LIMIT=1
          -param DIAGNOSTIC_DEST={{oracle_base}}
          -param AUDIT_SYSLOG_LEVEL=’local0.info’
          -param AUDIT_SYS_OPERATIONS=TRUE
          -redundancy EXTERNAL"

          – name: Create FRA, REDO1 and REDO2
          become: yes
          become_user: "{{oracle_user}}"
          shell:
          cmd: "{{ oracle_home }}/bin/asmca -silent
          -createDiskGroup
          -sysAsmPassword {{sysasm_passd}}
          -diskString \"/dev/oracleasm/disks/*\"
          -diskGroupName {{oracle_hostname|upper}}_{{item}}
          -disk \"/dev/oracleasm/disks/{{oracle_hostname|upper}}_{{item}}*\"
          -redundancy EXTERNAL "
          with_items:
          – FRA
          – REDO1
          – REDO2
          [/code]