jueves, 20 de febrero de 2020
CONTROL MANAGEMENT PACK
alter system set control_management_pack_access='DIAGNOSTIC+TUNING' scope=both;
RESTORE DATABASE NOARCHIVELOG
Recovering a Database in NOARCHIVELOG Mode Using Incremental Backups
You can perform limited recovery of changes to a database running inNOARCHIVELOG mode by applying incremental backups. Note that the incremental backups must be consistent, like all backups of a database run in NOARCHIVELOG mode, so you cannot make backups of the database when it is open.Assume the following scenario:
- You run database
trgtinNOARCHIVELOGmode. - You use a recovery catalog.
- You shut down the database consistently and make a level 0 backup of database
trgtto tape on Sunday afternoon. - You shut down the database consistently and make a level 1 differential incremental backup to tape at 3:00 a.m. on Wednesday and Friday.
- The database has a media failure on Saturday, destroying half of the datafiles as well as the online redo logs.
Because the online redo logs are lost, you must specify the
NOREDO option in the RECOVER command.You must also specify
NOREDO if the online logs are available but the redo cannot be applied to the incrementals.If you do not specify
NOREDO, then RMAN searches for redo logs after applying the Friday incremental backup, and issues an error message when it does not find them.After connecting to
trgt and the catalog database, recover the database with the following command:
STARTUP FORCE MOUNT;
RESTORE CONTROLFILE; # restore control file from consistent backup
ALTER DATABASE MOUNT;
RESTORE DATABASE; # restore datafiles from consistent backup
RECOVER DATABASE NOREDO; # specify NOREDO because online redo logs are lost
ALTER DATABASE OPEN RESETLOGS;
BACKUP NOARCHIVELOG
Backing Up in NOARCHIVELOG Mode: Example
This script puts the database into the correct mode for a consistent, whole database backup and then backs up the database. The script performs a shutdown, startup, shutdown, and then startup again before creating multiple copies of the backup:# Shut down database cleanly with immediate option. This type of shutdown lets
# current calls to the database complete, but prevents further logons or calls.
# If the database is not up, you receive a message saying so but RMAN will not
# treat this situation as an error.
SHUTDOWN IMMEDIATE;
# Start up the database in case it suffered instance failure or was
# closed with SHUTDOWN ABORT before starting this script.
# The script performs instance recovery if
# needed. Oracle uses the default init.ora file. Alternatively, use this form:
# STARTUP FORCE DBA pfile=filename.
# Use the DBA option because you are going to shut down again
# and do not want to let users in during the short interval. Use the FORCE
# option because it cannot hurt and might help in certain situations.
STARTUP FORCE DBA;
SHUTDOWN IMMEDIATE;
# The database is cleanly closed and ready for a consistent backup. RMAN
# requires that the database be started and mounted to perform a backup.
RMAN> STARTUP MOUNT;
# this example uses automatic channels to make the backup
BACKUP
COPIES 2
INCREMENTAL LEVEL 0
MAXSETSIZE 10M
DATABASE
INCLUDE CURRENT CONTROLFILE
TAG 'BACKUP_1'
;
# Now that the backup is complete, open the database.
ALTER DATABASE OPEN;
BACKUP OFFLINE CATALOGO
Keeping a Long-Term Backup: Example
If you configure a retention policy, then you may want to exclude specified backups from this policy. For example, you may want to archive a consistent backup of the database once a year to serve as a historical record. This long-term backups does not function as a backup that you may perform recovery on, but an archived snapshot of data at a particular time.To exempt a backup from the retention policy, specify the
KEEP option on the BACKUP command. You can also specify LOGS or NOLOGS to indicate whether RMAN should save archived logs for possible recovery of this backup. If you specify NOLOGS, then the backup must be consistent.This example keeps the backup of the database indefinitely and does not save archived logs needed to recover it:
RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUP MOUNT; # put database in consistent state
RMAN> BACKUP DATABASE KEEP FOREVER NOLOGS
TAG 'db_archive_1'; # make long-term consistent backup
# mark backup as unavailable in the repository so that RMAN does not attempt to
# restore it unless explicitly specified on the RESTORE command
RMAN> CHANGE BACKUP TAG 'db_archive_1' UNAVAILABLE;
RMAN> SQL 'ALTER DATABASE OPEN';
BACKUP DATABASE SKIP
SQL> alter tablespace example read only;
Tablespace altered.
SQL> alter tablespace example read write;
RMAN> BACKUP DATABASE SKIP READONLY SKIP OFFLINE;
DOMINGO
RMAN> BACKUP DATABASE;
BACKUP RMAN OFFLINE CATALOGO
Keeping a Long-Term Backup: Example
If you configure a retention policy, then you may want to exclude specified backups from this policy. For example, you may want to archive a consistent backup of the database once a year to serve as a historical record. This long-term backups does not function as a backup that you may perform recovery on, but an archived snapshot of data at a particular time.To exempt a backup from the retention policy, specify the
KEEP option on the BACKUP command. You can also specify LOGS or NOLOGS to indicate whether RMAN should save archived logs for possible recovery of this backup. If you specify NOLOGS, then the backup must be consistent.This example keeps the backup of the database indefinitely and does not save archived logs needed to recover it:
RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUP MOUNT; # put database in consistent state
RMAN> BACKUP DATABASE KEEP FOREVER NOLOGS
TAG 'db_archive_1'; # make long-term consistent backup
# mark backup as unavailable in the repository so that RMAN does not attempt to
# restore it unless explicitly specified on the RESTORE command
RMAN> CHANGE BACKUP TAG 'db_archive_1' UNAVAILABLE;
RMAN> SQL 'ALTER DATABASE OPEN';
martes, 18 de febrero de 2020
IDEO PROTOTHINKING
Ideo ayuda a que las organizaciones de negocios, gobierno y educación crezcan con trabajo en tres áreas fundamentales. De un lado, ayudan a identificar las necesidades latentes de las personas y encuentran maneras nuevas de satisfacerlas. En segundo término, visualizan nuevas direcciones para empresas y marcas y diseñan nuevas ofertas —productos, servicios, espacios, e interacción con medios audiovisuales y de software— que les dé vida. Por último, les ayudan a cambiar su cultura y a construir las habilidades necesarias para innovar de manera sostenida.
Ideo no es un consultor común. Muchos asesores de negocios llegan a una compañía, diagnostican y después aparecen con un libro bien editado para convencer a su cliente de las soluciones. En Ideo, en cambio, le piden al cliente que trabaje junto con ellos en todo el proceso. Por eso, no pierden tiempo en la implantación. No hay necesidad de discutir los volúmenes de las recomendaciones.
El primer paso de la consultoría es conformar un equipo conjunto de ejecutivos del cliente con algunos de los 450 antropólogos, ingenieros, diseñadores, estrategas de negocios y científicos sociales de Ideo, para observar el comportamiento de los consumidores. Van a las casas o a comprar los productos del cliente a los almacenes o a los sitios de internet. Después hacen una gran lluvia de ideas, en la cual se discuten rigurosamente los problemas y las soluciones, que se escriben en papeles que se van pegando en las paredes.
La etapa siguiente es construir prototipos para visualizar las soluciones. Esto ahorra discusiones en las que trata de intuir la forma en que se vería la idea. Para ahorrar tiempo, usan modelos simples de cartón donde lo más importante es el resultado general y no es el estilo, un elemento que desvela y, por supuesto, demora el trabajo de las oficinas de diseñadores convencionales. Con decisiones sobre los cambios, finalmente solo queda el proceso de implantación.
La velocidad con que se encuentran y resuelven los problemas, es una de las características que más atraen a quienes trabajan con Ideo. Pero otros prefieren sobre todo, su visión extraordinariamente enfocada a los negocios pero ecléctica. Se incluye la opinión de ingenieros, antropólogos o físicos que pasan sus vacaciones montando en bicicleta por los Alpes. Todo se amalgama en lo que llaman 'pensamiento de diseño', que da un poder enorme a la identificación de las oportunidades que generen valor. El método de Ideo es tan bueno, que la prestigiosa Universidad de Stanford estableció su escuela de diseño adoptando completamente esta visión.
¿Cómo definiría innovación?
Para nosotros, innovación es usar una visión creativa en la resolución de problemas, que llamamos 'pensamiento de diseño', que permita generar un nuevo valor para la organización. El nuevo valor puede venir en forma de nuevos productos, nuevos servicios, nuevos procesos o formas de hacer las cosas, pero no creemos que sea una innovación hasta que no genere valor. De modo que en ocasiones se tiene un invento, una idea loca o algo artístico, pero hasta que no se traduce en algo útil y valioso para las organizaciones, no necesariamente lo llamaríamos innovación.
¿Pensamiento de diseño?
Sí. Es el proceso que ocurre en la mente del diseñador y que normalmente se usaría para crear un producto nuevo. Ahora se usa para crear cualquier cosa nueva para el mundo, que tenga un valor.
¿Se trata de usar el diseño como una aproximación más universal a la creatividad?
Exacto. Nuestra firma ha hecho entre 3.000 y 4.000 programas de diseño e innovación. Cuando se hace cualquier cosa ese número de veces, uno empieza a encontrar patrones. Empieza a ver las grandes lecciones que parecen estar en todos los proyectos. En 30 años, hemos encontrado cosas que se pueden asociar con los proyectos exitosos.
La primera categoría de estos elementos es la apertura al aprendizaje nuevo. Algunas compañías —las que no son buenas en innovación— se sienten demasiado satisfechas, demasiado seguras de sí mismas. Creen que no tienen que aprender. Encontramos que las compañías innovadoras, incluso si son la número uno en el mundo, aprenden continuamente.
Hay tres tipos de aprendizaje en una organización, que son diferentes a las de aprendizaje para un individuo. Aprenden al observar el comportamiento humano, la enredada conducta de las personas en el mundo real. Segundo, aprenden por un proceso de 'ensayo y error iluminado', lo que implica la disposición a ensayar algo con los clientes, y ver lo que tiene éxito y lo que fracasa. Si se tiene una cultura corporativa de "yo nunca cometo un error", nunca se podrán tomar riesgos. El éxito de las compañías innovadoras es estar dispuestas a cometer errores, porque están experimentando todo el tiempo.
La tercera manera de aprender es la polinización cruzada, que consiste en mirar otras industrias, otros países y encontrar ideas que no simplemente se copian, sino que de alguna forma se traducen para ser usadas en la organización propia.
El 'pensamiento de diseño' requiere humildad, porque se debe reconocer que uno puede aprender todavía, que necesita seguir aprendiendo. No como los expertos que creen que ya saben lo suficiente. Además, se trata de usar todo el cerebro, no solo las habilidades analíticas del lado izquierdo, sino también la parte creativa e intuitiva del cerebro. Eso es muy importante para la innovación.
¿Cuál es la mayor barrera para que una organización acoja estas ideas?
He trabajado personalmente en más de 1.500 grupos de clientes y hay dos obstáculos que he visto con más frecuencia.
Uno lo mencioné hace un momento: satisfacción. Estar demasiado seguro de sí mismo, creer que no necesita innovar. Por ejemplo, yo crecí en el Medio Oeste de Estados Unidos, en Akron, Ohio. Cuando nací, en los 50, la industria de llantas estaba en mi pueblo. El 100% de las llantas para los carros de Estados Unidos se hacía a menos de 10 kilómetros de mi casa. Pero los llanteros de Akron se volvieron demasiado seguros de sí mismos. Pensaron que lo sabían todo, que eran los mejores del mundo y ellos y su comunidad pagaron un precio muy alto por su satisfacción.
Bajaron su tasa de innovación y para cuando me gradué de bachillerato a los 18 años, habían pasado de tener el 100% de las llantas para los vehículos de pasajeros a 0%, porque otras compañías, principalmente extranjeras como Michelin en Francia y Yokohama Tires en Japón y luego Bridgestone, innovaron a un paso más rápido. Esa satisfacción, ese confort y ese sentimiento de superioridad fue una barrera enorme a la innovación y causó mucho dolor.
Pero incluso entre grupos innovadores hay otra barrera: la del abogado del diablo. En muchas organizaciones, hay personas que son muy buenos críticos. Les dan cualquier idea y encontrarán lo malo que hay en ella. Cuando se propone una innovación, son muy buenos en derribarla. Dirán: "bueno, no tenemos ninguna prueba de eso" o "ya ensayamos algo así antes y no funcionó". Y muchas veces, reciben premios por hacerlo. Y la gente dice: "ese tipo es tan inteligente".
Pero entonces, si es tan inteligente, pongámoslo a cargo de arreglar la sugerencia, lo que llamo 'como podríamos'. Cuando diga: "eso nunca funcionará, porque los reguladores nunca lo aprobarán" o algo así, toda la organización debería iluminar con reflectores al abogado del diablo y decirle: "usted es muy inteligente, ha estado en la organización mucho tiempo, es una especie de experto. Díganos como podríamos cambiar esta idea para que pueda pasar por los reguladores. Para que llegue al mercado exitosamente".
Mientras dejemos que el abogado del diablo solo sea un crítico, tendremos una gran barrera a la innovación. Lo que queremos es engancharlo, pensando que incluso puede tener razón.
¿Cómo se promueve la creatividad?
Hay muchas formas, pero creo que muchas de ellas se pueden resumir en la creación de un entorno amigable a las ideas. Eso implica que cualquiera en la compañía puede proponer una idea sin que se rían de él. No serán criticados en exceso o no los harán sentir pequeños o estúpidos, porque no han pensado la idea en su totalidad. Suponga que usted tiene una idea nueva y se la lleva al jefe o al vecino de cubículo y, de inmediato, le preguntan cómo se fabricaría eso o qué dirán los clientes sobre ese producto o cómo lo manejarán los canales de distribución. Si está en un entorno amigable a las ideas, es perfectamente válido decir que no ha llegado a ese punto todavía. "Es solo una idea embrionaria, pero déjeme pensar en eso".
Si eso se puede decir en una empresa, la gente construirá sobre la idea. Pero en algunas culturas dicen "solo quiero oír ideas patentables. No me traigan cosas a medias, ideas sin terminar". Ese es un entorno no amigable, en el que es mejor no contar las ideas porque se critican o se burlan de la gente.
¿Cómo se construye un entorno así?
Una es tener muchas sesiones de lluvia de ideas, para que todos se acostumbren a compartir sus ideas. Otra es hacer muchos prototipos con los conceptos gruesos —que se ponen de manera física si es un producto, o con un video si es un servicio, o bosquejados en un papel—, para que las personas desarrollen fluidez con las ideas y comprendan mejor el concepto de que hay muchas ideas flotando alrededor.
Un pequeño beneficio que se deriva de las culturas amigables a las ideas es que la gente no se aferra a una idea para siempre. Si creen que es la única idea que van a tener en la vida, la mantendrán en secreto o solo se la cuentan a una persona. En un entorno amigable a las ideas, se espera tener más ideas, de modo que es más fácil compartirlas con personas que tienen diferentes experiencias y antecedentes para que construyan sobre ellas.
Mucho de lo que hacemos en Ideo es tratar de sacar las mejores ideas de todo el equipo, no solo de la alta gerencia. Encontramos propuestas en las personas que están en la calle atendiendo los clientes, en los jóvenes recién egresados de la universidad que no están atrapados en el concepto de cómo funciona la industria. Hay que promover la aparición de esas ideas, de una forma que llamamos 'los huevos enseñándoles a las gallinas', en la cual la gente joven que no ha estrechado su visión por las reglas de la industria, se pregunta por qué las cosas se hacen de una forma y no de otra completamente diferente.
¿Qué deben hacer las compañías pequeñas en innovación?
Para que a las empresas pequeñas les vaya bien, tienen que ser extraordinarias. Cuando se es pequeño, más vale tener productos, servicios o experiencias para los clientes que se vendan solos. Que sean tan buenos, que los clientes hablen de ellos. Lo que llaman 'rumor de mercadeo'.
Cuando Starbucks era pequeño, no hacía publicidad, pero vendía una gran experiencia y la gente hablaba de ello. Usando ese 'rumor' ahora es una compañía gigantesca.
W.L. Gore es una empresa pequeña, no vende mucho a los consumidores, pero la gente conoce sus productos. El más famoso es la tela Gore-tex. Es una tela que respira. Es extraordinaria. Mantiene la lluvia fuera, pero deja escapar la transpiración. La humedad la atraviesa en una dirección pero no en la otra. El producto es tan bueno que todos están dispuestos a pagar más por él. Y todos quieren ponerlo en sus chaquetas y su ropa exterior.
Aunque Gore es muy exitoso, sigue sacando productos nuevos y extraordinarios. Uno de los últimos son cuerdas de guitarra, un producto que no ha cambiado en… ¿100 años, tal vez? Fabricaron un nuevo material y creo que tienen algo así como 50% del mercado mundial ahora, porque es el mejor. Luego trabajaron en venas artificiales para cirugías. Cada producto en su línea es extraordinario. Incidentalmente, en Gore no tienen jefes, ni descripción de cargos. Son una organización muy interesante.
Ideo no es un consultor común. Muchos asesores de negocios llegan a una compañía, diagnostican y después aparecen con un libro bien editado para convencer a su cliente de las soluciones. En Ideo, en cambio, le piden al cliente que trabaje junto con ellos en todo el proceso. Por eso, no pierden tiempo en la implantación. No hay necesidad de discutir los volúmenes de las recomendaciones.
El primer paso de la consultoría es conformar un equipo conjunto de ejecutivos del cliente con algunos de los 450 antropólogos, ingenieros, diseñadores, estrategas de negocios y científicos sociales de Ideo, para observar el comportamiento de los consumidores. Van a las casas o a comprar los productos del cliente a los almacenes o a los sitios de internet. Después hacen una gran lluvia de ideas, en la cual se discuten rigurosamente los problemas y las soluciones, que se escriben en papeles que se van pegando en las paredes.
La etapa siguiente es construir prototipos para visualizar las soluciones. Esto ahorra discusiones en las que trata de intuir la forma en que se vería la idea. Para ahorrar tiempo, usan modelos simples de cartón donde lo más importante es el resultado general y no es el estilo, un elemento que desvela y, por supuesto, demora el trabajo de las oficinas de diseñadores convencionales. Con decisiones sobre los cambios, finalmente solo queda el proceso de implantación.
La velocidad con que se encuentran y resuelven los problemas, es una de las características que más atraen a quienes trabajan con Ideo. Pero otros prefieren sobre todo, su visión extraordinariamente enfocada a los negocios pero ecléctica. Se incluye la opinión de ingenieros, antropólogos o físicos que pasan sus vacaciones montando en bicicleta por los Alpes. Todo se amalgama en lo que llaman 'pensamiento de diseño', que da un poder enorme a la identificación de las oportunidades que generen valor. El método de Ideo es tan bueno, que la prestigiosa Universidad de Stanford estableció su escuela de diseño adoptando completamente esta visión.
¿Cómo definiría innovación?
Para nosotros, innovación es usar una visión creativa en la resolución de problemas, que llamamos 'pensamiento de diseño', que permita generar un nuevo valor para la organización. El nuevo valor puede venir en forma de nuevos productos, nuevos servicios, nuevos procesos o formas de hacer las cosas, pero no creemos que sea una innovación hasta que no genere valor. De modo que en ocasiones se tiene un invento, una idea loca o algo artístico, pero hasta que no se traduce en algo útil y valioso para las organizaciones, no necesariamente lo llamaríamos innovación.
¿Pensamiento de diseño?
Sí. Es el proceso que ocurre en la mente del diseñador y que normalmente se usaría para crear un producto nuevo. Ahora se usa para crear cualquier cosa nueva para el mundo, que tenga un valor.
¿Se trata de usar el diseño como una aproximación más universal a la creatividad?
Exacto. Nuestra firma ha hecho entre 3.000 y 4.000 programas de diseño e innovación. Cuando se hace cualquier cosa ese número de veces, uno empieza a encontrar patrones. Empieza a ver las grandes lecciones que parecen estar en todos los proyectos. En 30 años, hemos encontrado cosas que se pueden asociar con los proyectos exitosos.
La primera categoría de estos elementos es la apertura al aprendizaje nuevo. Algunas compañías —las que no son buenas en innovación— se sienten demasiado satisfechas, demasiado seguras de sí mismas. Creen que no tienen que aprender. Encontramos que las compañías innovadoras, incluso si son la número uno en el mundo, aprenden continuamente.
Hay tres tipos de aprendizaje en una organización, que son diferentes a las de aprendizaje para un individuo. Aprenden al observar el comportamiento humano, la enredada conducta de las personas en el mundo real. Segundo, aprenden por un proceso de 'ensayo y error iluminado', lo que implica la disposición a ensayar algo con los clientes, y ver lo que tiene éxito y lo que fracasa. Si se tiene una cultura corporativa de "yo nunca cometo un error", nunca se podrán tomar riesgos. El éxito de las compañías innovadoras es estar dispuestas a cometer errores, porque están experimentando todo el tiempo.
La tercera manera de aprender es la polinización cruzada, que consiste en mirar otras industrias, otros países y encontrar ideas que no simplemente se copian, sino que de alguna forma se traducen para ser usadas en la organización propia.
El 'pensamiento de diseño' requiere humildad, porque se debe reconocer que uno puede aprender todavía, que necesita seguir aprendiendo. No como los expertos que creen que ya saben lo suficiente. Además, se trata de usar todo el cerebro, no solo las habilidades analíticas del lado izquierdo, sino también la parte creativa e intuitiva del cerebro. Eso es muy importante para la innovación.
¿Cuál es la mayor barrera para que una organización acoja estas ideas?
He trabajado personalmente en más de 1.500 grupos de clientes y hay dos obstáculos que he visto con más frecuencia.
Uno lo mencioné hace un momento: satisfacción. Estar demasiado seguro de sí mismo, creer que no necesita innovar. Por ejemplo, yo crecí en el Medio Oeste de Estados Unidos, en Akron, Ohio. Cuando nací, en los 50, la industria de llantas estaba en mi pueblo. El 100% de las llantas para los carros de Estados Unidos se hacía a menos de 10 kilómetros de mi casa. Pero los llanteros de Akron se volvieron demasiado seguros de sí mismos. Pensaron que lo sabían todo, que eran los mejores del mundo y ellos y su comunidad pagaron un precio muy alto por su satisfacción.
Bajaron su tasa de innovación y para cuando me gradué de bachillerato a los 18 años, habían pasado de tener el 100% de las llantas para los vehículos de pasajeros a 0%, porque otras compañías, principalmente extranjeras como Michelin en Francia y Yokohama Tires en Japón y luego Bridgestone, innovaron a un paso más rápido. Esa satisfacción, ese confort y ese sentimiento de superioridad fue una barrera enorme a la innovación y causó mucho dolor.
Pero incluso entre grupos innovadores hay otra barrera: la del abogado del diablo. En muchas organizaciones, hay personas que son muy buenos críticos. Les dan cualquier idea y encontrarán lo malo que hay en ella. Cuando se propone una innovación, son muy buenos en derribarla. Dirán: "bueno, no tenemos ninguna prueba de eso" o "ya ensayamos algo así antes y no funcionó". Y muchas veces, reciben premios por hacerlo. Y la gente dice: "ese tipo es tan inteligente".
Pero entonces, si es tan inteligente, pongámoslo a cargo de arreglar la sugerencia, lo que llamo 'como podríamos'. Cuando diga: "eso nunca funcionará, porque los reguladores nunca lo aprobarán" o algo así, toda la organización debería iluminar con reflectores al abogado del diablo y decirle: "usted es muy inteligente, ha estado en la organización mucho tiempo, es una especie de experto. Díganos como podríamos cambiar esta idea para que pueda pasar por los reguladores. Para que llegue al mercado exitosamente".
Mientras dejemos que el abogado del diablo solo sea un crítico, tendremos una gran barrera a la innovación. Lo que queremos es engancharlo, pensando que incluso puede tener razón.
¿Cómo se promueve la creatividad?
Hay muchas formas, pero creo que muchas de ellas se pueden resumir en la creación de un entorno amigable a las ideas. Eso implica que cualquiera en la compañía puede proponer una idea sin que se rían de él. No serán criticados en exceso o no los harán sentir pequeños o estúpidos, porque no han pensado la idea en su totalidad. Suponga que usted tiene una idea nueva y se la lleva al jefe o al vecino de cubículo y, de inmediato, le preguntan cómo se fabricaría eso o qué dirán los clientes sobre ese producto o cómo lo manejarán los canales de distribución. Si está en un entorno amigable a las ideas, es perfectamente válido decir que no ha llegado a ese punto todavía. "Es solo una idea embrionaria, pero déjeme pensar en eso".
Si eso se puede decir en una empresa, la gente construirá sobre la idea. Pero en algunas culturas dicen "solo quiero oír ideas patentables. No me traigan cosas a medias, ideas sin terminar". Ese es un entorno no amigable, en el que es mejor no contar las ideas porque se critican o se burlan de la gente.
¿Cómo se construye un entorno así?
Una es tener muchas sesiones de lluvia de ideas, para que todos se acostumbren a compartir sus ideas. Otra es hacer muchos prototipos con los conceptos gruesos —que se ponen de manera física si es un producto, o con un video si es un servicio, o bosquejados en un papel—, para que las personas desarrollen fluidez con las ideas y comprendan mejor el concepto de que hay muchas ideas flotando alrededor.
Un pequeño beneficio que se deriva de las culturas amigables a las ideas es que la gente no se aferra a una idea para siempre. Si creen que es la única idea que van a tener en la vida, la mantendrán en secreto o solo se la cuentan a una persona. En un entorno amigable a las ideas, se espera tener más ideas, de modo que es más fácil compartirlas con personas que tienen diferentes experiencias y antecedentes para que construyan sobre ellas.
Mucho de lo que hacemos en Ideo es tratar de sacar las mejores ideas de todo el equipo, no solo de la alta gerencia. Encontramos propuestas en las personas que están en la calle atendiendo los clientes, en los jóvenes recién egresados de la universidad que no están atrapados en el concepto de cómo funciona la industria. Hay que promover la aparición de esas ideas, de una forma que llamamos 'los huevos enseñándoles a las gallinas', en la cual la gente joven que no ha estrechado su visión por las reglas de la industria, se pregunta por qué las cosas se hacen de una forma y no de otra completamente diferente.
¿Qué deben hacer las compañías pequeñas en innovación?
Para que a las empresas pequeñas les vaya bien, tienen que ser extraordinarias. Cuando se es pequeño, más vale tener productos, servicios o experiencias para los clientes que se vendan solos. Que sean tan buenos, que los clientes hablen de ellos. Lo que llaman 'rumor de mercadeo'.
Cuando Starbucks era pequeño, no hacía publicidad, pero vendía una gran experiencia y la gente hablaba de ello. Usando ese 'rumor' ahora es una compañía gigantesca.
W.L. Gore es una empresa pequeña, no vende mucho a los consumidores, pero la gente conoce sus productos. El más famoso es la tela Gore-tex. Es una tela que respira. Es extraordinaria. Mantiene la lluvia fuera, pero deja escapar la transpiración. La humedad la atraviesa en una dirección pero no en la otra. El producto es tan bueno que todos están dispuestos a pagar más por él. Y todos quieren ponerlo en sus chaquetas y su ropa exterior.
Aunque Gore es muy exitoso, sigue sacando productos nuevos y extraordinarios. Uno de los últimos son cuerdas de guitarra, un producto que no ha cambiado en… ¿100 años, tal vez? Fabricaron un nuevo material y creo que tienen algo así como 50% del mercado mundial ahora, porque es el mejor. Luego trabajaron en venas artificiales para cirugías. Cada producto en su línea es extraordinario. Incidentalmente, en Gore no tienen jefes, ni descripción de cargos. Son una organización muy interesante.
PROYECTOS DESIGN THINKING
http://www.designthinking.es/inicio/
Qué es el Design Thinking
Es un método para generar ideas innovadoras que centra su eficacia en entender y dar solución a las necesidades reales de los usuarios. Proviene de la forma en la que trabajan los diseñadores de producto. De ahí su nombre, que en español se traduce de forma literal como "Pensamiento de Diseño", aunque nosotros preferimos hacerlo como "La forma en la que piensan los diseñadores".
Se empezó a desarrollar de forma teórica en la Universidad de Stanford en California (EEUU) a partir de los años 70, y su primera aplicabilidad con fines lucrativos como "Design Thinking" la llevó a cabo la consultoría de diseño IDEO, siendo hoy en día su principal precursora
Quienes lo utilizan
Según Tim Brown, actual CEO de IDEO, el Design Thinking “Es una disciplina que usa la sensibilidad y métodos de los diseñadores para hacer coincidir las necesidades de las personas con lo que es tecnológicamente factible y con lo que una estrategia viable de negocios puede convertir en valor para el cliente, así como en una gran oportunidad para el mercado”.
Qué es el Design Thinking
Es un método para generar ideas innovadoras que centra su eficacia en entender y dar solución a las necesidades reales de los usuarios. Proviene de la forma en la que trabajan los diseñadores de producto. De ahí su nombre, que en español se traduce de forma literal como "Pensamiento de Diseño", aunque nosotros preferimos hacerlo como "La forma en la que piensan los diseñadores".
Se empezó a desarrollar de forma teórica en la Universidad de Stanford en California (EEUU) a partir de los años 70, y su primera aplicabilidad con fines lucrativos como "Design Thinking" la llevó a cabo la consultoría de diseño IDEO, siendo hoy en día su principal precursora
Quienes lo utilizan
Según Tim Brown, actual CEO de IDEO, el Design Thinking “Es una disciplina que usa la sensibilidad y métodos de los diseñadores para hacer coincidir las necesidades de las personas con lo que es tecnológicamente factible y con lo que una estrategia viable de negocios puede convertir en valor para el cliente, así como en una gran oportunidad para el mercado”.
¿Cómo funciona?
El Design Thinking se desarrolla siguiendo un proceso en el que se ponen en valor los que nosotros consideramos sus 5 características diferenciales:
La generación de empatía: hay que entender los problemas, necesidades y deseos de los usuarios implicados en la solución que estamos buscando. Independientemente de qué estemos desarrollando, siempre conllevará la interacción con personas. Satisfacerlas es la clave de un resultado exitoso.
El trabajo en equipo, ya que pone en valor la capacidad de los individuos de aportar singularidad.
La generación de prototipos, ya que defiende que toda idea debe ser validada antes de asumirse como correcta. El Design Thinking propicia la identificación de fallos, para que cuando demos con la solución deseada, éstos ya se hayan solventado.
Todo ello bajo una atmósfera en la que se promueve lo lúdico. Se trata de disfrutar durante el proceso, y gracias a ello, llegar a un estado mental en el que demos rienda suelta a nuestro potencial.
Durante el proceso se desarrollan técnicas con un gran contenido visual y plástico. Esto hace que pongamos a trabajar tanto nuestra mente creativa como la analítica, dando como resultado soluciones innovadores y a la vez factibles.
Para comenzar a utilizar la metodología es muy importante preparar estos cuatro puntos:
La generación de empatía: hay que entender los problemas, necesidades y deseos de los usuarios implicados en la solución que estamos buscando. Independientemente de qué estemos desarrollando, siempre conllevará la interacción con personas. Satisfacerlas es la clave de un resultado exitoso.
El trabajo en equipo, ya que pone en valor la capacidad de los individuos de aportar singularidad.
La generación de prototipos, ya que defiende que toda idea debe ser validada antes de asumirse como correcta. El Design Thinking propicia la identificación de fallos, para que cuando demos con la solución deseada, éstos ya se hayan solventado.
Todo ello bajo una atmósfera en la que se promueve lo lúdico. Se trata de disfrutar durante el proceso, y gracias a ello, llegar a un estado mental en el que demos rienda suelta a nuestro potencial.
Durante el proceso se desarrollan técnicas con un gran contenido visual y plástico. Esto hace que pongamos a trabajar tanto nuestra mente creativa como la analítica, dando como resultado soluciones innovadores y a la vez factibles.
Para comenzar a utilizar la metodología es muy importante preparar estos cuatro puntos:
Los materiales: Los usados en las técnicas de Design Thinking están al alcance de cualquiera. Hazte con rotuladores, hojas de papel, notas adhesivas, lápices de colores, pegamento y una cámara de fotos. Serán nuestras herramientas para promover la comunicación visual, que es fundamental en la metodología. Una imagen vale más que mil palabras. Y lo que es más importante: una imagen puede evocar un sinfín de ideas, ya que da pie a la interpretación.
El equipo: En el Design Thinking es imprescindible trabajar en equipo. Cuanto más diverso sea, mejor. Así podréis sumar puntos de vista, conocimientos y experiencia. Es imprescindible que haya al menos una persona con conocimientos sobre la metodología que sepa guiar el proceso. Y aunque debe tener un nucleo estable de personas que participen hasta el final, se podrán sumar otras dependiendo de la fase en la que nos encontremos. Por ejemplo, en la generación de ideas o en la prueba de prototipos.
El espacio: Durante el proceso necesitaréis un espacio de trabajo, aunque también desarrollaréis técnicas fuera de él. Buscad un sitio lo suficientemente amplio para trabajar en torno a una mesa, con paredes libres donde pegar la información que vayáis generando. Pensad en un lugar luminoso e inspirador, que propicie el trabajo distendido y os haga sentir cómodos y con un buen estado anímico. ¿Habéis oido hablar de las famosas oficinas de Google? Un espacio inspirador motiva la innovación.
La actitud: En el Design Thinking es imprescindible la actitud. Debemos adoptar la que se denomina "Actitud del Diseñador". Ser curiosos, y observadores. En cualquier detalle podemos encontrar información trascendente. Debemos ser empáticos, tanto con las personas como con sus circunstancias. Ser capaces de ponernos en la piel del otro. Cuestionarnos el Status Quo, y no cargar con prejuicios o asunciones. Ser optimistas y positivos.Perder el miedo a equivocarnos, y ver los errores como oportunidades.
¿En qué consiste el proceso?
El proceso de Design Thinking se compone de cinco etapas. No es lineal. En cualquier momento podrás ir hacia atrás o hacia delante si lo ves oportuno, saltando incluso a etapas no consecutivas. Comenzarás recolectando mucha información, generando una gran cantidad de contenido, que crecerá o disminuirá dependiendo de la fase en la que te encuentres.
A lo largo del proceso irás afinando ese contenido hasta desembocar en una solución que cumpla con los objetivos del equipo. Y seguramente, incluso los supere.
EMPATIZA: El proceso de Design Thinking comienza con una profunda comprensión de las necesidades de los usuarios implicados en la solución que estemos desarrollando, y también de su entorno. Debemos ser capaces de ponernos en la piel de dichas personas para ser capaces de generar soluciones consecuentes con sus realidades.
DEFINE: Durante la etapa de Definición, debemos cribar la información recopilada durante la fase de Empatía y quedarnos con lo que realmente aporta valor y nos lleva al alcance de nuevas perspectivas interesantes. Identificaremos problemas cuyas soluciones serán clave para la obtención de un resultado innovador.
IDEA: La etapa de Ideación tiene como objetivo la generación de un sinfín de opciones. No debemos quedarnos con la primera idea que se nos ocurra. En esta fase, las actividades favorecen el pensamiento expansivo y debemos eliminar los juicios de valor. A veces, las ideas más estrambóticas son las que generan soluciones visionarias.
PROTOTIPA: En la etapa de Prototipado volvemos las ideas realidad. Construir prototipos hace las ideas palpables y nos ayuda a visualizar las posibles soluciones, poniendo de manifiesto elementos que debemos mejorar o refinar antes de llegar al resultado final.
TESTEA: Durante la fase de Testeo, probaremos nuestros prototipos con los usuarios implicados en la solución que estemos desarrollando. Esta fase es crucial, y nos ayudará a identificar mejoras significativas, fallos a resolver, posibles carencias. Durante esta fase evolucionaremos nuestra idea hasta convertirla en la solución que estábamos buscando.
¿Cuáles son las técnicas?
- Empatiza
- Define
- Idea
- Prototipa
- Testea
- Mapa de actores
- Inmersión cognitiva
- Interacción Constructiva
- Mapa Mental
- Moodboard
- Observación encubierta
- ¿Qué, cómo, por qué?
- Guión de la entrevista cualitativa
- Entrevistas cualitativas
- Usuarios Extremos
- Storytelling
- Customer Journey
- Flor de Loto
- World Café
- Mapa del Presente, Mapa del Futuro
- Grupos de discusión o "focus groups"
- Técnica de los 5 "¿por qué?"
- Toolkit
- Diagrama de causa-efecto
- Análisis paralelo
- Método de pesos ponderados
- Técnica de los 5 para qué
- Sería / No sería
- Diagrama de Porter
- Matriz FODA o matriz DAFO
- Lienzo del modelo de negocio
- Mapa de atracción de clientes
- Dentro / Fuera
- Diagrama de prioridades
- Curvas de valor
- Glocal
- AEIOU
- Análisis Dimensional
- Safari
- Blueprint
- Selección por clasificación
- Mapas del contexto
- Dibujo del problema
- Mapa de espectro
- Mi turno
- Phillips 6/6
- Tarjetas rojas y verdes
- Investigación en medios
- Estadísticas
- Estudio de tendencias
- Investigación de referentes
- Análisis de Competencia
- Entrevistas a expertos
- Matriz de tendencias
- Benchmark
- Apuntes P.O.E.M.S.
- Entrevistas con fotos
- Imágenes evocadoras
- Sugiere una
Problemas con SYSAUX, ocupación de AWRs
Problemas con SYSAUX, ocupación de AWRs
Hoy vamos a lidiar con un problema muy común en las bases de datos de Oracle que es el tamaño del tablespace SYSAUX.
El tablespace SYSAUX es uno de los tablespaces especiales de la base de datos con el que no podemos jugar alegremente, la principal característica que tiene de cara a la administración de base de datos es que ,el espacio que le demos se ha perdido, es decir, no va ha haber forma de hacerlo mas pequeño (al menos en mi caso siempre ha habido un “pero” que lo imposibilita).
Como decía al principio es junto con el SYSTEM un tablespace muy especial, y los motivos de su tamaño pueden ser varios,hoy vamos a centrarnos en como vaciar un poco el tamaño debido el AWR.
Lo que, lo primero que tendremos que hacer es ver cual es el componente que esta llenándonos el tablespace.
Para ello tenemos la consulta
Nuestro siguientes pasos van a ser:
Cuando sabemos cuanto ocupa cada AWR y cuanto hacemos al día, tenemos que saber cuantos dias guardamos para ver si la ocupación es correcta, para ello haremos :
Mirar si la causa está en las lineas “huerfanas” de las Active Session History
Algunas veces el Active Session History (ASH) guarda filas que no pertenecen a ningún AWR,esto hace que el ASH ocupe gran parte del espacio dedicado al AWR, la forma de saber si esto nos está sucediendo es mirar nuestro informe en el apartado
Mediante la siguiente consulta podemos saber si es nuestro caso.
Aún así, el tema de la ocupación del SYSAUX es un tema bastante complejo, con lo que, como siempre, el mejor sitio para buscar soluciones es soporte de Oracle, aquí tenéis un pequeño listado de algunas de las notas que puede que os aplique y cuyo contenido tenéis en la página de soporte
El tablespace SYSAUX es uno de los tablespaces especiales de la base de datos con el que no podemos jugar alegremente, la principal característica que tiene de cara a la administración de base de datos es que ,el espacio que le demos se ha perdido, es decir, no va ha haber forma de hacerlo mas pequeño (al menos en mi caso siempre ha habido un “pero” que lo imposibilita).
Como decía al principio es junto con el SYSTEM un tablespace muy especial, y los motivos de su tamaño pueden ser varios,hoy vamos a centrarnos en como vaciar un poco el tamaño debido el AWR.
Lo que, lo primero que tendremos que hacer es ver cual es el componente que esta llenándonos el tablespace.
Para ello tenemos la consulta
set linesize 100; column OCCUPANT_NAME format a20; column OCCUPANT_DESC format a60; column Mb format 999999.99 SELECT occupant_name,space_usage_kbytes/1024 Mb,occupant_desc FROM V$SYSAUX_OCCUPANTS order by space_usage_kbytes desc; OCCUPANT_NAME MB OCCUPANT_DESC -------------------- ------- ------------------------------------------------------------ SM/AWR 780.06 Server Manageability - Automatic Workload Repository SM/OPTSTAT 333.00 Server Manageability - Optimizer Statistics History LOGMNR 91.63 LogMiner XDB 85.50 XDB SM/ADVISOR 65.56 Server Manageability - Advisor Framework WM 6.38 Workspace Manager SM/OTHER 6.25 Server Manageability - Other Components SMON_SCN_TIME 5.31 Transaction Layer - SCN to TIME mapping EXPRESSION_FILTER 3.88 Expression Filter System JOB_SCHEDULER 2.81 Unified Job Scheduler EM_MONITORING_USER 2.75 Enterprise Manager Monitoring User SQL_MANAGEMENT_BASE 1.69 SQL Management Base Schema PL/SCOPE 1.56 PL/SQL Identifier Collection XSOQHIST 1.38 OLAP API History Tables AO 1.38 Analytical Workspace Object Table LOGSTDBY 1.38 Logical Standby STREAMS 1.00 Oracle Streams AUTO_TASK .31 Automated Maintenance Tasks ORDIM/ORDDATA .00 Oracle Multimedia ORDDATA Components ORDIM/ORDPLUGINS .00 Oracle Multimedia ORDPLUGINS Components ORDIM/SI_INFORMTN_SC .00 Oracle Multimedia SI_INFORMTN_SCHEMA Components HEMA EM .00 Enterprise Manager Repository TEXT .00 Oracle Text ULTRASEARCH .00 Oracle Ultra Search ORDIM .00 Oracle Multimedia ORDSYS Components SDO .00 Oracle Spatial STATSPACK .00 Statspack Repository TSM .00 Oracle Transparent Session Migration User XSAMD .00 OLAP Catalog AUDIT_TABLES .00 DB audit tables ULTRASEARCH_DEMO_USE .00 Oracle Ultra Search Demo UserComo podemos ver, son muchas las cosas que se guardan en SYSAUX, pero, en nuestro caso, está bastante claro que, la mayoría de la ocupación es debida a los AWR.
Nuestro siguientes pasos van a ser:
- Determinar que es lo que nos ocupa el espacio
- Mirar si la causa esta en la retención
- Mirar si la causa está en los AWR guardados
- Mirar si la causa está en las lineas “huerfanas” de las Active Session History
Determinar que es lo que ocupa espacio
El siguiente paso será el buscar la información del AWR, para ello el propio Oracle tiene una utilidad que podemos llamar desde sqlplusSQL> @$ORACLE_HOME/rdbms/admin/awrinfo.sqlEste sql nos genera un informe con unos apartados muy interesantes que nos servirán para encontrar de donde liberar espacio.
Mirar si la causa esta en la retención
************************************ (2) Size estimates for AWR snapshots ************************************* | Estimates based on 60 mins snapshot INTERVAL: | AWR size/day 31.0 MB (1,324 K/snap * 24 snaps/day) | AWR size/wk 217.2 MB (size_per_day * 7) per instance | Estimates based on 24 snaps in past 24 hours: | AWR size/day 31.0 MB (1,324 K/snap and 24 snaps in past 24 hours) | AWR size/wk 217.2 MB (size_per_day * 7) per instance |Aqui podemos ver el tamaño estimado que ocupa nuestra información de los AWR, en función del periodo de retencion que tengamos de los AWR tendremos la ocupación en la base de datos.
Cuando sabemos cuanto ocupa cada AWR y cuanto hacemos al día, tenemos que saber cuantos dias guardamos para ver si la ocupación es correcta, para ello haremos :
SQL> SELECT retention FROM dba_hist_wr_control; RETENTION --------------------------------------------------------------------------- +00007 00:00:00.0En mi caso por ejemplo, la retencion es de 7 días.
Mirar si la causa está en los AWR guardados
Otro de los problemas que podemos tener es que el número de AWR que mantenemos guardados por razones históricas en la instancia, en el informe que acabamos de obtener también aparece un apartado con las últimas 50 snapshots de la base de datos, el eliminar imágenes antiguas también nos ayudará a liberar espacio.********************************** (3a) Space usage by AWR components (per database) ********************************** COMPONENT MB % AWR KB_PER_SNAP MB_PER_DAY MB_PER_WEEK TABLE% : INDEX% --------- --------- ------ ------------ ---------- ----------- ---------------- FIXED 131.5 50.6 670 15.7 109.9 52% : 48% EVENTS 37.9 14.6 193 4.5 31.7 43% : 57% SQLPLAN 25.0 9.6 127 3.0 20.9 72% : 28% ASH 18.3 7.0 93 2.2 15.3 89% : 11% SQL 11.0 4.2 56 1.3 9.2 60% : 40% SPACE 10.3 4.0 53 1.2 8.6 61% : 39% SQLTEXT 5.2 2.0 26 0.6 4.3 96% : 4% SQLBIND 0.8 0.3 4 0.1 0.6 50% : 50% RAC 0.6 0.2 3 0.1 0.5 50% : 50%Si la línea de ASH ocupa mas de un 1% probablemente sea la causa de nuestra ocupación.
Mediante la siguiente consulta podemos saber si es nuestro caso.
SELECT COUNT(*) huerfanas
FROM wrh$_active_session_history a
WHERE NOT EXISTS
(SELECT *
FROM wrm$_snapshot
WHERE snap_id = a.snap_id
AND dbid = a.dbid
AND instance_number = a.instance_number
);
HUERFANAS
----------
116
Si aparece alguna línea podemos borrarlas con delete FROM wrh$_active_session_history a WHERE NOT EXISTS (SELECT * FROM wrm$_snapshot WHERE snap_id = a.snap_id AND dbid = a.dbid AND instance_number = a.instance_number );Con estas tres acciones, si elproblema de laocupación del SYSAUX es debido a el AWR tendremos que haberpodido liberar el espacio suficiente para que la base de datos pueda seguir trabajando sin problemas de espacio.
Aún así, el tema de la ocupación del SYSAUX es un tema bastante complejo, con lo que, como siempre, el mejor sitio para buscar soluciones es soporte de Oracle, aquí tenéis un pequeño listado de algunas de las notas que puede que os aplique y cuyo contenido tenéis en la página de soporte
- AWR Data Uses Significant Space in the SYSAUX Tablespace [ID 287679.1]
- Suggestions if your SYSAUX Tablespace grows rapidly or too large [Document 1292724.1]
- General Guidelines for SYSAUX Space Issues [Document 552880.1]
- SYSAUX Grows Because Optimizer Stats History is Not Purged [Document 1055547.1]
- Space issue in Sysaux tablespace due to Unexpected AWR size [Document 1218413.1]
- Space Management In Sysaux Tablespace with AWR in Use [Document 287679.1]
- SYSAUX Tablespace Grows Heavily Due To AWR [Document 852028.1]
BORRAR NOTIFICACIONES ENTERPRISE MANAGER
Si deseamos borrar todo el historial de notificaciones:
SQL> begin
2 delete from mgmt_current_severity;
3 end;
4 /
PL/SQL procedure successfully completed.
SQL> commit;
Commit complete.
begin
delete from mgmt_current_severity;
end;
The table of interest in the SYSMAN schema is named MGMT_SEVERITY.
Aside from the RAW datatypes, working with data in this table should be fairly straightforward, that is, once you know what to look for. The table’s primary key is a composite key, and uses TARGET_GUID, METRIC_GUID, KEY_VALUE, COLLECTION_TIMESTAMP, and SEVERITY_CODE.
You won’t find the RAW values anywhere on the page, even if you look at the page’s source. If you try that approach, mainly as an exercise to see what the underlying HTML code looks like, all you’re going to see (at the bottom of the text editor page) are a few lines of code, with one of them stretching out well over 30,000 characters.
The two best telltales in the table are KEY_VALUE and COLLECTION_TIMESTAMP. The KEY_VALUE values have a pattern to them. If the message is about a tablespace having crossed a space threshold, then the KEY_VALUE is simply the name of the tablespace. If the message is about SYS having logged on, the KEY_VALUE will be a mixture of “SYS” plus “_.” The recovery
area message is identified by a value of RECOVERY AREA. The blocking message
starts with SID, and the invalid objects in a schema begins with the schema
name.
For the most part, the date and time shown under Alert Triggered will appear as the value for COLLECTION_TIMESTAMP. Between that time and the “key values” in the KEY_VALUE column, you should be sufficiently armed to invoke a procedure named DELETE_CURRENT_SEVERITY in the EM_SEVERITY package.
This procedure deletes data from a table named MGMT_CURRENT_SEVERITY.
On the face of it, this approach seems like a safe way to go about clearing stale messages, but there is a better way, and that way is to delete directly from the MGMT_SEVERITY table and let the SEVERITY_DELETE trigger do all the work for you.
SQL> begin
2 delete from mgmt_current_severity;
3 end;
4 /
PL/SQL procedure successfully completed.
SQL> commit;
Commit complete.
begin
delete from mgmt_current_severity;
end;
The Driving Table
The table of interest in the SYSMAN schema is named MGMT_SEVERITY.
USER is "SYSTEM" SQL> conn sysman/oracle Connected. USER is "SYSMAN" SQL> desc mgmt_severity Name Null? Type ----------------------------------------- -------- -------------- TARGET_GUID NOT NULL RAW(16) METRIC_GUID NOT NULL RAW(16) KEY_VALUE NOT NULL VARCHAR2(256) COLLECTION_TIMESTAMP NOT NULL DATE LOAD_TIMESTAMP DATE SEVERITY_CODE NOT NULL NUMBER SEVERITY_TYPE NUMBER SEVERITY_DURATION NUMBER SEVERITY_GUID RAW(16) ANNOTATED_FLAG NUMBER NOTIFICATION_STATUS NUMBER MESSAGE VARCHAR2(4000) MESSAGE_NLSID VARCHAR2(64) MESSAGE_PARAMS VARCHAR2(4000) ACTION_MESSAGE VARCHAR2(4000) ACTION_NLSID VARCHAR2(64) ACTION_MESSAGE_PARAMS VARCHAR2(4000) ADVISORY_ID VARCHAR2(64) USER_NAME VARCHAR2(64)
Aside from the RAW datatypes, working with data in this table should be fairly straightforward, that is, once you know what to look for. The table’s primary key is a composite key, and uses TARGET_GUID, METRIC_GUID, KEY_VALUE, COLLECTION_TIMESTAMP, and SEVERITY_CODE.
You won’t find the RAW values anywhere on the page, even if you look at the page’s source. If you try that approach, mainly as an exercise to see what the underlying HTML code looks like, all you’re going to see (at the bottom of the text editor page) are a few lines of code, with one of them stretching out well over 30,000 characters.
The two best telltales in the table are KEY_VALUE and COLLECTION_TIMESTAMP. The KEY_VALUE values have a pattern to them. If the message is about a tablespace having crossed a space threshold, then the KEY_VALUE is simply the name of the tablespace. If the message is about SYS having logged on, the KEY_VALUE will be a mixture of “SYS” plus “_
For the most part, the date and time shown under Alert Triggered will appear as the value for COLLECTION_TIMESTAMP. Between that time and the “key values” in the KEY_VALUE column, you should be sufficiently armed to invoke a procedure named DELETE_CURRENT_SEVERITY in the EM_SEVERITY package.
PROCEDURE DELETE_CURRENT_SEVERITY Argument Name Type In/Out Default? ------------------------------ ----------------------- ------ -------- P_TARGET_GUID RAW IN P_METRIC_GUID RAW IN P_KEY_VALUE VARCHAR2 IN
This procedure deletes data from a table named MGMT_CURRENT_SEVERITY.
BEGIN
DELETE FROM MGMT_CURRENT_SEVERITY
WHERE target_guid = p_target_guid
AND metric_guid = p_metric_guid
AND key_value = p_key_value;
END delete_current_severity;
On the face of it, this approach seems like a safe way to go about clearing stale messages, but there is a better way, and that way is to delete directly from the MGMT_SEVERITY table and let the SEVERITY_DELETE trigger do all the work for you.
Implementando Fast Connection Failover sobre Aplicaciones .NET
Implementando Fast Connection Failover sobre Aplicaciones .NET
Por Francisco Riccio
Publicado en Marzo 2014
Introducción
Fast Connection Failover (FCF) es un mecanismo que ofrece un failover de conexión de base de datos a nuestras aplicaciones, el cual se ejecutará automáticamente cuando ocurra una indisponibilidad en la instancia conectada; siendo una acción transparente para los usuarios finales.
Las librerías requeridas para el uso de FCF están disponibles desde la versión Oracle Client 10gR1, pero en el caso de ODP.NET están disponibles desde la versión 10gR2. Es importante resaltar que a partir de la versión Oracle Client 10gR2 se incluyó el feature de notificación de balanceo de carga sobre una base de datos Oracle RAC a través de notificaciones FAN.
FCF tiene las siguientes características:
- Ofrece rápida detección de la indisponibilidad de una instancia e inicia la reconexión en otra disponible. La detección de dicha indisponibilidad no se da por eventos de TCP Timeouts sino mediante eventos recibidos por el Oracle RAC, siendo más rápido y eficiente.
- Automáticamente realiza una limpieza de las conexiones conectadas sobre una instancia indisponible de base de datos antes de reingresarlas al pool.
- En un ambiente en Oracle RAC, ODP.NET estará informado en todo momento sobre la carga actual de cada una de las instancias de base de datos, permitiendo que al abrir nuevas conexiones se reubiquen sobre la instancia menos congestionada. Asimismo reconoce cuando nuevos nodos son agregados al clúster y los considerará para la colocación de nuevas conexiones que se soliciten.
FAN es un mecanismo de notificación que Oracle RAC utiliza para notificar a otros procesos sobre su nivel de servicio, disponibilidad y configuración. Estas notificaciones FAN son las que nuestra aplicación podrá recibir para tomar alguna acción. La publicación de estos eventos FAN se realiza mediante Oracle Notification Service (ONS).
Se presenta la siguiente arquitectura:

Figura 1
En la figura 1 podemos apreciar que dependiendo del tipo de aplicación que tengamos, los mensajes FAN serán recibidos ya sea por un componente ONS o mediante una cola de mensajes en Oracle Advanced Queuing (AQ).
Nuestra implementación que más adelante se documentará estará basado en un desarrollo sobre Microsoft .NET utilizando ODP.NET para el acceso de una base de datos Oracle RAC 12c compuesto de 2 nodos.
Nuestra base de datos estará corriendo sobre una plataforma Oracle Linux v5.10 x64 bits y nuestra aplicación será de tipo cliente/servidor corriendo sobre clientes Windows 7 x64 bits.
Adicionalmente contamos con un servidor DNS que resolverá las IPs de los hostnames solicitados, además por buena práctica, será responsable de devolver cualquiera de las 3 IP’s asociadas al IP SCAN de nuestra configuración de Oracle RAC 12c.
La aplicación utilizará Oracle Data Access Components (ODAC) versión 12c de x64 bits como driver para el acceso a la base de datos.
La arquitectura de nuestra solución será la siguiente:

Figura 2
Nota 1: Como consideración en nuestro diseño, no deberíamos implementar FCF y TAF juntos como mecanismo de failover de conexión para nuestras aplicaciones. Recordemos que TAF es útil cuando son aplicaciones que ejecutan muchas operaciones de lectura.
Nota 2: A partir de la versión Oracle Database 12c, FCF ha sido extendido hacia Oracle Dataguard y Oracle GoldenGate para ODP.NET 12c a través de Global Data Services.
Nota 3: Cuando un servicio de base de datos se detiene de manera manual las conexiones de base de datos que se encuentran en estado de ocio son cerradas y las que aún están en ejecución terminan su operación con normalidad. Este feature llamado (Planned Outage) solo está disponible para ODP.NET Unmanaged Driver.
Nota 4: ODP.NET no soporta la distribución de conexiones de base de datos cuando un nuevo nodo inicia, sin embargo si soporta failover de conexión de base de datos y re-conectarlo al nuevo nodo si lo ve conveniente.
Implementación
Requisitos
Paso 1.- Parámetro AQ_TM_PROCESSES > 0
El parámetro aq_tm_process establece el número de procesos internos utilizados para la gestión de las colas en Oracle AQ.
Debemos recordar que Oracle AQ será el repositorio que tendrá los mensajes FAN que deseamos recoger para ser notificados.
Paso 2.- Habilitamos Advanced Queuing a nuestro servicio de base de datos (Opción –q true).
srvctl modify service –d PRD –s PROD –q true
Procedemos a su validación:
![]() |
Nota: Para la versión Oracle Database 10gR2 podemos modificar el servicio con el siguiente script:
SQL> execute dbms_service.modify_service(service_name=>'PROD',aq_ha_notifications=>true);Paso 3.- Permisos sobre la cola de Oracle AQ sobre eventos FAN.
SQL> execute DBMS_AQADM.GRANT_QUEUE_PRIVILEGE('DEQUEUE','SYS.SYS$SERVICE_METRICS', ' ');
Aquí debemos utilizar el usuario de base de datos con el que nuestra aplicación se conectará. En el ejercicio a desarrollar, el usuario de base de datos que será utilizado por la aplicación para conectarse será: FRICCIO.
Paso 4.- SQLNET.ORA
El archivo SQLNET.ORA ubicado en la estación cliente debemos agregarle las siguientes entradas:
| SQLNET.OUTBOUND_CONNECT_TIMEOUT = 5 (Tiempo en segundos que tiene un cliente para establecer una conexión hacia una instancia de base de datos). SQLNET.TCP.CONNECT_TIMEOUT=3 (Tiempo en segundos para establecer una conexión TCP hacia la base de datos, este valor debe ser menor al parámetro SQLNET.OUTBOUND_CONNECT_TIMEOUT). |
| SQLNET.EXPIRE_TIME=10 (Tiempo en segundos que se realizará un ping a las conexiones de base de datos con la finalidad de identificar conexiones huérfanas). |
La cadena de conexión de base de datos debe contar con una correcta configuración, para nuestro caso hemos registrado la configuración en el archivo app.config.
- Pooling, construirá un pool de conexión si su valor es true.
- Min Pool Size & Max Pool Size, definen la mínima y máxima cantidad de conexiones de base de datos que tendrá el pool creado.
- Validate Connection, valida si una conexión es válida cuando regresa al pool.
- HA Events, permite recibir eventos en nuestra aplicación al recibir ODP.NET un evento FAN.
- Load Balancing, habilita al pool de conexiones balancear las nuevas conexiones que ingresen acorde a cómo está la carga distribuida actualmente entre las instancias de base de datos basándose en los algoritmos definidos por el Load Balance Advisor (LBA) y Connection Load Balancing (CLB). Permitiendo que las aplicaciones reciban conexiones de una instancia que ofrece el mejor desempeño.
- El usuario de base de datos debe ser el mismo que le hemos entregado permisos en la cola de mensajes de AQ descrito en la sección de Requisitos.
Se recomienda la revisión del siguiente URL para obtener mayor información acerca de todas las opciones disponibles en la cadena de conexión:
http://docs.oracle.com/cd/E51173_01/win.122/e17732/featConnecting.htm#ODPNT165
Nota: ODP.NET 12c únicamente está certificado para sistemas operativos Windows Server 2012/2008R2/2008 y Windows 7. Para mayor información o actualización revisar en My Oracle Support (MOS) Nota: 726240.1 (Oracle Data Provider for .NET (ODP) Supported Configurations).
Una vez definida la cadena de conexión de base de datos debemos programar el evento HAEventHandler(OracleHAEventArgs eventArgs), el cual se disparará ni bien se reciba un evento FAN del Oracle RAC.
![]() |
Nuestra aplicación a implementar tendrá como objetivo mostrar la instancia donde se ha establecido la conexión de base de datos y la hora actual en todo momento.
Se presenta todo el código utilizado:
![]() ![]() |
Validando la aplicación:
Al iniciar la aplicación veremos que se ha generado una conexión de base de datos a la instancia PRD1. ![]() En la instancia 1 se evidencia que efectivamente se encuentra la sesión de base de datos. ![]() Luego procedemos a matar la instancia PRD1 con la finaldiad de validar que el failover de conexión se realice automáticamente. Veremos que la aplicación automáticamente comienza a responder sin problemas pero conectado a la instancia PRD2. ![]() En la instancia 2 se evidencia que efectivamente se encuentra la sesión de base de datos. ![]() |
Conclusiones
Se puede apreciar que Oracle FCF complementa nuestras soluciones de Alta Disponibilidad proporcionándonos un failover de conexión de base de datos a nuestras aplicaciones; ocasionando que nuestros usuarios no perciban el incidente ocurrido en la base de datos.
FCF permite que nuestras aplicaciones que utilizan pool de conexiones de base de datos se beneficien enormemente con el feature de carga de balanceo y actualizadas gracias a las notificaciones FAN, haciendo que nuestra aplicación sea más eficiente al ir distribuyendo las conexiones nuevas sobre las instancias más óptimas además que todo requerimiento de base de datos que envié la aplicación será atendida por conexiones que estén conectadas sobre las instancias que ofrecen mejor desempeño.
Operaciones Online en Oracle 12.2 y 18c
Operaciones Online en Oracle 12.2 y 18c
Por Jorge ZorrillaPublicado en Noviembre 2018
Revisado por Francisco Riccio
Introducción
A lo largo de los años, la base de datos Oracle ha ido evolucionando y ofreciendo nuevas opciones para una mejor administración. Las funcionalidades con mayor impacto para la labor de los DBAs han sido las operaciones Online. Gracias a las actividades online, podemos evitar largas ventanas de mantenimiento sobre ambientes productivos en horarios nocturnos o de fin de semana.
Ya desde la versión Oracle 9i tuvimos acceso a operaciones online como:
- CREATE INDEX.
- REBUILD INDEX.
En Oracle 12c Release 1, Oracle continúa mejorando las opciones online y añade nuevas operaciones de gran ayuda como:
- DROP INDEX.
- DROP CONSTRAINT.
- ALTER INDEX UNUSABLE.
- SET COLUMN UNUSED.
- MOVE PARTITION & SUBPARTITION.
Sin embargo, es a partir de Oracle 12c Release 2 donde se agregan las operaciones online de mayor impacto como:
- MOVE TABLE.
- SPLIT & MERGE PARTITION.
- CONVERT NON-PARTITION TABLE TO PARTITION TABLE.
En este artículo quiero explicar en detalle las operaciones online para Oracle 12cR2 y 18c; los casos de uso más comunes y algunas restricciones para cada tipo de operación.
MOVE TABLE ONLINE.
El comando nos permite mover una tabla de manera online agregando la opción ONLINE sobre ALTER TABLE.
Lo mejor de esta operación es que no afecta el estado de los índices; por lo que es posible realizar desfragmentación de tablas sin la necesidad de una ventana de mantenimiento.
Para nuestro ejemplo, creamos una tabla y le agregamos una gran cantidad de datos. Posteriormente creamos su Primary Key y un índice sobre el campo código.
SQL> create table music.BEATLES (id number, codigo number, fec_registro date, miembro varchar2(42)) tablespace USERS; Table created. SQL> insert into music.BEATLES ( select rownum, mod(rownum,1000), sysdate - mod(rownum,100), decode(mod(rownum,10),1,'PAUL',2,'JOHN',3,'RINGO',4,'GEORGE',5,'STUART',6,'PETE',7,'NORMAN', 8,'TOMMY',9,'JIMMIE','THE BEATLES') from dual connect by level <= 1700000); 1700000 rows created. SQL> commit; Commit complete.
SQL> alter table music.BEATLES ADD CONSTRAINT PK_BEATLES PRIMARY KEY (id); Table altered. SQL> create index music.IDX1_BEATLES on music.BEATLES (codigo) tablespace USERS; Index created.
Finalmente verificamos las características de la tabla y sus índices.
SQL> select owner, table_name, tablespace_name from dba_tables where table_name='BEATLES'; OWNER TABLE_NAME TABLESPACE_NAME COMPRESS ------- -------------- ---------------- -------- MUSIC BEATLES USERS DISABLED SQL> select OWNER,INDEX_NAME,STATUS, CLUSTERING_FACTOR, NUM_ROWS, TABLESPACE_NAME from dba_indexes where table_name='BEATLES'; OWNER INDEX_NAME STATUS CLUSTERING_FACTOR NUM_ROWS TABLESPACE_NAME ------- -------------- -------- ----------------- ---------- ---------------- MUSIC PK_BEATLES VALID 6800 1700000 USERS MUSIC IDX1_BEATLES VALID 1700000 1700000 USERS
Procedemos a realizar el movimiento de la tabla al tablespace DATA y verificamos que los índices se mantienen validos después del movimiento.
SQL> ALTER TABLE music.BEATLES MOVE ONLINE tablespace DATA; Table altered. SQL> select owner, table_name, tablespace_name from dba_tables where table_name='BEATLES'; OWNER TABLE_NAME TABLESPACE_NAME -------- -------------- ---------------- MUSIC BEATLES DATA SQL> select OWNER,INDEX_NAME,STATUS, CLUSTERING_FACTOR, NUM_ROWS, TABLESPACE_NAME from dba_indexes where table_name='BEATLES'; OWNER INDEX_NAME STATUS CLUSTERING_FACTOR NUM_ROWS TABLESPACE_NAME -------- -------------- -------- ----------------- ---------- -------- MUSIC PK_BEATLES VALID 13524 1700000 USERS MUSIC IDX1_BEATLES VALID 1579897 1700000 USERS
Podemos utilizar el movimiento de una tabla de manera Online para activar la compresión e incluir la reconstrucción de los índices (sobre diferentes tablespaces). Todo ejecutado desde el mismo comando con la opción UPDATE INDEXES.
SQL> ALTER TABLE music.BEATLES MOVE ONLINE COMPRESS tablespace DATA
UPDATE INDEXES (
music.PK_BEATLES tablespace DATA,
music.IDX1_BEATLES tablespace USERS);
Table altered.
SQL> select owner, table_name, tablespace_name,COMPRESSION from dba_tables where
table_name='BEATLES';
OWNER TABLE_NAME TABLESPACE_NAME COMPRESS
--------- ------------- ------------------ --------
MUSIC BEATLES DATA ENABLED
SQL> select OWNER,INDEX_NAME,STATUS, CLUSTERING_FACTOR, NUM_ROWS, TABLESPACE_NAME from
dba_indexes where table_name='BEATLES';
OWNER INDEX_NAME STATUS CLUSTERING_FACTOR NUM_ROWS TABLESPACE_NAME
-------- -------------- -------- ----------------- ---------- ---------------
MUSIC PK_BEATLES VALID 10846 1700000 DATA
MUSIC IDX1_BEATLES VALID 1386859 1700000 USERS
Finalmente podemos reorganizar la tabla de tal manera que valor de Clustering Factor se reduzca para columnas indexadas (diferentes al Primary Key). Utilizamos el concepto de CLUSTERING ATTRIBUTE.
SQL> alter table music.BEATLES ADD CLUSTERING by linear order(codigo) without materialized zonemap; Table altered. SQL> alter table music.BEATLES MOVE ONLINE NOCOMPRESS tablespace DATA UPDATE INDEXES; Table altered. SQL> select OWNER,INDEX_NAME,STATUS, CLUSTERING_FACTOR, NUM_ROWS, TABLESPACE_NAME from dba_indexes where table_name='BEATLES'; OWNER INDEX_NAME STATUS CLUSTERING_FACTOR NUM_ROWS TABLESPACE_NAME -------- -------------- -------- ----------------- ---------- --------------- MUSIC PK_BEATLES VALID 1687292 1700000 DATA MUSIC IDX1_BEATLES VALID 6140 1700000 USERS
Es importante indicar que el movimiento de tablas Online tiene las siguientes restricciones:
- No es posible ejecutar este comando sobre tablas particionada de tipo IOT y tablas que contengan índices de tipo Domain.
- No se puede realizar DML con paralelismo e inserciones masivas (direct path) mientras se ejecuta el movimiento Online.
- No es posible ejecutar este comando para tablas de tipo IOT con columnas LOB, VARRAY o de tipo User-Defined.
CONVERTIR NON-PARTITIONED TABLE TO PARTITIONED TABLE.
En versiones anteriores es posible convertir una tabla no particionada a particionada con comandos como Exchange Partition o DBMS_Redefinition, sin embargo, estos métodos pueden llegar a ser complejos y con validaciones previas a la conversión.
A partir de Oracle 12cR2 es posible convertir una tabla no particionada a particionada a través de un solo comando y de manera Online. Podemos definir diferentes características para cada partición que se vaya a crear.
SQL> alter table music.BEATLES MODIFY PARTITION BY RANGE (fec_registro) (
partition T1_07_2018 values less than (TO_DATE('01-AUG-2018','DD-MON-YY
YY')) tablespace USERS COMPRESS,
partition T2_08_2018 values less than (TO_DATE('01-SEP-2018','DD-MON-YY
YY')) tablespace DATA RESULT_CACHE (mode default),
partition T3_09_2018 values less than (TO_DATE('01-OCT-2018','DD-MON-YY
YY')) tablespace USERS,
partition T4_10_2018 values less than (TO_DATE('01-NOV-2018','DD-MON-YY
YY')) tablespace DATA
) ONLINE;
Table altered.
Si la tabla contiene índices, es posible definir el particionamiento de cada índice con la opción UPDATE INDEXES. Si esta opción no se define (como en el comando anterior) los índices son redefinidos de la siguiente manera:
- Índices NonUnique se convierten en LOCAL INDEXES.
- Índices Unique y que forman parte del rango de partición se convierten en LOCAL INDEXES.
- Índices Unique y que no forman parte del rango de partición se convierten en GLOBAL INDEXES.
Para nuestro ejemplo vamos a definir diferentes tipos de particionamiento por cada índice.
SQL> alter table music.BEATLES MODIFY PARTITION BY RANGE (fec_registro) (
partition T1_07_2018 values less than (TO_DATE('01-AUG-2018','DD-MON-YY
YY')) tablespace USERS READ ONLY,
partition T2_08_2018 values less than (TO_DATE('01-SEP-2018','DD-MON-YY
YY')) tablespace DATA READ ONLY,
partition T3_09_2018 values less than (TO_DATE('01-OCT-2018','DD-MON-YY
YY')) tablespace USERS,
partition T4_10_2018 values less than (TO_DATE('01-NOV-2018','DD-MON-YY
YY')) tablespace DATA
) ONLINE
UPDATE INDEXES(
music.PK_BEATLES GLOBAL PARTITION BY HASH (ID) PARTITIONS 4,
music.IDX1_BEATLES LOCAL
);
Table altered.
Finalmente es posible tomar solo una parte de la información de la tabla para el particionamiento. Usamos la opción INCLUDING ROWS. Esta opción borra los registros que no cumplen con la condición definida.
Para nuestro ejemplo vamos a particionar la tabla, pero solo incluimos los valores a partir de agosto 2018. Se puede observar que los valores antes de dicha fecha son eliminados de la tabla.
SQL> alter table music.BEATLES MODIFY PARTITION BY RANGE (fec_registro) (
partition T2_08_2018 values less than (TO_DATE('01-SEP-2018','DD-MON-YY
YY')) tablespace DATA COMPRESS,
partition T3_09_2018 values less than (TO_DATE('01-OCT-2018','DD-MON-YY
YY')) tablespace USERS,
partition T4_10_2018 values less than (TO_DATE('01-NOV-2018','DD-MON-YY
YY')) tablespace USERS
) ONLINE
UPDATE INDEXES(
music.PK_BEATLES GLOBAL,
music.IDX1_BEATLES LOCAL
)
INCLUDING ROWS WHERE fec_registro >= TO_DATE('01-AUG-2018','DD-MON-YYYY');
Table altered.
SQL> select fec_registro, count(1)
from music.BEATLES
where fec_registro < TO_DATE('01-AUG-2018','DD-MON-YYYY')
group by fec_registro;
no rows selected
La conversión a tabla particionada de manera Online también tiene algunas restricciones como:
- No es posible ejecutar este comando sobre tablas de tipo IOT.
- No se pude utilizar el comando sobre tablas que poseen índices de tipo Domain.
- No es posible particionar una tabla hija de tipo Reference-Partitioned de manera Online.
MERGE & SPLIT ONLINE
Una vez que se tiene una tabla particionada, es posible realizar tareas de mantenimiento como MERGE o SPLIT de manera online.
Estas operaciones requieren de un bloqueo de tipo X DML sobre las particiones involucradas, es por ello que ambas operaciones son completadas sólo cuando todos los DML, iniciados antes de la operación online, finalizan.
Verificamos las particiones de nuestra tabla.
SQL> select TABLE_OWNER, TABLE_NAME, PARTITION_NAME,PARTITION_POSITION, NUM_ROWS from dba_tab_partitions where TABLE_NAME='BEATLES'; TABLE_OWNE TABLE_NAME PARTITION_ PARTITION_POSITION NUM_ROWS ---------- -------------------- ---------- ------------------ ---------- MUSIC BEATLES T1_07_2018 1 510000 MUSIC BEATLES T2_08_2018 2 527000 MUSIC BEATLES T3_09_2018 3 510000 MUSIC BEATLES T4_10_2018 4 153000
Desde la versión Oracle 12cR1 es posible realizar SPLIT y MERGE de múltiples particiones. A partir de Oracle 12cR2 es posible realizar dichas operaciones múltiples de manera Online.
La operación SPLIT se puede realizar Online a partir de Oracle 12cR2, mientras que la operación MERGE solo se puede realizar de manera Online a partir de la versión 18c.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> alter table music.BEATLES
MERGE PARTITIONS T1_07_2018, T2_08_2018 INTO PARTITION T12_07_08_2018
ONLINE UPDATE INDEXES;
ONLINE UPDATE INDEXES
*
ERROR at line 3:
ORA-14020: this physical attribute may not be specified for a table partition
SQL> alter table music.BEATLES
MERGE PARTITIONS T1_07_2018, T2_08_2018 INTO PARTITION T12_07_08_2018;
Table altered.
SQL> alter table music.BEATLES SPLIT PARTITION T12_07_08_2018 at (TO_DATE(
'01-AUG-2018','DD-MON-YYYY'))
INTO (PARTITION T1_07_2018, PARTITION T2_08_2018)
ONLINE UPDATE INDEXES;
Table altered.
Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.1.0.0.0
SQL> alter table music.BEATLES
MERGE PARTITIONS T1_07_2018, T2_08_2018 INTO PARTITION T12_07_08_2018
ONLINE UPDATE INDEXES;
Table altered.
EXTRA: MOVE DATAFILE ONLINE
La opción de mover datafiles de manera Online es una funcionalidad presente desde la versión Oracle 12c Release 1, sin embargo, me pareció importante agregarla como una funcionalidad extra debido su importancia en tareas de mantenimiento como:
- Migración de Filesystem a ASM o viceversa.
- Reorganización de datafiles en diferentes Filesystems o Diskgroups.
SQL> alter database move datafile '+DATA/APEXDB/DATAFILE/sysaux.304.977269941' to '/u02/oradata/apexdb/sysaux_01.dbf'; Database altered. SQL> alter database move datafile '/u02/oradata/apexdb/sysaux_01.dbf' to '+DATA'; Database altered.
- Renombramiento de datafiles.
SQL> alter database move datafile '+DATA/APEXDB/DATAFILE/data.263.989013263' to '+DATA/APEXDB/DATAFILE/DATA_01.dbf'; Database altered.
ORA-03113 - ORA-00205
Para solucionarlo, iniciaremos la base de datos en modo nomount con:
startup nomount
Y cambiaremos su estado a mount con:
alter database mount;

A continuación haremos un clear para cada grupo de archivelog de nuestra base de datos, ejecutando:
alter database clear unarchived logfile group 1;
alter database clear unarchived logfile group 2;
alter database clear unarchived logfile group 3;
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 3 UNRECOVERABLE DATAFILE;
shutdown immediate;
Una vez detenida la iniciaremos de forma normal con el comando:
startup;

ASM FLEX CLUSTER ODA
The prerequisites are that the OCR files, ASM parameter file and ASM password file are stored in an ASM disk group with asm.compatible set to at least 12.1. We will confirm the ASM cluster mode before we begin and after we have finished.
[oracle@h1-o12-cl1 ~]$ . oraenv ORACLE_SID = [oracle] ? +ASM1 The Oracle base remains unchanged with value /u01/app/oracle [oracle@h1-o12-cl1 ~]$ asmcmd showclustermode ASM cluster : Flex mode disabled
Oracle Database 12.2: Reportes AWR a nivel PDB
Oracle Database 12.2: Reportes AWR a nivel PDB
Por Sebastián D’Alessandro
Publicado en Febrero 2018
Revisado por Lorenzo Mota
Introducción
Desde su aparición en Oracle Database 10g, Automatic Workload Repository (AWR) ha ido evolucionando constantemente con el correr de las versiones.Oracle 12c introdujo un gran cambio en la arquitectura de la base de datos incorporando el concepto de “multitenant”. En el primer release de 12c, los reportes de AWR solamente pueden ser generados a nivel “Container Database” (CDB). Esto nos impide, en cierta manera, poder analizar en profundidad el comportamiento de determinadas PDBs puntuales.
La versión 12.2 introduce una notable mejora en AWR, la capacidad de poder correr snapshots tanto a nivel CDB como de PDB cuando trabajamos en ambientes “multitenant”.
Esta nueva característica nos permite un diagnóstico más granular de problemas de performance focalizados en una PDB en particular, situación que resulta sumamente interesante y útil en soluciones DBaaS donde se espera que el rol de DBA tienda a ser el de un “pDBA” ( Pluggable Database Administrator), es decir un DBA responsable de la administración de una o varias PDBs en particular, pero que a nivel físico comparten recursos con otras en el mismo CDB.
Los reportes AWR a nivel PDB, están basados en la recolección de estadísticas que resultan útiles para evaluar el desempeño de una “Pluggable Database”, estos datos son recopilados siempre y cuando dicha PDB esté abierta en la base de datos “Container” (CDB) al momento de la toma del snapshot.
La información de AWR a nivel CDB es almacenada en el tablespace SYSAUX del CDB$ROOT y los snapshots de cada PDB en su correspondiente tablespace SYSAUX.
Podríamos decir entonces, que a partir de ahora tenemos en “multitenant” dos niveles de visualización e información en los reportes de AWR, uno a nivel general de “Container” y otro particular para cada PDB.
Los snapshots a nivel CDB incluyen estadísticas correspondientes al CDB, adicionando además información de todas las PDBs que éste contiene, por ejemplo: “ASH”, “SQL statistics”, “file statistics”, etc.
A nivel PDB, los snapshots de AWR recopilan estadísticas de la “Pluggable Database” y suman también algunas estadísticas globales que pueden resultar útiles para el diagnóstico de problemas puntuales en esa base de datos. El administrador de la PDB puede realizar determinadas operaciones de gestión a ese nivel, por ejemplo configurar el periodo de retención, agendar y depurar snapshots, realizar capturas manuales, etc.
Algunas tareas de administración de snapshots a nivel CDB o PDB, como por ejemplo creación y depuración, pueden ser realizadas tanto de forma “manual” como “automática”.
En un ambiente “multitenant”, podemos entonces crear manualmente snapshots en cualquiera de los dos niveles según sea necesario.
En este artículo, vamos a ejemplificar operaciones de captura de snapshots y generación de reportes utilizando un “Container Database” llamado CDB12CR2 el cual contiene dentro una PDB con nombre PDB12CR2.
La siguiente salida muestra la estructura de la misma con sus correspondientes IDs:
SQL> select name, con_id, dbid, con_uid, guid from v$containers
order by con_id;
NAME CON_ID DBID CON_UID GUID
-------- ---------- ---------- ---------- --------------------------------
CDB$ROOT 1 2233049298 1 4700A987085A3DFAE05387E5E50A8C7B
PDB$SEED 2 806654536 806654536 4B07A0A8F95D27C7E053B800A8C0A206
PDB12CR2 3 2086124034 2086124034 4B07B077947A2E0AE053B800A8C0F1F0
Por defecto, los snapshots automáticos de AWR sólo están configurados para correr a nivel CDB. Oracle recomienda que en los PDBs sean ejecutados de forma manual, y sólo en los intervalos de tiempo donde sea necesario realizar el análisis (ver nota Doc ID 2295998.1 de MOS).
No obstante esto, es posible automatizar “captura” en las PBDs configurando el parámetro AWR_PDB_AUTOFLUSH_ENABLED en TRUE (por defecto se encuentra deshabilitado).
Generación de snapshots
Veamos entonces como realizar la toma de snapshots AWR utilizando ambos métodos (automático y manual):
1-Método Automático:
1) Configuramos primero el parámetro awr_pdb_autoflush_enabled=true a nivel PDB:
Nos conectamos a la PDB:
SQL> alter session set container=PDB12CR2; Session altered.
Verificamos el valor del parámetro:
SQL> show parameter awr_pdb_autoflush_enabled NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ awr_pdb_autoflush_enabled boolean FALSE
Modificamos el valor:
SQL> alter system set awr_pdb_autoflush_enabled=true; System altered. SQL> show parameter awr_pdb_autoflush_enabled NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ awr_pdb_autoflush_enabled boolean TRUE
2) Configuramos correctamente el intervalo de los snapshots de AWR (Si bien esto es algo que no está muy difundido en notas técnicas, resulta un aspecto crítico):
SQL> select * from cdb_hist_wr_control; DBID SNAP_INTERVAL RETENTION TOPNSQL CON_ID ---------- ----------------- ----------------- -------- ------ 2086124034 +40150 00:01:00.0 +00008 00:00:00.0 DEFAULT 3 SQL> execute dbms_workload_repository.modify_snapshot_settings(interval => 60); PL/SQL procedure successfully completed. SQL> select * from cdb_hist_wr_control; DBID SNAP_INTERVAL RETENTION TOPNSQL CON_ID ---------- ----------------- ----------------- -------- ------ 2086124034 +00000 01:00:00.0 +00008 00:00:00.0 DEFAULT 3
3) Establecemos también AWR_SNAPSHOT_TIME_OFFSET en 1000000 para evitar problemas de performance cuando múltiples “Pluggable Databases” estén creando snapshots en simultáneo.
Podemos ver más información en la documentación: “Oracle Database 12c Release 2 Database Reference (1.26 AWR_SNAPSHOT_TIME_OFFSET)”
http://docs.oracle.com/database/122/REFRN/AWR_SNAPSHOT_TIME_OFFSET.htm#REFRN10325
Debemos tener en cuenta que esta modificación hay que realizarla a nivel del CDB$ROOT.
SQL> alter session set container=CDB$ROOT; Session altered. SQL> alter system set AWR_SNAPSHOT_TIME_OFFSET=1000000; System altered.
4) Finalmente, al ya estar configurada la ejecución automática, debemos esperar 1-2 horas para que los “snaps” sean tomados. Luego, si podemos generar un reporte.
SQL> select SNAP_ID, DBID, STARTUP_TIME, BEGIN_INTERVAL_TIME, END_INTERVAL_TIME, CON_ID
from awr_pdb_snapshot;
SNAP_ID DBID STARTUP_TIME BEGIN_INTERVAL_TIME
END_INTERVAL_TIME, CON_ID
---------- ---------- ------------------------------ ------------------------------
------------------------------ ----------
1 2086124034 04-JAN-18 08.53.03.000 AM 04-JAN-18 03.35.35.929 PM
04-JAN-18 03.52.44.978 PM 3
2 2086124034 04-JAN-18 08.53.03.000 AM 04-JAN-18 03.52.44.978 PM
04-JAN-18 04.54.52.399 PM 3
2-Método Manual:
1) Nos conectamos a la PDB:
SQL> connect / as sysdba Connected. SQL> alter session set container= PDB12CR2; Session altered.
2) Ejecutamos el procedimiento para la creación manual del snapshot:
SQL> exec dbms_workload_repository.create_snapshot(); PL/SQL procedure successfully completed.
En la siguiente salida podemos ver el “snap” generado:
SNAP_ID DBID STARTUP_TIME BEGIN_INTERVAL_TIME
END_INTERVAL_TIME CON_ID
---------- ---------- ------------------------------ ------------------------------
------------------------------ ----------
1 2086124034 04-JAN-18 08.53.03.000 AM 04-JAN-18 03.35.35.929 PM
04-JAN-18 03.52.44.978 PM 3
2 2086124034 04-JAN-18 08.53.03.000 AM 04-JAN-18 03.52.44.978 PM
04-JAN-18 04.54.52.399 PM 3
3 2086124034 04-JAN-18 08.53.03.000 AM 04-JAN-18 04.54.52.399 PM
04-JAN-18 04.57.02.760 PM 3
Es importante tener en cuenta que los ID de snapshots generados a nivel PDB, pueden llegar a diferir de los generados en el CDB cuando la captura a nivel PDB es realizada de forma manual.
Podemos ver entonces los datos de AWR a nivel CDB en las vistas AWR_ROOT_xxx y a nivel PDB (“Pluggable Databases” abiertas en el momento de la captura del snapshot) en las vistas AWR_PDB_xxx;
Una PDB tiene la capacidad de poder transportar sus propios datos de AWR cuando se realiza una operación de “unplug/plug” desde un CDB a otro. Los “Container Databases” targets tiene la capacidad de diferenciar entre los datos antiguos de AWR (que son transportados junto con la PDB) y los nuevos datos AWR capturados después de la operación de “plug”.
Los “snaps” propios de una PDB tienen un ID único, el cual no está relacionado con los snapshots del CDB.
De esta manera las operaciones de “pluging” y “unpluging” de una PDB en un “Container Database” no afectan la información de AWR almacenada en la PDB.
Gestión de la seguridad
El administrador del CDB, si lo cree conveniente, puede llegar a utilizar “PDB lockdown profiles” para deshabilitar la funcionalidad de AWR en una o varias PDBs puntuales.
La manera de realizar esto, es ejecutando la siguiente sentencia en la PDB :
SQL> alter lockdown profile profile_name disable feature=('AWR_ACCESS');
Una vez deshabilitada la funcionalidad en una PDB, ya no se podrán realizar operaciones relacionadas con snapshots en ella.
Si se requiere habilitar nuevamente AWR a nivel PDB, se debe ejecutar la sentencia que mostramos a continuación:
SQL> alter lockdown profile profile_name enable feature=('AWR_ACCESS');
Generación de reportes AWR
Existen varias maneras de obtener un reporte de AWR, tanto a nivel CDB como PDB. La dos principales son utilizando “Cloud Control” y los scripts correspondientes provistos durante la instalación del motor.
En nuestro caso veremos ejemplos de cómo utilizar los scripts desde línea de comando.
Tal como mencionamos anteriormente, podemos generar reportes tanto a nivel CDB como PDB. El informe AWR obtenido en un PDB, no difiere mucho a un reporte que haya sido generado en la CDB original. Simplemente la información que contiene está acotada a esa base de datos en particular.
Veamos primero como se genera un reporte a nivel CDB (Similar a 12cR1).
Generación del reporte en el CDB:
Nos conectamos al root del CDB y ejecutamos el script “awrrpt”.
Principalmente debemos indicar:
- Tipo de reporte: (tenemos tres opciones):
- 'html': HTML format (default)
- 'text': Text format
- 'active-html': Includes Performance Hub active report
- Intervalo de “snaps” a utilizar
- Nombre del reporte
SQL> @?/rdbms/admin/awrrpt
Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
AWR reports can be generated in the following formats. Please enter the
name of the format at the prompt. Default value is 'html'.
'html' HTML format (default)
'text' Text format
'active-html' Includes Performance Hub active report
Enter value for report_type: html
old 1: select 'Type Specified: ',lower(nvl('&&report_type','html')) report_type from dual
new 1: select 'Type Specified: ',lower(nvl('html','html')) report_type from dual
Type Specified: html
old 1: select '&&report_type' report_type_def from dual
new 1: select 'html' report_type_def from dual
old 1: select '&&view_loc' view_loc_def from dual
new 1: select 'AWR_PDB' view_loc_def from dual
Current Instance
~~~~~~~~~~~~~~~~
DB Id DB Name Inst Num Instance Container Name
-------------- -------------- -------------- -------------- --------------
2233049298 CDB12CR2 1 cdb12cr2 CDB$ROOT
Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB Id Inst Num DB Name Instance Host
------------ ---------- --------- ---------- ------
* 2233049298 1 CDB12CR2 cdb12cr2 server01.loc
Using 2233049298 for database Id
Using 1 for instance number
Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n)days of snapshots being listed. Pressing without
specifying a number lists all completed snapshots.
Enter value for num_days:
Listing all Completed Snapshots
Instance DB Name Snap Id Snap Started Snap Level
------------ ------------ ---------- ------------------ ----------
cdb12cr2 CDB12CR2 18 03 Jan 2018 10:13 1
19 03 Jan 2018 11:00 1
20 03 Jan 2018 11:54 1
21 03 Jan 2018 13:00 1
22 03 Jan 2018 14:00 1
23 03 Jan 2018 15:00 1
24 03 Jan 2018 16:00 1
25 03 Jan 2018 17:00 1
26 03 Jan 2018 18:00 1
27 03 Jan 2018 19:00 1
28 04 Jan 2018 09:04 1
29 04 Jan 2018 10:00 1
30 04 Jan 2018 11:00 1
31 04 Jan 2018 12:00 1
32 04 Jan 2018 13:00 1
33 04 Jan 2018 14:00 1
34 04 Jan 2018 15:00 1
35 05 Jan 2018 05:59 1
36 05 Jan 2018 08:11 1
37 05 Jan 2018 09:00 1
38 05 Jan 2018 10:00 1
39 05 Jan 2018 11:00 1
40 05 Jan 2018 12:00 1
41 05 Jan 2018 13:01 1
42 05 Jan 2018 14:00 1
43 05 Jan 2018 15:00 1
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 42
Begin Snapshot Id specified: 42
Enter value for end_snap: 43
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is awrrpt_1_42_43.html. To use this name,
press to continue, otherwise enter an alternative.
Enter value for report_name: cdb12cr2_42_43.html
#######
####### < parte de la salida suprimida >
#######
Report written to cdb12cr2_42_43.html
SQL>
Generación a nivel PDB:
En el reporte a nivel PDB, la cabecera del mismo identifica la PDB desde la cual se está emitiendo el reporte. Además como ocurre en los reportes tradicionales, se indica cuáles son los snapshots involucrados, los que en este caso corresponden a la “pluggable” y no al “root”.
Los snapshosts pueden ser mantenidos (creados y depurados) de la misma manera que ocurre con los snapshots del CDB.
Es importante aclarar, que la información relacionada con los snaps de AWR para la PDB se encuentra en la vista AWR_PDB_SNAPSHOT y no en la DBA_HIST_SNAPSHOT.
Para le generación del reporte, es necesario estar explícitamente conectado a la PDB en cuestión:
Procedimiento
Nos conectamos primero a la PDB:
SQL> alter session set container= PDB12CR2; Session altered.Verificamos:
SQL> show con_name NAME_COL_PLUS_PDB_CONTAINER ------------------------------------------------------------------------------ PDB12CR2
Luego ejecutamos el script de generación al igual que en el caso anterior:
Nuevamente indicamos los tres datos principales que nos son solicitados:
- Tipo de reporte:
- 'html': HTML format (default)
- 'text': Text format
- 'active-html': Includes Performance Hub active report
- Intervalo de snaps
- Nombre del reporte.
En la Figura 1 vemos de que forma nos es requerida esa especificación:
Specify the location of AWR Data
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AWR_ROOT - Use AWR data from root (default)
AWR_PDB - Use AWR data from PDB
Enter value for awr_location: AWR_PDB
Figura 1. Indicar “location” de los datos de AWR en AWR_PDB
Ejecutamos el script awrrpt:
SQL> @?/rdbms/admin/awrrpt Specify the Report Type ~~~~~~~~~~~~~~~~~~~~~~~ AWR reports can be generated in the following formats. Please enter the name of the format at the prompt. Default value is 'html'. 'html' HTML format (default) 'text' Text format 'active-html' Includes Performance Hub active report Enter value for report_type: html Type Specified: html Specify the location of AWR Data ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ AWR_ROOT - Use AWR data from root (default) AWR_PDB - Use AWR data from PDB Enter value for awr_location: AWR_PDB Location of AWR Data Specified: AWR_PDB Current Instance ~~~~~~~~~~~~~~~~ DB Id DB Name Inst Num Instance Container Name -------------- -------------- -------------- -------------- -------------- 2086124034 CDB12CR2 1 cdb12cr2 PDB12CR2 Root DB Id Container DB Id AWR DB Id --------------- --------------- --------------- 2233049298 2086124034 2086124034 Instances in this Workload Repository schema ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DB Id Inst Num DB Name Instance Host ------------ ---------- --------- ---------- ------ 2086124034 1 CDB12CR2 cdb12cr2 server01.loc Using 2086124034 for database Id Using 1 for instance number Specify the number of days of snapshots to choose from ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Entering the number of days (n) will result in the most recent (n) days of snapshots being listed. PressingNota: En el caso que la PDB desde la cual queremos emitir el reporte no se encuentre abierta, recibiremos el siguiente error:without specifying a number lists all completed snapshots. Enter value for num_days: 1 Listing the last day's Completed Snapshots Instance DB Name Snap Id Snap Started Snap Level ------------ ------------ ---------- ------------------ ---------- cdb12cr2 CDB12CR2 4 04 Jan 2018 15:35 1 5 04 Jan 2018 15:52 1 6 04 Jan 2018 16:04 1 7 04 Jan 2018 16:11 1 Specify the Begin and End Snapshot Ids ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Enter value for begin_snap: 6 Begin Snapshot Id specified: 6 Enter value for end_snap: 7 End Snapshot Id specified: 7 Specify the Report Name ~~~~~~~~~~~~~~~~~~~~~~~ The default report file name is awrrpt_1_6_7.html. To use this name, press to continue, otherwise enter an alternative. Enter value for report_name: pdb12cr2_6_7.html #### #### < parte de la salida suprimida > #### Report written to pdb12cr2_6_7.html
ERROR at line 59: ORA-06550: line 59, column 52: PL/SQL: ORA-01219: database or pluggable database not open: queries allowed on fixed tables or views only ORA-06550: line 56, column 5: PL/SQL: SQL Statement ignored SP2-0556: Invalid file name.
Para extraer el reporte AWR debemos abrirla. Esto lo hacemos de la siguiente manera:
SQL> alter pluggable database open;
Verificación de los reportes generados:
Una vez terminada la ejecución del script (o el método de generación que hayamos elegido) vamos a tener nuestro reporte en el formato seleccionado.
Reporte a nivel CDB:
En el caso de un reporte a nivel CDB, no vamos a encontrar modificaciones significativas con respecto a versiones anteriores.
Podemos ver que nos indica que se trata del “root container” y nos muestra el correspondiente “container DB ID”. También vemos que los snap Id corresponden a los tomados en el CDB (Figura 2). Una novedad en la salida del reporte, la encontramos en la sección “SQL Statistics” (Figura 3) donde por cada diferente lista se incluye la columna “PDB Name” indicando justamente a que PDB corresponde el SQL (Figura 4).
Figura 2. Cabecera de reporte AWR a nivel CDB.
Figura 3. Sección “SQL Statistics” en reporte AWR.
Figura 4. En cada opción de “SQL Statistics” se puede ver la nueva columna “PDB Name”.
Reporte a nivel PDB:
En el caso del reporte generado en la PDB, fundamentalmente veremos que se indica que se trata de un reporte AWR de PDB, podemos ver también en la cabecera el nombre del CDB, y la PDB (indicada como “container”) y su correspondiente “container DBID” (Figura 5).
El resto de los datos del “header” son bastante generales y no difieren mucho.
Más abajo en el reporte, podemos ver de cual servicio se trata, en este caso pdb12cr2.localdomain (Figura 6).
Figura 5. Cabecera de reporte AWR a nivel PDB.
Figura 6. Sección “Service Statistics”. Se puede ver que se trata de la PDB únicamente.
Conclusión:
AWR es una de las principales herramientas para realizar el “thoubleshooting” de performance en una base de datos Oracle. La versión 12c introdujo el concepto de “multitenant”, un cambio muy grande a nivel arquitectura. La capacidad de poder compartir la instancia por varias bases de datos y aplicaciones diferentes trae consigo innumerables beneficios, pero también cierta complejidad a la hora de analizar y determinar el origen de problemas de rendimiento. El release 2 de Oracle Database 12c mejora mucho este aspecto, incorporando entre otras cosas la posibilidad de capturar datos y generar reportes AWR a nivel “Pluggable Database”.
Suscribirse a:
Entradas (Atom)








