Colección de citas famosas - Libros antiguos - Acerca de la creación o sustitución de vistas

Acerca de la creación o sustitución de vistas

Categoría: Educación/Ciencia》》; Aprendizaje de lenguas extranjeras

Descripción del problema:

¿Qué significa esta oración? Por favor explícamelo en detalle.

Análisis:

He visto esta descripción online. Por favor léelo también. ¡No sé si te será útil!

En primer lugar, las tablas y vistas del diccionario de Oracle se pueden dividir básicamente en tres niveles.

Tabla 1.X$

Esta parte de la tabla es la base para ejecutar la base de datos Oracle. La aplicación Oracle la crea dinámicamente cuando se inicia la base de datos.

Esta parte de la tabla es muy importante para la base de datos, por lo que Oracle no permite que usuarios distintos de SYSDBA accedan directamente a ella y no permite autorización explícita.

Si se muestra la autorización, recibirá el siguiente error:

SQL>Authorize select on x$ksppi to eygle

Conceda x$ksppi on Select autorización otorgada a eygle

*

Error en la línea 1:

ORA-02030: solo se puede seleccionar entre tablas/vistas fijas

2.GV Vistas $ y V$

A partir de Oracle8, se introdujo la vista GV$, que significa V$ global.

Salvo algunos casos especiales, cada vista V$ tiene su correspondiente vista GV$.

La vista GV$ se genera para satisfacer las necesidades del entorno OPS. En el entorno OPS, consultar la vista GV$ devolverá toda la información de la instancia. Cada vista V$ se basa en la vista GV$ establecida después de agregar la columna INST ID y solo contiene la información de la instancia de conexión actual.

Tenga en cuenta que cada vista V$ contiene declaraciones similares a las siguientes:

donde inst_id = USERENV('instance')

Usar para limitar el retorno de la corriente información de la instancia.

Comencemos con GV$FIXED_TABLE y V$FIXED_TABLE.

SQL> SELECCIONE view_definition FROM v_$fixed_view_definition

donde view_name = 'V$FIXED_TABLE';

VIEW_DEFINITION

-

Seleccione nombre, ID de objeto, tipo, número de tabla de GV$FIXED_TABLE

donde inst_id = USERENV('instancia')

Aquí vemos que V$FIXED_TABLE se crea en función en GV$FIXED_TABLE.

SQL> SELECCIONE view_definition FROM v_$fixed_view_definition

donde view_name = 'GV$FIXED_TABLE';

VIEW_DEFINITION

-

seleccione inst_id, kqftanam, kqftaobj, TABLE, indx de x$kqfta

Unir todo

seleccione inst_id, kqfvinam, kqfviobj, VIEW, 65537 de x$kqfvi

Unir todo

select inst_id, kqfdtnam, kqfdtobj, TABLE, 65537 from x$kqfdt

De esta manera, encontramos el valor basado en X$ La declaración de creación de la vista GV$FIXED_TABLE creada por la tabla.

3.Vista GV_$, V_$ y sinónimos V$, GV$

Estas vistas se crean a través de catalog.ql.

Cuando se ejecuta catalog.sql:

Crear o reemplazar la vista v_$fixed_table con select * de v $fixed_table

Crear o reemplazar v_$fixed_table Reemplazar public sinónimo v$fixed_table

Crear o reemplazar la vista gv_$fixed_table con select * de gv$fixed_table

Crear o reemplazar el sinónimo público gv$ para gv_$fixed_table tabla _ fija

Observamos que primero se crean las primeras vistas V_$ y GV_$ y que se crean las dos vistas V_$ y gv_$.

Luego cree sinónimos basados ​​en la vista V_$.

Entonces, de hecho, la vista V$ a la que normalmente accedemos es en realidad sinónimo de vista V_$.

La vista V_$ se basa en la vista V$ real (que se basa en la tabla X$).

La vista v$fixed_view_definition es un punto de entrada para que estudiemos las relaciones entre objetos de Oracle. Una comprensión cuidadosa del mecanismo del diccionario de datos de Oracle nos ayudará a comprender y aprender en profundidad el conocimiento de la base de datos de Oracle.

Ir más allá

1).Tabla X$

Respecto a la tabla X$, también podemos vislumbrar su información de creación desde el diccionario de datos.

Primero, verificamos la tabla bootstrap$, que registra la información básica y la información del controlador para el inicio de la base de datos.

SQL & gtselect * desde bootstrap $;

Fila # OBJ# SQL_TEXT

-

-1 -1 8.0.0.0. 0

0 0 Crear segmento de reversión de almacenamiento del sistema (inicial 112K siguiente 1024K

MINEXTENTS 1 metro

8 8 Crear clúster C _ ARCHIVO # _ BLOQUE # (" Número TS #", número "SEGFILE#",

número "SEGBLOCK#")

9 9Crear índice I _ FILE # _ BLOCK en el clúster C_FILE#_BLOCK# # pct libre 10

INITRANS 2 MAXT

14 14 Crear tabla SEG$ (el número "archivo #" no está vacío, el número "bloque #" no está vacío

Vacío, número "escriba número"

5 5 Crear tabla CLU $ (el número "OBJ #" no está vacío, número "objeto de datos #", "TS#"

El número no está vacío

6 6 Crear clúster C _ TS # (número "TS #") pct libre 10 pct usado 40 init trans

2 MAXTRANS 255

7 7 Cree el índice I_TS# en el clúster C_TS # pct libre 10 INITRANS 2 max trans

255 almacenamiento (

....

Esta parte de la información se carga por primera vez cuando se inicia la base de datos. Al rastrear el proceso de inicio de la base de datos, encontramos que la primera acción del inicio de la base de datos es:

Crear tabla bootstrap$ (el número de fila no está vacío, y el número de objeto no está vacío,

SQL_text varchar 2 (4000) no nulo) almacenamiento (el objeto inicial de 50K no tiene 56 extensiones

(archivo 1 bloque 377))

Esta parte El código está escrito en aplicaciones de Oracle. Después de crear bootstrap$ en la memoria, Oracle puede leer otra información del archivo 1 y el bloque 377 para crear objetos importantes de la base de datos, iniciando así la base de datos en función de esta parte de la información. Para realizar el arranque de la base de datos, similar a la inicialización del sistema operativo, puede consultar el artículo de Bitti Meni para esta parte.

Queda así establecida la tabla X$. Esta parte de la tabla se puede encontrar en v$fixed_table:

SQL & gtselect count(*) de v$fixed_table con un nombre como "X$%";

count ( *)

-

394

* * *Se registraron 394 objetos X$.

2).Vistas GV$ y V$

Después de crear la tabla X$, se crean las vistas GV$ y V$ basadas en la tabla X$.

También podemos obtener esta parte de la vista consultando V$FIXED_TABLE.

SQL & gtselect count (*) de v$fix_table, donde el nombre es como "GV $ %"

Count (*)

-

259

Esta parte tiene 259 objetos.

SQL & gtselect count(*) de V$fixed_table donde el nombre es como "V$%"

count(*)

-

259

También son 259 objetos.

V$fixed_table*** registró 394+259+259 *** 912 objetos.

Rastreemos el esquema de la base de datos a través de la vista V$PARAMETER:

SQL & gt SELECT view_definition FROM v$fixed_view_definition a WHERE

a.VIEW_ NAME = ' V$PARAMETER';

VIEW_DEFINITION

-

seleccione CANTIDAD, NOMBRE, TIPO, VALOR, ISDEFAULT, ISSES_MODIFIABLE,

p>

ISSYS_MODIFIA

BLE, MODIFICADO, AJUSTADO, DESCRIPCIÓN, ACTUALIZACIÓN COMENTARIO DE

GV $parámetro donde

ere inst_id = USERENV ('Instancia')

Vemos que V$PARAMETER es creado por GV$PARAMETER.

SQL & gt SELECCIONE view_definition de v$fixed_view_definition a WHERE

a.VIEW_NAME ='GV$PARAMETER';

VIEW_DEFINITION

-

seleccione x.inst_id、x.indx+1、ksppinm、ksppity、ksppstvl、ksppstdf、decode

(bitand(kspp

iflg/256, 1),1,'true','false',decode(bitand(ksppiflg/65536,3),1,

inmediatamente',2,

"DELAY",3 ,"INMEDIATO","FALSO",DECODE(bitAND(ksppstvf,7),

1,MODIFICADO,4,SYSTEM_MOD,FALSE,decode(bitand(ksppstvf, 2

, 2, 'VERDADERO', 'FALSO'), ksppdesc, ksppstcmnt de x$ksppi x, x$ksppcv

y donde (x.indx = y.indx) y ((translate(ksppinm,'_ ','#') no

como "#%") o (ksppstdf="FALSE"))

Aquí vemos GV Los $parámetros provienen de dos tablas X$, X$ksppi y X$ksppcv.

X$ksppi y x$ksppcv básicamente incluyen todos los parámetros ajustables de la base de datos, mientras que los parámetros mostrados por v$parameter no comienzan con "_". Los parámetros que comienzan con "_" a menudo se denominan parámetros implícitos y generalmente no se recomienda modificarlos, pero muchos de ellos son bien conocidos por su poderosa funcionalidad y uso frecuente.