9:42
2024-02-06 10:11:16
6:47
2024-02-06 10:22:16
5:15
2024-02-06 10:31:49
3:57
2024-02-06 10:38:48
17:59
2024-02-06 10:43:27
1:06
2024-02-06 11:12:41
10:20
2024-02-06 11:15:29
2:42
2024-02-06 11:26:39
11:03
2024-02-06 12:01:53
1:16
2024-02-06 12:14:47
42:32
2024-02-06 12:19:55
10:32
2024-02-07 10:25:03
4:02
2024-02-07 10:39:09
1:54:16
2024-02-07 10:45:07
2:11:58
2024-02-07 20:24:23
11:55
2024-02-08 10:29:34
15:14
2024-02-08 10:43:38
3:39
2024-02-08 11:02:01
1:28:10
2024-02-08 11:14:14
1:31:21
2024-02-08 21:37:16
2:33:55
2024-02-09 09:35:00
15:39
2024-02-09 12:49:52
1:17:31
2024-02-12 09:26:50
36:07
2024-02-12 10:56:05
8:43
2024-02-13 12:48:13
3:05
2024-02-14 10:23:00
Visit the Oracle Database 19c: Administration course recordings page
United Arab Emirates - Oracle Database 19c Security
WEBVTT--> listo, entonces ya todos tienen el comando y demás, bien, entonces a ver ya también --> puse el pomodoro, vamos a hacer una pequeña, pues no práctica, es un ejercicio nada más --> como para que quede un poquito ya más cerrado este tema, sale, vamos a hacer este, vamos --> a hacer un ejercicio, vamos a poner aquí los digamos las instrucciones y básicamente --> vamos a hacer igual, el objetivo es hacer un audit, este, se tiene que registrar sobre --> la misma tabla que estamos usando, que se llama, ahí donde está la tabla, acá está, --> DDL audit, vamos a registrar ahí en esa misma tabla, sobre, pero cuando se haga un comando --> de manipulación, un DML, vamos a ver si eso funciona, cuando se haga un DML sobre --> la misma base de datos, este, vamos a ejecutar el trigger, vamos a crear un nuevo trigger, --> va, el trigger se debe de llamar así, pero nada más aquí, DML, va, entonces ese audit --> DML lo que debe hacer es que después de que se ejecute un DML, podemos insertar --> sobre esta misma tabla de audit el registro, va, después del trigger hacemos un ejemplo --> y es que se ve ahí como un registro, sale, entonces no sé si tengan alguna duda con --> lo que hay que hacer, va, entonces adelante, ahí lo vamos haciendo y si alguien necesita --> ayuda, me avisa, yo aquí voy a estar monitoreando y lo vamos viendo, va, adelante, sí, Síjaro, --> dime, crear uno nuevo, correcto, sí, correcto, como va a auditar en la misma tabla, los --> campos deben ser los mismos, vamos a ocupar la misma tabla, lo que va a cambiar es un --> poquito el disparador, aquí en este ejemplo ustedes son libres de ocupar Google para --> por si necesitan, o sea, lo que hay que ver, lo que hay que investigar es como un --> poquito tarea de investigación, cómo crear este disparador, este disparador actúa --> sobre los DDL, lo que necesitamos hacer es que se haga pero a través de los comandos --> del tipo DML, ahorita vamos a dar todos la respuesta pero nada más es como para que --> podamos irnos metiendo más como en el mundo del tema del trigger, aquí pueden hacer --> uso de internet, de Google para más que nada es ir buscando cómo disparar el trigger, --> y de todos modos yo ahorita ya voy agregando en la presentación la solución, va, para --> adelante quien lo habló, me habló Harold, correcto, esa es una muy buena pregunta, es --> este, ahí el trigger, el trigger de DML que nosotros hicimos, perdóname, el de DDL, --> de definición, es un trigger que se puede definir a nivel global, ya no estoy compartiendo --> este, bueno es que ahorita voy a juntar ya la solución, pero bueno, a ver, voy a abrir --> rápidamente el IDE para no, no este, es que le puse el Mute porque hay música aquí ahorita, --> pero bueno, a ver este trigger que nosotros hicimos, si se fijan el disparador es la --> clave, en este caso estamos haciendo un trigger y por los comandos DDL se puede --> hacer a nivel global, no, a nivel global sobre la base de datos cada vez que nosotros --> encontremos un comando, más bien una instrucción SQL de este tipo, se va a disparar, como bien --> pregunta Harold, para un comando de DML esto no existe, no, un comando de DML es un comando --> de manipulación de información, por ejemplo puedo hacer un insert, un select, un update, --> un delete, eso es DML, comandos de manipulación de información, entonces esos comandos no --> se pueden aplicar a nivel general porque, digamos que los triggers se tendrían que --> ejecutar sobre cada operación en específico, entonces aquí ustedes haciéndose el labor --> de investigación podrían preguntar qué tipo de trigger quieres que hagamos, pueden hacer un --> insert, un update, un delete, Harold, por ejemplo, tú podrías crear un disparador sobre --> la tabla de empleados, exactamente como lo dijiste, sobre la tabla de empleados para que --> cuando se haga un insert en esa tabla, aquí hay que configurar ese disparador para que cuando --> se haga un insert sobre empleados, este, se registre el valor de ese insert en nuestra --> tabla de audit, va, o puedes crear otra tabla si quieres, puedes crear una tabla diferente --> de audit en donde puedas guardar la información, es lo de menos, lo que me interesa es --> que hayan deducido del trigger que se aplica a nivel operación, vaya, entonces, si quieren --> ahorita damos unos 5 minutos más, bueno, damos 10 minutos, 11.38 y si no, ya ponemos la, --> o sea, todos nos la vamos a poner, la solución aquí en el, de hecho, ya lo estaba por agrega, --> acá, acá, entonces, sí, más o menos me expliqué, lo que, lo que vamos a hacer, --> hacia qué tal, sí, sí, puedes hacerlo en la tabla que quieras, este, yo preferiría que --> fuera aquí, pero como tú, o sea, al final el objetivo nada más es que insertes y se --> dispare un trigger, si lo quieres guardar en esta tabla, está bien, si quieres crear una --> tabla con tus campos personalizados también está bien, no, no hay tema, va, sí, sí, gracias a ti. --> Dime, dime color. --> Ok, a ver, dónde está, Jharol, acá estás, Jharol, sí, aquí en este caso tú elegiste --> crear un trigger de inserción, actualización o borrado, ok, hay un, hay un mecanismo, --> digamos, cuando estamos haciendo el trigger, que nos permite obtener, ya sea un, si estás --> haciendo, por ejemplo, un insert, hay un objeto que se llama new, para acceder --> al objeto que se está creando, si estamos, salud, si estamos haciendo, salud, salud, --> si estamos haciendo un borrado el objeto es un old y demás, no, entonces, este, aquí --> tendríamos que, mira, si tú hiciste ese after insert, ese trigger de ml ya lo creaste --> y si funcionó, ok, ok, sale, bueno, a ver, ahí el problema que estoy viendo es que --> SDDL, el tipo y el nombre, ahí no los puedes declarar de esa forma, este, tendrías --> que ponerlos en fijo, ahorita lo que podrías hacer es borrar, ah, bueno, creo que con --> el create or replace se va a eliminar, ahí tú directamente podrías ponerle en el --> tipo insert haciendo, por eso les decía que es como muy, muy particular cada tarea, --> si vas a hacer un insert, ahí tendrías que ponerle en el tipo un insert, ahí --> en el owner, ahí más bien tendrías que poner la palabra user, escribe user, --> porfa, no, no, no, así es como palabra reservada, mayúsculas, si quieres, --> en comillas, o así, así, ahí en vez del type, ahí si ya tendrías que poner entre --> comillas el tipo de tarea, en este caso puedes poner el insert, este, --> ahá, entre comillas, exacto, insert, y en el otro, igual entre comillas, pones --> por ejemplo el nombre de la tabla, empleados, employees, employee, ah, exacto, ahora, --> yo te recomiendo que hagas un trigger por cada operación, es decir, pongas este --> after insert on, empleados, si quieres hacer otro trigger, no, no, o sea, me --> refiero, ah, no, sí, ahí estás bien, pero me refiero más bien hasta, hasta --> arriba, donde dice after insert or update, ahí lo cambies a solamente after insert, --> y así ya no te queda tan, delegas, no, las, las responsabilidades, entonces --> puede, prueba, dímelo, sí, --> sí, sí, claro, sí, sí lo puedes hacer, alguna --> condicional, se me ocurre por ejemplo utilizar los, los objetos de, te digo, --> los new, los delete, los, más bien es objeto new y yo creo, sí, no más recuerdo, --> sí, esos dos, ahorita te los muestro, mira, te los voy a pasar por acá, --> Bueno, mira, yo ahorita voy a poner un ejemplo y ahí lo escribimos. Esos identificadores --> le dicen al trigger que se está ejecutando. Si es un new, es un insert. Podrías poner --> ahí un case y demás, ¿no? Digamos un condicional. Yo la verdad recomiendo mejor hacerlo así --> para no tener un trigger así grande y más bien tener triggers en específico de --> actualizado, de borrado y delegues la responsabilidad, ¿no? Si en este caso tú lo pondrías sobre --> la tabla que digamos las que quieras auditar. Hay veces que no todas se auditan. Por ejemplo, --> catálogos pues no tendría como mucho sentido auditar, ¿no? Pero sí a lo mejor. Dime, --> exacto. Sí, digamos, sobre todo son tus tablas que sean más como recurrentes, ¿no? --> Donde manejas información y demás. Entonces, este sí, es más como para eso y precisamente --> pues te da la flexibilidad de hacerlo sobre una tabla en específico. --> Exacto, exacto. Eso que mencionas lo hace, --> creo que alguien me había dicho que aquí es el administrador o algo así, ¿no? Como de --> infraestructura y demás. Hace tareas de ese tipo, ¿no? Hacen tareas como de se llenó la base, --> hay que depurar. Ahí es más como tarea de administradores, ¿no? Pero sí, eso es lo que --> se hace por atrás, digamos. Alguien está monitoreando los logs, los registros, está --> viendo qué tanto se llenó la información, la base de datos, cómo está, y pues van, van depurando. --> Bien, entonces, perfecto. Si quieres darle la, la, o sea, reemplaza tu trigger y lo vas a este, --> lo pruebas, ¿no? Haces otro insert y ya te debe de de mapear otro, otro registro. Va, --> entonces, este, perfecto. Bien, entonces, Harald, gracias por, por este, por dar retro. Entonces, --> voy a compartir pantalla, sale, y por ahí voy a ir este, no me dejo que se quite esta barra, --> que choca. A ver, entonces, este, que no se quita. Ahí está. A ver, vamos a ir escribiéndolo --> entre, entre todos, a ver qué onda, ¿no? Mira, aquí en la base, este, pues había muchas --> formas de abordar esto, ¿no? Podríamos, este, ocupar la misma, la misma tabla, que es la que, --> la que yo les decía que se ocupara, la misma. Lo que teníamos que hacer es un nuevo trigger, --> o podíamos crear una nueva tabla, este, dependiendo de lo que quisiéramos nosotros, --> este, auditar, ¿no? Entonces, yo voy a hacer un ejemplo, este, poquito más, tal vez completo, --> como para que podamos, este, pues tenerlo ahí en la mano, ¿no? Para que lo podamos tener en la --> mano, y sobre todo, pues, que nos sirva de, de, este, de referencia. Entonces, este, lo que yo --> voy a hacer es, este, crear una, una nueva tabla, ¿sí? Que se llame, podemos ocupar el cuerpo de --> esta, y esto lo voy a ir haciendo aquí, como para que quede ahí en este video. Ah, nada --> más, voy a abrir un nuevo, una nueva, este, un nuevo editor, en blanco, ¿no? Para que pueda --> agregar mejor las, este, los comandos. Entonces, aquí le voy a dar, en donde dice, --> y acá, worksheet, ahí está, y ya está mi, mi nueva sesión. Entonces, yo aquí le puedo dar pegar, --> ¿sí? Voy a darle a un show user, para ver qué uso yo estoy, según yo debe ser HR, ahí está, bueno, --> entonces, continúo bien, no, no pasó nada. Entonces, voy a crear una nueva tabla, que --> probablemente nos va a ayudar que se llame, ahora, en vez de DDL, un DML. Ustedes lo pueden --> hacer en la misma, no, no había tema, pero ahorita, como, por ejemplo, que Harold mencionó, --> de cómo podríamos diferenciarlo, se me hace buena idea añadir un nuevo, un nuevo campo, --> entonces, pues, para eso vamos a agregar una nueva tabla, ¿no? Entonces, aquí el ID, --> pues, va a seguir usando una secuencia, vamos a llamarle aquí, en vez de DDL, --> pues, un DML, el username, el DML type, sale el nombre de objeto, ahí también se lo podemos --> usar, y vamos a crear un nuevo, una nueva columna, que le vamos a llamar a esta, por ejemplo, --> values, o creo que values es una palabra reservada, mejor new values, ¿no? Por ejemplo, --> new values, así, para que no haya problemas, y aquí le vamos a poner, por ejemplo, unos que les --> gustan, esta sí va a tener un poquito más de info, unos 250, por cualquier cosa. Si están --> viendo mi pantalla, ¿verdad? Según yo sí. Ah, perfecto. Va, entonces, ¿qué más dice aquí --> la secuencia de nuestro tutorial que ya hicimos? Básicamente, ah, otra secuencia, vamos a crearla --> como para que no se, ah, discúlpenme, gracias, Leon, por la aclaración, este, excelente. Sí, --> bueno, aquí decía, ya creamos la, si me escucharon cuando creé esta tabla, creo que --> sí, ¿verdad? Ah, ah, perfecto. Va, entonces, lo siguiente es crear otra secuencia, ocuparíamos --> otra como para que no se cruce con la secuencia del DDL, y pues se crucen ahí los cables, ¿no? --> Pero, pero bueno, realmente ahí es como ustedes lo quieran manejar, si quieren ocupar la misma, --> está bien, ¿no? Nada más que cuando se inserten registros y cuando se hagan --> actualizaciones, pues la secuencia va a estar combinando ahí, por eso yo voy a crear una --> nueva, y aparte, pues como es un ejemplo, no importa aquí ahorita el, tanto el espacio, --> ¿sabes? Entonces voy a crear un DML Audit Sec, y después de esto, que nos dice el, a ver, --> voy a tratar de poner esto acá, a lo mejor ahí lo dejo, porque se va a hacer, este, --> se va a alentar el, el IDE, y después de esto, literal, ya ahora sí voy a poder --> hacer el trigger, ¿no? Entonces el trigger es el paso, digamos, tres, voy a copiármelo --> también para acá, y voy a decirle que haga un Create or Replace Trigger, en este caso mi trigger --> se va a llamar, este, HR Audit, pues vamos a ponerle un DML, pero aquí le puedo poner algo --> más, que se llame Insert, porque tenemos triggers, ya sean de inserción, de borrado, --> la condición, básicamente aquí éste era como el, lo que había que encontrar, que podemos hacerlo --> con un insert on, aquí ya va directamente no sobre la base de datos, sino más bien sobre la tabla --> en específico, en este caso yo voy a crearnos sobre la tabla de empleados, employees, HR.Employees, --> ¿va? ¿Qué va a ser este disparador? Que cuando yo haga una inserción en esa tabla de empleados, --> haga lo que está dentro del cuerpo, ¿si? Entonces, ese, eso que está dentro del cuerpo va a ser --> literal un insert, pero lo va a insertar en esta tabla, ¿no? Aquí, aquí este, ustedes usaban --> este, porque yo les dije que hay que usar este, no había tema, nada más, yo lo estoy creando --> en una nueva tabla, por este valor, este valor difiere de la tabla que teníamos de --> DL, ¿va? Entonces, nada más es por eso. Entonces, aquí voy a poner el DML, la tabla, ¿si? Y le --> voy a decir los campos en el ID, aquí en ese, en este caso es el DML Date, el User, luego viene --> el DML Type, y luego viene el Object Name, y el último valor era el de, el que decíamos que --> vamos a agregar extra, que es el de New Values, ¿sale? Entonces, ahí se va a agregar un nuevo --> objeto. ¿Y qué valores vamos a agregar? Vamos a agregar, pues en primera instancia, nuestra --> secuencia, ¿no? Que en vez de ser DL, la cambiamos a DML, ahí nos va a ir agregando --> uno a uno, luego le voy a decir la fecha, esa se queda igual, aquí me va a decir quién es el --> Owner, aquí este, esta directiva no se puede usar porque literalmente no está actuando sobre --> un DML, aquí más bien yo voy a usar otra cosa que es de hecho este comando, que la salida, --> si se fijan cuando yo lo ejecuto, me dice quién es, es HR, entonces esto es lo que estaría --> pintando, ¿no? HR, nuestro usuario, más bien nuestro usuario en sección, quien se conecte, --> es quien va a estar este tomando ese valor y lo va a estar registrando. Aquí, muy en específico, --> Oracle, pues no tiene forma de acceder a la operación, pero como yo estoy sabiendo que es --> un insert, pues yo lo puedo poner ahí en duro, una instrucción que me haga decir, --> ah, es identificar, más que nada, ¿no? ¿Qué tabla? Pues mi tabla de empleados, --> entonces este le voy a, a ver, no se ejecutó él, parece que sí, no sé, no sé por qué es esto, --> bueno, lo voy a poner así, ¿no? Como para saber qué es sobre mi tabla de empleados y --> finalmente me pide un values, ese values es lo que podemos ocupar mientras nos vayamos metiendo --> más como al mundo de los triggers, ellos tienen, bueno, sí, para, para manejar triggers, --> este, esta, como decirlo, esta instruccióncita, que básicamente esto lo que hace referencia es --> al nuevo registro que está llegando al valor del, del insert, por así decirlo, ¿sale? Yo con --> utilizar esto puedo acceder a lo que es mi tabla empleados, entonces yo con utilizar new es como --> decir, el campo que venga new sobre la tabla de empleados y qué campos tiene mi tabla de --> empleados, acá los puedo revisar, por ejemplo, el empleado ID, yo puedo agregar, no sé, --> el empleado ID, en este caso, ¿no? Lo puedo cachar con escribir emploji y un bajo ID, literal --> ese es el campo, perdón, es el campo que aparece en mi, en mi tabla, ¿no? Entonces, --> esto básicamente sería el nuevo registro del empleado y el identificador, lo que se está --> insertando, ¿va? Yo aquí puedo utilizar el concatenado, así me salió, es, es, con ese --> doble pipe, este, ahora con concatena, y para no insertar tanto ahorita nada más voy a, --> o sea, la idea sería que un buen log pudieras agregar, este, todos los campos o pudieras --> decir algún texto, tal vez, ¿no? No sé, algo, ahí lo que venga en la imaginación, --> pero con esto yo puedo acceder, por ejemplo, al, vamos a ponerle al email, por ejemplo, --> dando a entender que se está agregando el email o cualquier campo que a ti te interesa, --> ¿sale? Con esto debería de funcionar nuestro trigger, entonces vamos a hacerlo --> igual que en el otro paso a paso, aquí en este caso ya me dijo que creo el trigger audit --> de dml, vamos a crear el sequence también para generarlo y ya nos lo agregó y vamos a agregar, --> agregar perdón, el último paso que es el trigger, ¿va? Aquí nos dice que hay un --> problema nuevo o word no son permitidas a nivel de tabla, no permite triggers, --> accediendo a new values en la trámara, ok, remueve cualquier referencia, ok, mira, --> esto yo creo que tiene que ver con la tabla, con la versión de Oracle, a ver, --> ¿qué podemos hacer aquí? Bueno, esto lo podríamos checar para que no se nos vaya --> ahorita mucho tiempo, voy a hacer un cambio, miren, esto lo puedo revisar después, --> lo voy a dejar aquí comentado como para que podamos este, checarlo y lo voy a revisar --> en la parte de cuando venga el pomodoro largo, entonces aquí mientras lo que podemos hacer es --> cerrar esto y ocupar el mismo insert sobre la tabla de la que teníamos antes, que es la de --> la que teníamos acá, para nada más llegar hasta registrar el object name, en este caso --> sería el DDL, ¿no? O sea, lo que quiero ahorita es que entre el disparador o rayos 15, --> a ver si aquí hay un deshacerse, a ver, lo voy a dar aquí a copiar y lo voy a llevar acá, --> entonces, si yo le pego, me voy a copiar este mismo valor, --> es que no sé por qué no me deja usar aquí adentro los los comandos de cortar y todo eso, --> pero bueno, no importa, esta de aquí, creo que el comentario es así, más bien sería un --> comentario de línea para, no es cierto, sí, sí, es este completo el comentario, a ver, --> ahí lo dejo así, lo agrego acá, y aquí en el cuerpo más bien voy a utilizar el mismo de acá, --> ah mira, de hecho ahí sí quería que funcionara este, ok, voy a decirle que lo agregué ahorita --> nada más como para que funcione el disparador sobre ese DDL y los values pues este sí lo --> voy a volver a ocupar, sigo aceptando que por eso quería apurarlo para que no me desgane el --> tiempo, a ver, ahorita ya vamos al pomodoro largo, aquí le doy pegar y también que me --> cache esto, no, entonces con esto, aquí nada más podríamos ocupar la secuencia del DDL, --> que es así me sirve, y aquí el owner, lo que decíamos, ese sí no va a poder funcionar, --> ahí tendremos que poner el usuario, y aquí muy en fijo podemos poner, pues literal estos dos --> valores, para que no los tenga que estar volviendo a escribir, hago un copiar y un pegar de esta --> información, y al hacer el pegado, ahí está, bueno, entonces voy a quitar, voy a comentar, --> bueno, no, ni siquiera comentar esto, ya lo puedo remover, ahorita vamos a hacer, bueno, --> yo me voy a quedar para ver cómo puedo cachar estos valores, pero ahorita con esto podría --> darme noción al trigger de que se dispare cuando ocurra ese insert, aquí lo que hay que ver es --> que nada más hay que revisar que el trigger no se haya creado, entonces aquí vamos a darle --> un refresh, y al parecer no, no se creó, entonces está bien que lo vuelva a ejecutar --> voy a limpiar ahí nada más esto para que pueda ver si es que sale algún otro error, --> ok, si de hecho me dice que ya existe el trigger, lo que no sé es porque aquí no lo pone, --> como que no lo vimos, dml insert, vamos a ver si aquí ya lo pone, ahí está, --> aquí está el dml, entonces lo voy a eliminar como para ver que se vuelva a crear bien, --> le voy a dar drop trigger, me digo que sí, ahí ya se dice que se borró, --> para que yo me asegure de que esté bien creado, ahí ya se compilo, ya se creó, --> entonces le doy aquí otra vez refresh y ya está el trigger, entonces cómo se probaría esto, --> básicamente aquí lo que estamos viendo es el uso del disparador, --> cómo se les ocurre aquí que debería de funcionar si le dijimos que es sobre un insert, --> pues literal tendremos que hacer un insert sobre la tabla de empleados y ya consultar la tabla --> de la secuencia, entonces nada más es armarse un, digamos un insert y utilizamos por ejemplo --> el tema de esta secuencia, entonces podemos ocupar algo como insert, insert into y aquí --> pondríamos entre paréntesis, perdón, bueno aquí sería el nombre de la tabla, --> en este caso es hr punto empleados, mira fíjate que creo que tenemos un insert por acá, --> para no estar buscando ahí comandos, control F, insert, mira justamente, vamos a buscar este, --> ah mira y es justo sobre empleados, entonces para que no nos tardemos simplemente me lo traigo --> y acá lo voy a pegar, ah perfecto, funcionó y aquí le voy a poner un id no sé diferente, --> el 207 o incluso lo puedo quitar y la secuencia creo que tiene asociada a una secuencia, --> no me acuerdo, si no la tiene puedo ocupar esta que cree, ahí es sabores, voy a poner el 207, --> todo tal cual, si yo lo ejecuto, ahí me va, voy a limpiar aquí esto y si yo lo ejecuto, --> esto debería funcionar, a ver nos dice que es el unique constraint por el insert, --> en donde es donde está fallando, hice audit, ejecución, insert, unique constraint, violado, --> ok probablemente es por la tabla, digo por este insert, vamos a ver si --> agregamos un este, a ver un 999 tal vez, aquí lo que puedo hacer es volver a borrar esto, --> ddl, estoy ocupando, ah bueno creo que más bien es, no, si si está bien, a ver lo voy a ejecutar, --> bueno a ver si no voy a usar creo que más rápido, voy a intentar quitar este campo, --> el del identificador, creo que lo maneja en automático el sequence, --> si entonces si yo vuelvo a limpiar aquí y lo ejecuto, debe haber un sequence, ok, --> si no me deja porque quiere el id, entonces no hay secuencia, entonces a ver ya la última tendría --> que ser agregar pues esta secuencia que acabamos de crear, vamos a utilizar esta para nuestro --> insert, que básicamente es hacer esto, punto, next value, si no nos equivocamos con eso, --> aquí le damos un insert, si ok algo está fallando pero me parece que es más bien del --> del trigger, vamos a ver qué dice, insertas en la tabla ddl audit, ah ok, no es en la tabla --> ddl audit, es en la tabla dml audit, qué pasó, que como yo lo estoy insertando en la tabla del, --> de la tabla anterior, vaya en el insert del dml, está agarrando el sequence que ya existía --> y por eso nos está mandando un duplicado, exactamente, entonces era más bien crearlo --> en mi tabla de acá, sale, y en los new values tienes toda la razón, aquí vamos a agregar un --> valor cualquiera, voy a ponerle new value porque si me lo va a pedir, así y aquí le voy a --> poner un simple null, entonces aquí es el dml audit, nada más déjenme revisar que todo esté --> correcto, ddl date, ok, entonces vamos a checarlo, create or replace, ahí debería de volver a --> botar el trigger, ahí está, ddl type, en dónde está marcando ese ddl type, user, ok parece que --> también tienes un error acá, en el object name es un insert, ahora vamos a ver si entonces con --> el ddl type anterior, que no creo que lo jale, pero a ver lo voy a agregar, --> system, el id, el system, la fecha, el nombre, el tipo, a ver voy a crear, voy a utilizar este, --> la verdad no creo que lo jale, pero a ver lo voy a intentar, en vez de user, --> no es cierto, sabes qué, es por esto, más bien, ya me di cuenta, es el campo, sino --> porque esto es el user, más bien era el campo, lo que estaba mal, el nombre, a ver, entonces --> si lo ejecutamos, debería de crear el trigger, nuevamente, ah, la fecha no es ddl, es dml date, --> y debería de haber otro, creo que ya es todo, vuelvo a limpiar y lo ejecuto acá, --> creamos la función, se creó el trigger, y si yo hago el insert, aquí ya no debería demandar error, --> si yo lo ejecuto, jala la fila, y ahora si yo podría hacer un select sobre la tabla, sobre esta, --> sobre esta, la de dml, que bueno básicamente es copiarnos el comando que ya tenemos acá, --> para no estar creando tantos, de hecho lo puedo ejecutar desde aquí mismo, nada más le cambio --> aquí el dml, y debería de haber un registro, déjamelo ejecuto, y con dml hace el insert, --> obviamente el new values es el que decíamos que ahorita debemos revisar, pero que es lo que --> estamos viendo aquí, que lo que está cachando es nuestro disparador, va, y ese disparador --> funciona sobre esta tabla de empleados, entonces que es lo que hace que cuando registra o escucha que --> hay una inserción sobre esta tabla, este trigger se dispara y ejecuta esta información, va, --> entonces así como hay triggers de inserción, podríamos haber usado un trigger de borrado, --> un trigger de selección, y aquí podríamos en vez de hacer un este, bueno es que aquí --> puedes hacer lo que quieras, no porque hagas un delete, tengas que hacer aquí un delete, --> no, o sea si haces un delete aquí, aquí lo que puedes hacer es hacer un insert igual --> sobre la tabla de auditoria del borrado, va, eso es como que lo que estaría haciendo, --> y eso es lo que estamos viendo acá, básicamente el uso del disparador, --> no sé si hasta ahí tengan alguna pregunta, yo ahorita en el pomodoro de los 15 minutos, --> voy a ver qué onda con cómo podemos sacar este value, sale, y que el registro quede todavía más, --> este, pues más completo, pero de ahí en fuera no sé si haya alguna duda de cómo funciona el --> disparador sobre la tabla de, más bien sobre la acción del insert. --> Ah, perfecto, en específico, muy correcto, exactamente, sale un DML, y un DDL si lo --> quieres hacer a nivel este global, correcto, sale, no, a ti ya tiene, --> bien, entonces son 12 y 5, les late que a las 12 y 20 nos volvamos a conectar y continuamos, --> y entonces va, entonces pongo el mute y nos vemos, muchas gracias. --> Adelante Harold, dime. Adelante. --> No, no, no, no, el DDL va a manipular, DDL son acrónimos de data definition, perdóname, --> ya me confundí, DDL es lenguaje de definición de datos, no, data definition language, --> entonces los comandos de definición son todos los que tienen que ver con los alters, --> con los create tables, con la definición de los datos de la tabla, con esto, --> con la estructura de los objetos, así lo podríamos decir, va, y el manipulado, --> ese sí es el que te ayuda a hacer inserciones, borrados, selects, ese es el DML, --> el manipulation language, va. --> Exactamente, exactamente, por eso es que cuando probamos nuestro primer trigger lo --> hacemos con un comando alter, cuando yo haga un alter o un create table, de hecho tú puedes --> hacer aquí varios ejemplos, puedes hacer un alter o crear otra tabla o un alter sobre otra --> tabla que no sea empleados y crear una nueva columna, etcétera, etcétera, --> y va a reaccionar el trigger, el disparador, si tú hicieras un insert en una tabla esperando --> que registre algo aquí, eso no va a pasar porque este no actúa sobre inserts, actúa --> sobre los definiciones, para hacer uno de insert, por ejemplo, está este trigger que --> hicimos acá, que de hecho es lo que dijo ahorita Leo, los DDL se ocupan a nivel global, --> aquí sí lo puedes ocupar, esto si te fijas, actúa sobre la base de datos, sobre los --> objetos, cualquier objeto, este otro no, este otro actúa en específico, le tienes que --> decir en qué tabla es en específico, va, perfecto, bien, entonces, ¿no gracias a --> ti? --> Gracias. --> Gracias. --> Gracias. --> Gracias. --> Gracias. --> Gracias. --> Gracias. --> Gracias. --> Gracias. --> Gracias. --> Gracias. --> Gracias. --> Gracias. --> Gracias. --> Gracias. --> Gracias. --> Gracias. --> Gracias. --> Gracias. --> Gracias. --> Gracias. --> Gracias. --> Gracias. --> Bueno, bueno. Listo, ahí ya me escuchan, ¿verdad? Todo bien. Vale, entonces, voy --> a compartir pantalla para que podamos continuar. Sale. Ahí ya se ve, ¿no? Sí. Bien, --> entonces, entonces, para hacer la modificación al, ya ven que hicimos el trigger de insert --> y nos estaba dando un problema por esto, ¿no? Básicamente es porque no me di cuenta --> estos identificadores cuando estamos haciendo, ¿cómo se llama? Triggers del tipo insertión, --> borrado y demás, esto de aquí afecta o es una forma de acceder a la fila, a --> que va insertándose. Lo hace fila por fila. Entonces, para que yo pudiera manipular eso --> por campo, tenía que haber agregado una instrucción antes que es esta, el for each --> row. Esta instrucción lo que hace es que en cada fila va a procesar la información --> de esta forma, ¿sale? Entonces, no es más que agregarle esto. En este caso yo voy a --> ir cerrando estas pestañas para que veamos cómo con esto yo ejecuto nuevamente el --> trigger. Si te fijan, ya estoy ocupando bien la tabla de ML, que es la que ocupé --> para este, su ID, todo lo que le definimos aquí, ¿no? La fecha de ML, etcétera, --> el tipo y el valor de new values, sale, ya lo puedo acceder a través de esta --> instrucción. Entonces, el ID yo les digo que quiero que ocupemos este sequence, --> ¿sí? En la fecha normal, el user, esto para identificar que es un insert sobre --> la tabla de empleados, por eso aquí de hecho podríamos ser más específico, --> mi insert es sobre empleados y ahora sí yo puedo acceder para agregar el new --> values, lo que yo estoy agregando aquí es la concatenación del identificador del --> empleado y un espacio y el valor del correo electrónico, ¿sale? Si yo hago --> eso, creo el trigger, lo creo y ahí me dice que ya se compilo, que ya se --> compilo, si yo aquí actualizará, por ejemplo, las conexiones, pues ya, ahí todo --> bien y si yo hago el insert, así yo lo prepararía, me digo inserta sobre la --> tabla, que es el mismo ejemplo que tenemos, aquí nada más le estoy --> diciendo que agarre la ML adecuada, el nombre de, bueno, el registro y --> aquí me di cuenta que el hr, el esquema, le metió un constrain al correo --> electrónico, que quiere decir que no puedo poner uno repetido, entonces cada --> vez que yo hago un insert, aquí ahorita en mi ejemplo, pues tengo que --> cambiarlo, ¿no? manualmente, entonces, si yo lo guardo --> en un insert, la fila se inserta, las secuencias --> se agregan, sí, y cuando yo hago el asterisco from de la tabla, me voy a dar --> cuenta que ya va guardando los registros, ya accede en la tabla new values --> a el valor que agregamos acá, que fue el identificador, que es el que va --> agregando, un espacio y el email, ¿no? o sea, yo aquí puedo poner cualquier --> texto realmente, pero estoy ilustrando que estoy accediendo al --> campo empleado y al campo email, puedo aquí agregar cualquier campo que --> esté dentro de la tabla de empleados, ¿va? cualquier campo que esté --> sobre esta tabla, yo puedo acceder a ellos a través de acá --> y con esto yo estaría haciendo el registro de auditoría de la tabla de --> y en vez aquí de usar los new, son los old, los campo old, entonces estos --> registros quieren decir lo que borré, el viejo registro, por así decirlo, lo va --> a guardar, ¿no? este también es como útil de conocer --> quería ver el deshacer, ahí está, y aquí --> claro, claro que sí, voy a --> si, voy a voy a copiar el trigger, bueno de hecho todo el ejemplo --> y también lo voy a poner en la presentación, este, nada más que aquí --> está medio raro el email, no sé por qué es esto, es que esto es básicamente de que no nos --> permite usar bien los como que sea tonta, es por dadestop, no es por ubuntu --> ni oracle, no es eso, más bien es como que la comunicación entre el clipboard --> algo aquí tiene esto, no sé, no me había pasado porque yo --> generalmente ocupo igual windows, pero bueno, este curso que --> estamos dando aquí en esta, en este sistema operativo, pues bueno, está presentando y --> como que cosillas medio raras, entonces voy a copiar todo esto hasta --> arriba, hasta arriba, sí, ahí están las secuencias de pasos --> y de hecho en lo que si quieren ustedes la van intentando, van jugando con esto, --> yo voy a copiarlo en la presentación para que también ahí lo tengan, este, --> disponible, va, de hecho le voy a quitar la selección para que no confunda y --> voy a copiarme esto en la presentación y ahí lo dejo para que ustedes --> puedan, este, interactuar, si es que así lo lo quieren probar, no? --> entonces yo ahorita voy a poner --> acá, le voy a poner aquí, duplicar y le voy a poner, es que realmente este ejercicio se me ocurrió ahorita como para que podíamos complementar la práctica, no? --> es bastante usado el tema de los trios, por eso no estaba aquí definido, vamos a ponerle algo así como ejercicio de trigger --> para insert, sobre empleado, le voy a dar pegado en formato, --> no esto, todo esto es en Arial, ah ya, ya sé que pasó, mejor primero copiar el código para que --> sin formato, ahí está, y pues básicamente son los queries que se tienen que ir ejecutando, --> voy a quitarlo a este formato medio cucho, creo que, ah, entonces me acuerdo con esta parte, --> lo que si quieren ustedes van, este, probando y si tienen alguna duda lo vamos revisando, no sé si sale algún error, --> y esto de acá también que afecta a este, y listo, --> ya, entonces este lo voy a separar en dos partes, hasta que creamos la tabla de auditoría, --> y luego le voy a decir, duplicar, aquí pegamos lo que falta, aquí le vamos a poner un eje, un texto más que diga, --> probando el trigger, voy a quitar, aquí es Arial y ya está, ahí también en la presentación ya actualicé --> este, lo que viene a ser el ejemplo, va, para que lo puedan también tener ahí en la, la posteridad, --> y ya nada más entramos, ya está, si ustedes actualizan la presentación, también ya este, tienen el trigger, va, --> voy a revisar, no sé si alguien tenga algún comentario o duda, o requieran este apoyo para que les ayude con el trigger, --> ahora vamos a empezar con hardware, ah no es cierto, Orlando lo tengo a la mano, este, bueno ahí creo que lo están copiando, --> si hay tratadoras en algo me avisas, va Orlando, sin tema, luego, perfecto, luego paso con Harold, este, ah pues ya lo agregaste ¿no? --> ahí quedó Harold, vamos a ver a Jesús, está copiando, ok, y vamos viendo, ok, ahí está, y creo el place trigger, ahí está, --> ahí está, ahí está guardando los registros ¿no? te guardo el ID, te guardo el, y creo que es, que es eso, --> ok, creo que también no tuviste bronca ¿verdad? este, Jesús, --> a ver, ah perfecto, ah bien, entonces ya vi que hiciste el case y todo, es cierto, ándale, ok, exacto, perfecto, bien, --> a ver ahí cómo fue, déjame le echa un ojo ¿no? dice before insert or rotate, sobre, ajá, cualquiera de las dos actividades, --> sobre inserción o actualización, for each row, haces el declare, begin, ahí está el case, con respecto al transaction, --> muy bien, a ver nada más déjame ver ahí qué onda, case, ah perfecto, ahí está, entonces está muy bueno, --> ese también si quieres ahí lo puedes compartir, la presentación es justo para eso ¿no? está, les di el acceso a, --> ah no es cierto, creo que ahorita lo tienen como lectores, si quieres lo puedes compartir en el couch share y a los demás lo podemos agarrar, --> y yo después al final ya del día les puedo dar el acceso de este administrador para que puedan complementar ahí ustedes la presentación y pues agreguen más este, --> más ejemplos ¿va? bien, entonces eso estuvo súper bien, luego jalamos con Aaron, Aaron ya lo agrego, perfecto, --> no tuviste broncas ¿verdad? si, te ayudo, ah si, si luego hay como que se quedan comandos medio raros, no sé, lo que le pasó también a este de Leon, --> quién sabe, si, ya eliminar y actualizar hasta que ya ¿no? jaló, perfecto, bien, entonces va, --> y luego vamos con la más falta Leon, vamos a ver este, a ver me voy a hacer más grande este, como está en la orilla no me deja agarrar esta cosa, --> ahí está, ya me dejó, a ver este, ya la agregaste, ya la creaste, ah estás haciendo los cambios ¿ok? va, ya vas a agregar el trigger, ahí está, ya jaló, --> y ah bueno estás haciendo los ejercicios ¿no? paso, paso, ok, creo que no tuviste bronca ¿verdad Leon? o si tienes algo me avisa, --> perfecto, perfecto, bien todos, sale, pues bueno con eso estaríamos cerrando prácticamente el tema este, --> de los logs, y bueno aquí nada más vamos a ir haciendo como una pequeña remembranza, --> voy a continuar con, de ahí me voy a pasar hasta el tema 6, que es el tema siguiente ¿no? en la presentación, --> y bueno aquí básicamente nada más este, vamos a hablar de un archivo, --> que es un archivo que nos permite usar para hacer este auditorías y demás, --> y sobre todo también este registro ¿no? de ahí de trazabilidad, de algún problema o no sé, que podamos este encontrar, --> pues ahí vimos tres formas de hacer este logs ¿no? la verdad es que me detuve un poco más en esta parte, --> porque creo que es de las cosas que más este vamos a estar ocupando, --> al menos creo que la mayoría de la audiencia lo que entendí o escuché, --> bueno aquí abro pauta a un poco también el diálogo web, --> por si ustedes me dicen que se invirtió mucho tiempo en una práctica como así, --> lo considero para las siguientes actividades, ¿por qué? porque este curso si se fijan es muy de administración ¿no? --> entonces yo veo que en la audiencia hay más como desarrollo ¿no? --> entonces creo que a lo mejor un tema como de triggers y demás, --> entonces tal vez más este, más, más cómo decirlo, más útil, --> pero a lo mejor aquí abro el diálogo, si ustedes me dicen no, ¿sabes qué? la verdad se invirtió mucho tiempo, --> a la próxima preparo a lo mejor ajusto mejor dicho los ejercicios, --> para que sean más este centrados en el tema de administración, --> ahorita está más balanceado, pero te digo yo como vi que si es más de desarrollo, --> pues le metí incluso el último ejercicio ¿no? --> no sé ustedes qué opinan, ¿quieren que sigamos viendo, --> nos inclinamos poquito más como al tema de desarrollo, --> o sea no me voy a salir del temario, el temario es lo que es, --> pero los ejemplos que vayan más orientados como a desarrollo o más como a administración, --> ustedes digan quién quiere participar al desarrollo. --> Ok, a ver este Leon, tu comento opinión, --> creo que tú eras el administrador de aquí ¿no? del equipo, --> ah ya ves Leon, ¿cómo ves? ¿qué hacemos para inclinarnos en los ejemplos, --> está bien así o nos vemos más como en gestión en administración. --> Sí, o sea de hecho está equilibrado, --> pero te digo ahorita yo invertí un ejemplo más en el trigger, --> por ejemplo que es más como de desarrollo, --> por lo que escuché ¿no? de que la audiencia es más como de depth, --> pero no hay tema ¿eh? o sea ahora sí que es como... --> un 50 a 50. --> Ah ok va, sale, entonces ya cambiaste, ya cambió de role este Jaron, --> va a ser el, va a ser el Arnes, --> agárale, bien entonces, muy bien, muy bien, sale, --> y si no es en discreción Leon, --> ah perdóname, ¿quién va a hablar? --> Jesús, sale, --> ajá, dime, --> ah ok, perfecto, --> de hacer respaldos y demás, --> ah a ver, --> creo que genera, --> sí, sí, sí yo creo que sí, --> respaldos, --> ajá, --> ajá, --> sí, --> ajá, --> ajá, --> ajá, --> sí, también claro, --> sí, sí, --> ok, quieres que veamos como nos enfocamos también en, --> en usuarios ¿no? como dar permisos y visualización de tablas ok, --> permisos, --> si digamos que si tú a un usuario, --> o sea, te entendí, tienes dos tablas en dos, perdón, dos bases de datos --> diferentes y quieres gestionar los roles, digamos un usuario le das el role para que ocupe la tabla --> uno y dos, --> y los pueda hacer Joy ¿no? las pueda cruzar, ok, va, --> sí, --> ok, entonces también nos enfocamos en esa parte, --> a mí me sirve mucho hacer esto pues más que nada porque lo que yo quiero es que el curso quede, --> pues muy a la medida de ustedes, --> como les comentaba a mí me dicen quién es al final, --> o sea de hecho cuando me conecté el lunes ¿no? --> digo ayer, martes, no es cierto ayer no fue martes, el martes vaya, --> yo me enteré de quiénes son demás y, --> pues la verdad es que yo creo que eso está medio, --> bueno, --> podemos, podemos mejorarlo ¿no? --> entonces, --> pues sí, --> es más como una reto como para, --> en que quieren que me enfoque un poquito más ¿no? --> y le balanceamos ejercicios como nos dijo Leon y Harold, --> son 50 y 50 administración y desarrollo ¿no? --> ah, te decía Leon entonces tú te vas, tú vas a hacer ¿qué hora? --> ya no vas a ser DBA ¿qué hora eres? --> ¿de box o qué? --> ah, perfecto, --> bien entonces, va, --> yo nada sé ahí como me baje cultura, --> ok, bien entonces, --> entonces continuamos, yo me llevo esta notita, --> va para, en base a eso ir preparando más, --> como ajustando mejor dicho los ejercicios, --> bien entonces, --> el tema que sigue es la parte de los net services, --> sale esto, --> vamos a leer un poquito de teoría, --> y a ver quién falta, --> creo que por ejemplo, --> a ver qué les parece si, --> Jesús, --> nos ayudas a leer esta, --> diapositiva por favor, --> la 86, --> bien entonces, muchas gracias, --> correcto, --> ahí está, --> perdona, --> estamos, --> creo que por acá, --> acá, --> exacto, --> correcto, --> correcto, --> perfecto, --> muchas gracias, --> Jesús, --> luego dice, --> configurando y administrando un Oracle Net Services, --> configurar y administrar Oracle Net Services en Ubuntu, --> implica establecer conexiones de red seguras y eficientes, --> va, se realiza mediante, --> se realiza principalmente mediante la edición de archivos de configuración, --> como el list en el punto hora, --> para el Oracle, --> perdón, para el Oracle Net Listener, --> y el TNS names para la configuración del cliente, --> entonces, --> aquí aparece, --> dos conceptos, --> también importantes, --> y sobre todo, --> digamos muy, --> necesarios de identificar, --> dos archivos, --> que son el list en el punto hora, --> y el TNS names, --> básicamente eso que es lo que nos permite, --> como lo estaba comentando aquí Jesús, --> de la diapositiva, --> Oracle provee un servicio que se llama Net Services, --> que básicamente lo que hace es que nos permite tener, --> una base de datos, --> por así decirlo, --> compartida en la red, --> qué quiere decir esto, --> que es como si nosotros vamos a hacer una analogía, --> pusiéramos una aplicación, --> en un servidor, --> y este es, --> accedido a través de, --> puertos y protocolos, --> en este caso HTTP, --> y lo pueden consultar varios clientes, --> entonces, en una arquitectura cliente-servidor, --> en donde muchos clientes, --> se conectan a una instancia de un server, --> y, --> obtienen o interactúan, --> mejor dicho con un aplicativo, --> eso es básicamente lo que, --> la analogía más cercana, --> lo que es Net Services, --> es que Oracle, --> va a, --> por medio de un archivo listener.ora, --> exponer o, --> sí, vamos a decirlo así, exponer, --> para que los TNC names, --> que digamos un cliente, --> se pueda conectar a esa base de datos, --> desde la infraestructura del, --> de los protocolos de intercambio de información, --> como por ejemplo TCP, --> nosotros con ese archivo de conexión, --> vamos a conectar directamente, --> a esa base de datos que se encuentra en el server, --> va, entonces es muy importante tener noción, --> de que existen estos archivos, --> y para que se ocupan, va, --> nuevamente, para hacer ya, --> para cerrar esta parte, --> el listener.ora, --> configura, --> lo que vendría a ser la, --> bueno, más bien define, --> lo que vendría a ser la configuración, --> de Oracle, base de datos, --> como un server, --> que se configuraría en cada máquina cliente, --> que quisiera conectarse a esa instancia de configuración, --> a esa configuración, va, --> es básicamente eso, --> en donde se encuentra cada uno, --> bueno, en este caso este listener, --> ahorita lo vamos a acceder nosotros, --> en el que tenemos en nuestra instancia, --> sí, y básicamente es esto, --> dice que el archivo listener.ora define parámetros, --> perdón, --> para ese ahora con net listener, --> teniendo el nombre del listener, --> el protocolo, --> y la dirección IP y el puerto, --> se va a encontrar en esta ruta, --> Oracle Home Network Admin, --> incluso creo que así literal, --> si yo la copio como esta variable está definida, --> en nuestra instancia, --> la podemos acceder, --> entonces, --> voy a hacer esto, miren, --> de hecho esta la voy a quitar, --> porque esto más bien es una nota, --> que me voy a llevar yo, --> no tanto ahí, --> para mí, --> y listo, --> aquí adentro yo podría ejecutar un comando, --> similar a este, --> ahí, a esto, --> sí, aquí en mi instancia de Docker, --> va, entonces si yo abriera aquí, --> que está haciendo, --> ah, este es el ID, --> voy a abrir mi otro terminal, --> donde está jugando con la conexión de la instancia y demás, --> acá, --> voy a quitar esto, --> voy a quitar esta parte, --> y si te fijas yo estoy acá, --> en esta ruta, --> bueno, me voy a cambiar --> a la parte que tengo acá, --> si yo copio este comando, --> y lo pego acá, --> en mi instancia de, --> ¿cómo se llama? --> Docker, --> en mi contenedor de Oracle, --> si se fijan yo le dije, --> llévame a esta ruta, --> a Oracle Home Network Admin, --> aquí yo puedo ver entonces cuánto vale Oracle Home, --> ¿por qué? --> porque lo que está en Network Admin está acá, --> entonces todo lo que está del lado izquierdo, --> vendría a ser mi variable Oracle Home, --> esto es Oracle Home, --> esto Oracle Home quiere decir, --> el directorio donde está instalado, --> pues literal, --> si te fijas dice, --> Oracle, el producto, --> la versión 19c, --> y listo, --> entonces yo aquí adentro, --> vamos a ver qué pasa si le doy una SLA, --> si tú te fijas, --> aquí tengo dos archivos, --> bueno, tengo varios, --> pero dos importantes son, --> el Listener, --> y mi TNSNX, --> estos archivos, --> también nosotros los tenemos, --> en nuestra chuleta, --> que hemos estado trabajando, --> sale y, --> déjame buscar la chuleta, --> acá está, --> la puse casi hasta abajo, --> van a encontrar ahí, --> los archivos, --> TNSNX, --> y ahora, --> que de hecho agregué otro más, --> ahorita lo vamos a ver, --> son tres, --> y básicamente es esto, --> cómo entramos, --> como lo decía aquí nuestra presentación, --> me conecto a la instancia de Oracle, --> le digo que me lleve al Oracle Home Network Admin, --> y ahí adentro, --> le doy un SLA, --> y me lista estos archivos, --> si te fijas estoy aquí, --> y cómo puedo ver el contenido, --> en este caso voy a repasar el primero, --> el Listener, --> si yo me fijo, --> yo le puedo dar un cat, --> porque estoy limitado, --> no he instalado el sudo, --> el nano, --> ni siquiera el bin, --> entonces con el puro cat, --> yo puedo usar esto, --> ocupo, --> y te fijas aquí adentro, --> está una configuración, --> ahorita vamos a ver más adelante, --> bueno yo creo que ya no es hoy, --> va a ser mañana, --> pero más adelante la diapositiva nos dice, --> hay un servicio de configuración en automático, --> vamos a ver la configuración de datos, --> por algunos de los comandos que hemos usado, --> como DBSL, --> CDBDA, --> como Oracle, --> perdón, como el Docker Compose, --> como algún comando que ocupe, --> que sean como del tipo asistente, --> de hecho si ustedes se fijan, --> estas configuraciones, --> nosotros no las hemos movido, --> no se alteran, --> no las damos de alta manualmente, --> vamos a ver en la presentación, --> una estática y una dinámica, --> la dinámica es la que viene por default, --> y cuando yo cree una base de datos y demás, --> en automático me va a dar, --> Oracle, --> todo lo necesario, --> para acceder al Listener, --> y también al TNC Names, --> me los van agregando, --> en un caso de que algo fallara, --> no se agregara, --> o simplemente yo siendo más experto, --> le puedo modificar, --> que también es válido, --> es todo estático, --> para poder acceder a esto, --> a estos archivos, --> modificarlos, --> por otro lado yo voy a hacer, --> también voy a ver que hay en el TNC Names, --> acordémonos, el Listener, --> es el que configura, --> a la base de datos, --> para que otros clientes, --> nos puedan acceder, --> en este caso, --> no vamos a llegar a un ejemplo, --> en donde se accede a Red, --> porque es una máquina local, --> que es una configuración, --> que va más allá de estas prácticas, --> por eso ahorita nada más se lleva, --> al nivel conceptual de lo que es, --> y si podemos revisar, --> lo que internamente está haciendo, --> que es una configuración local, --> y el TNC Names, --> si tú te fijas aquí tiene igual, --> pero en este caso, --> aquí tiene más información, --> todo esto también está en la chuleta, --> si te acuerdas, --> creamos una base de datos, --> que es un CDB, --> que se llama New World CLCDB, --> con nuestro comando CDBC, --> que está ahí en la presentación, --> se creó, --> y también, si te fijas, --> es un CDB, --> también nosotros agregamos, --> una base de datos, --> que es la que hemos utilizado, --> y ésta si se acuerdan, --> se generó con el archivo Docker Compose, --> que ya lo hemos repasado varias veces, --> entonces aquí me doy que te doy a entender, --> que ya sea con cualquiera de los dos formas que hicimos, --> se nos creó, --> ajá, el archivo en forma en automático, --> y aquí abajo, --> déjame ver qué más hay, --> además de agregarnos eso, --> pues nos crea un list tener, --> para cada una de los CDBs, --> que en este caso está haciendo esto, --> aquí te mapea el puerto que va a ocupar, --> el host, 0.0.0, --> es el local host, --> y lo hace tanto para el CDB1, --> como para el CDB2, --> adicional en este CDB, --> también estamos haciendo uso, --> del PDB, --> que de hecho bueno, --> este PDB creo que es el que se agregó, --> en la base de ayer, --> de New World CLCDB, --> el comando éste que cada quien ejecutó, --> y que le puso su inicial y demás, --> ahí a lo mejor a ustedes, --> sus list teners, --> sus tenes and names, --> son diferentes, --> pero bueno, --> la idea de eso es que podamos saber, --> cómo acceder a estos archivos, --> en qué ruta están, --> ahí dejamos la chuleta, --> dejé los comandos, --> y que lo puedan ver qué tiene, --> entonces no tienen por qué ser iguales, --> porque cada quien creó, --> sus CDBs diferentes, --> con un name diferente, --> y pues bueno, --> eso es lo que contiene los archivos, --> ahorita vamos a, --> ya de hecho ya terminamos el día de hoy, --> sale y este, --> pues bueno aquí nada más te va diciendo, --> de lo que es el list tenor, --> lo que es el cliente, --> cómo lo puedes acceder, --> a través de un tenes and names, --> que se conecte a este list tenor, --> que no es más que realmente, --> lo que hemos estado nosotros revisando, --> en un ejemplo teórico, --> te ponen un list tenor, --> en donde tú habilitas lo que te decía, --> si damos un ejemplo levantamos un server, --> lo ponemos ahí, --> y un cliente, --> configuramos que ese cliente, --> ese servidor tenga el acceso a ese cliente, --> y lo podemos mapear, --> en este caso como todo es local, --> pues va a funcionar sin mayor problema, --> va entonces, --> básicamente es el repaso, --> de lo que es el list tenor, --> y demás, --> mañana los vamos a revisar, --> estos dos comandos, --> pero básicamente, --> esto nos ayuda, --> a gestionar ya no, --> no son los comandos del, --> que configuran la instancia, --> de la base de datos, --> que podíamos reiniciar la instancia, --> aquí suena, --> bueno aquí ya podemos, --> diferenciar estos dos conceptos, --> uno es la administración de la instancia, --> otro es la administración del, --> por eso que lo llaman la gestión, --> porque son comandos diferentes, --> para la base de datos, --> son el shutdown, --> el inmediate, el normal, --> y el startup para reiniciar, --> bueno volverlo a encender, --> y con estos los lsnrctl, --> son comandos que nos permiten, --> gestionar pero el list tenor, --> vamos a poder, --> apagarlo, --> encenderlo, --> y pues bueno, --> eso es lo que nos va a permitir, --> hacer, --> gestión de ese archivo, --> va, --> vamos a entrar mañana, --> bueno eso ya lo vemos mañana, --> en detalle, --> cómo se puede configurar este, --> básicamente nada más es cambiar una línea, --> si se fijan aquí los servidores son dedicados, --> vamos a hacer un cambio, --> para que sea un share, --> y a share me refiero a esto, --> ya con eso estaríamos creando, --> una arquitectura compartida, --> sí, --> que básicamente va a poder, --> hacer que otros, --> otras, --> clientes se puedan conectar, --> al aplicativo, --> aquí no es más que estábamos viendo, --> que contiene cada archivo, --> que son los que estuvimos revisando, --> tema de la arquitectura, --> dedicada, --> un ejemplito de, --> bueno la, --> el comando, --> más bien la descripción de lo que hace cada uno, --> y bueno, --> entramos con el SQLinit ahora, --> lo vamos a dejar aquí, --> este, --> y mañana pues ya, --> entramos otra vez en materia, --> este, pues bueno, --> no me queda más que nuevamente agradecer, --> la atención y la participación, --> León levantó la mano, adelante, --> va, --> entonces nos vemos mañana, --> y muchas gracias a ustedes, --> que tengan buen día.