Directorios de Datos

 ¿Qué es un Directorio de Datos?

Este no es más que un contenedor virtual en el que se almacenan una agrupación de archivos informáticos y otros subdirectorios, atendiendo a su contenido, a su propósito o a cualquier criterio que decida el usuario.




 ¿Qué es un Diccionario de Datos?

Es un repositorio centralizado de información sobre datos tales como significado, relación con otros datos, origen, uso y formato.






4 Ejemplos de Sistemas de Administración de Datos

MySQL

MySQL es un sistema de administración de bases de datos relacional (RDBMS) de código abierto y gratuito. Inicialmente era propiedad de MySQL AB, antes de ser adquirido por Sun Microsystems (parte de Oracle Corporation desde 2010). El desarrollador original de MySQL es Ulf Michael Widenius, fundador de MySQL AB y actual desarrollador principal y CTO de MariaDB.
-Desarrollador: Oracle Corporation.
-Autor original: MySQL AB.
-Última actualización de MySQL: MySQL 8.0.28.
-Licencia de MySQL: GNU General Public License versión 2 y licencia propietaria.


Directorio de datos MySQL 

La información administrada por el servidor MySQL se almacena en un directorio conocido como directorio de datos. La siguiente lista describe brevemente los elementos que normalmente se encuentran en el directorio de datos, con referencias cruzadas para obtener información adicional:

Subdirectorios del directorio de datos. Cada subdirectorio del directorio de datos es un directorio de base de datos y corresponde a una base de datos administrada por el servidor. Todas las instalaciones de MySQL tienen ciertas bases de datos estándar:

El directorio mysql corresponde al esquema del sistema mysql, que contiene la información requerida por el servidor MySQL mientras se ejecuta. Esta base de datos contiene tablas del diccionario de datos y tablas del sistema. 

El directorio performance_schema corresponde al esquema de rendimiento, que proporciona información utilizada para inspeccionar la ejecución interna del servidor en tiempo de ejecución. C

El directorio sys corresponde al esquema sys, que proporciona un conjunto de objetos para ayudar a interpretar la información del esquema de rendimiento más fácilmente. 

El directorio ndbinfo corresponde a la base de datos ndbinfo que almacena información específica de NDB Cluster (presente solo para instalaciones creadas para incluir NDB Cluster).


Otros subdirectorios corresponden a bases de datos creadas por usuarios o aplicaciones.


Ejemplo:

Para encontrar el directorio de datos MySQL, simplemente podemos usar la variable datadir. Veamos cómo usar la variable con la instrucción select.


La consulta es la siguiente:


mysql> select @@datadir;


Aquí está la salida


+-------------------------------------------------------------+

| @@datadir                                                                           |

+-------------------------------------------------------------+

| C:\ProgramData\MySQL\MySQL Server 8.0\Data\ |

+-------------------------------------------------------------+

1 row in set (0.00 sec)


Diccionario de datos MySQL 

Las tablas del diccionario de datos están protegidas y solo se puede acceder a ellas en compilaciones de depuración de MySQL. Sin embargo, MySQL admite el acceso a los datos almacenados en las tablas del diccionario de datos a través de tablas INFORMATION_SCHEMA y declaraciones SHOW. 

Las tablas del sistema MySQL todavía existen en MySQL 8.0 y se pueden ver emitiendo una instrucción SHOW TABLES en la base de datos del sistema mysql. En general, la diferencia entre las tablas del diccionario de datos de MySQL y las tablas del sistema es que las tablas del diccionario de datos contienen metadatos necesarios para ejecutar consultas SQL, mientras que las tablas del sistema contienen datos auxiliares, como la zona horaria e información de ayuda. Las tablas del sistema MySQL y las tablas del diccionario de datos también difieren en la forma en que se actualizan. El servidor MySQL administra las actualizaciones del diccionario de datos. Servidor SQL. Consulte Cómo se actualiza el diccionario de datos. La actualización de las tablas del sistema MySQL requiere ejecutar el procedimiento completo de actualización de MySQL.


1er Ejemplo:


mysql> SELECT * FROM INFORMATION_SCHEMA.SCHEMATA\G

*************************** 1. row ***************************

              CATALOG_NAME: def

               SCHEMA_NAME: mysql

DEFAULT_CHARACTER_SET_NAME: utf8mb4

    DEFAULT_COLLATION_NAME: utf8mb4_0900_ai_ci

                  SQL_PATH: NULL

        DEFAULT_ENCRYPTION: NO

*************************** 2. row ***************************

              CATALOG_NAME: def

               SCHEMA_NAME: information_schema

DEFAULT_CHARACTER_SET_NAME: utf8mb3

    DEFAULT_COLLATION_NAME: utf8mb3_general_ci

                  SQL_PATH: NULL

        DEFAULT_ENCRYPTION: NO

*************************** 3. row ***************************

              CATALOG_NAME: def

               SCHEMA_NAME: performance_schema

DEFAULT_CHARACTER_SET_NAME: utf8mb4

    DEFAULT_COLLATION_NAME: utf8mb4_0900_ai_ci

                  SQL_PATH: NULL

        DEFAULT_ENCRYPTION: NO

...


2do Ejemplo:


SHOW TABLES;


La salida seria algo asi:


+-----------------------------------+

|  Tables_in_database_name    |

+-----------------------------------+

| actions                                          |

| permissions                                 |

| permissions_roles                     |

| permissions_users                    |

| roles                                              |

| roles_users                                 |

| settings                                        |

| users                                             |

+-----------------------------------+

8 rows in set (0.00 sec)





MariaDB

MariaDB es un sistema de administración de bases de datos relacional de código abierto, gratuito y desarrollado por la comunidad. Es un fork de MySQL. El desarrollador original de MariaDB es Ulf Michael Widenius, fundador de MySQL AB y actual desarrollador principal y CTO de MariaDB.
MariaDB también está incluido en numerosas distribuciones de Linux, como CentOS, Debian y RHEL.
-Desarrollador: MariaDB Corporation Ab y MariaDB Foundation. 
-Última actualización de MariaDB: MariaDB 10.7.3.
-Licencia de MariaDB: GPL versión 2.


Directorio de datos MariaDB

De manera predeterminada, los servidores de bases de datos MySQL/MariaDB SQL colocan sus datos en el sistema de archivos raíz. Esto no es lo que desea en sus servidores de producción la mayor parte del tiempo. Es posible que desee colocar los datos del servidor de la base de datos en un disco duro o partición SSD diferente.


Puede encontrar el directorio de datos predeterminado de la base de datos MySQL/MariaDB muy fácilmente con el comando grep o egrep.


sudo grep -R --color datadir /etc/mysql/*

Como puede ver, el directorio de datos predeterminado para el servidor de la base de datos MariaDB es /var/lib/mysql. El archivo de configuración del servidor de la base de datos MariaDB es /etc/mysql/mariadb.conf.d/50-server.cnf. Si desea cambiar el directorio de datos predeterminado del servidor de base de datos MariaDB, debe cambiarlo en el archivo de configuración /etc/mysql/mariadb.conf.d/50-server.cnf



Si queremos cambiar de lugar el directorio

Lo primero es localizar el directorio actual y nada más fácil que entrar en MariaDB con el comando «mysql -u root .p» y desde el ejecutar «select @@datadir;·
Una vez tenemos el directorio, lo que hacemos es copiarlo a nuestra nueva ubicación con un cp recursivo (-r) y que nos guarde la información del modo, propietario y timestamp de todos los fichero (-p)

cp -r -p <directorio origen> <directorio destino>




Una vez tengamos estos datos en el nuevo directorio, asegurar que el usuario con el que arranca MariaDB tiene acceso, pararemos el servidor y cambiaremos la configuración en el fichero my.cnf.

service mariadb stop


Podemos tener varios my.cnf (o otro fichero de configuración) por lo que buscaremos en ellos donde tenemos definida la variable datadir que sera el que tenga la configuración propia del servidor. Recomiendo ver el enlace https://mariadb.com/kb/en/library/configuring-mariadb-with-mycnf/ en el que podremos ver las posibles localizaciones de los ficheros de configuración y el orden jerárquico en el que los lee. También se puede ver las diferentes secciones (a nosotros nos interesa [mysqld] por ser la de servidor tanto MariaDB como mysql) y a quien afecta si a la configuración de servidor o de cliente.

En nuestro caso vimos que la configuración con más prioridad y donde estaba configurado el directorio era el fichero «/etc/mysql/mariadb.conf.d(50-server.cnf» por lo que cambiamos la variable «datadir» a la nueva ubicación.


Y con esto ya esta, basta con volver a levantar el servicio y comprobar que se ha cambiado el directorio.




Diccionario de datos MariaDB

Con este comando nos mostrara un listado de todas las tablas y base de datos que se estan usando :

select table_schema, table_name from information_schema.tables where table_type = 'BASE TABLE' and table_schema not in ('information_schema','mysql', 'performance_schema','sys') order by table_schema, table_name;




Oracle

Oracle DBMS es un sistema de administración de bases de datos multi-modelo, comercial. También conocido como Oracle Database o simplemente Oracle. Se suele usar para ejecutar: procesamiento de transacciones online (OLTP) y almacenamiento de datos (Data warehousing).
-Desarrollador: Oracle Corporation.
-Última actualización LT de Oracle DBMS: Oracle DBMS 19c.
-Última actualización de Oracle DBMS: Oracle DBMS 21c.
-Licencia de Oracle DBMS: licencia propietaria.


Directorio de datos de Oracle
     Es una ubicación de en los nodos de cálculo que contienen binarios de Oracle Database. Las instancias de Exadata Cloud Service permiten que varias bases de datos compartan un juego de binarios de Oracle Database en una ubicación de directorio raíz de Oracle compartida.

Ejemplo:



Diccionario de datos Oracle
     A la manera de extraer el catálogo de objetos de una base de datos, nos referiremos a: tablas, usuarios, roles, vistas, columnas de las tablas, secuencias, constraints, sinónimos, índices, triggers, funciones etc.., esta información se encuentra contenida en tablas y vistas del sistema. Dichas tablas en base a las cuales podemos obtener esta información aplicando sentencias SQL.
     Oracle posee tres tipos de categoría de vistas a su diccionario de datos:


DBA: contiene información de todos los objetos que hay en los esquemas de la base de datos.
ALL: contiene información de todos los objetos a los que puede acceder el usuario.
USER: contiene información de objetos de propiedad del usuario actual.

Ejemplo:


1) Ver todas la vistas del Diccionario de Datos



2) Mostrar todas las tablas del Diccionario de Datos



PostgreSQL

PostgreSQL es un sistema de administración de bases de datos relacional (RDBMS) de código abierto y gratuito. Inicialmente se desarrolló como un sucesor de la base de datos Ingres, desarrollada por la Universidad de California, Berkeley.

-Desarrollador: PostgreSQL Global Development Group.

-Última actualización de PostgreSQL: PostgreSQL 14.2.

-Licencia de PostgreSQL: licencia PostgreSQL.


Directorio de datos de PostgreSQL

Primero debemos saber como PostgreSQL organiza los ficheros con nuestros datos en el disco. Todos los ficheros usados por PostgreSQL se encuentran en el directorio que hayamos definido como directorio de datos (data_directory) en nuestro sistema.


Dentro del directorio de datos encontraremos varios subdirectorios con diferentes cometidos.


    Ahora cuando deseamos mover el directorio de datos lo que debemos hacer es seguir los siguientes pasos que pondremos de ejemplo:

1. Detenemos el servicio postgres con el comando: 

/etc/init.d/postgresql-version stop


2. Cambiamos de nuevo al usuario postgres con el comando:

su postgres


3. Insertamos una unidad de almacenamiento USB en la Raspberry Pi donde alojaremos a partir de ahora nuestra base de datos. Para ello, copiamos el directorio postgres en la ubicación de nuestra unidad USB.

cp -Rf /var/lib/postgresql /ubicacionDeNuestroUSB/

chown postgres:postgres -R /ubicacionDeNuestroUSB/


4. Una vez termine el paso anterior, modificamos el archivo postgres.conf:

vi /etc/postgresql/version/main/

Dentro del archivo ubicamos la línea data_directory, la descomentamos y reemplazamos por algo así:

data_directory = ‘/ubicacionDeNuestroUSB/postgresql/version/main/’


5. Ahora debemos cambiar el vínculo existente para pgdata:

 cd /etc/postgresql/version/main/

mv pgdata pgdataold

ln -s /ubicacionDeNuestroUSB/postgresql/version/main/pgdata


6. Por último, reiniciamos el servicio de postgres:

/etc/init.d/postgresql-version start


Diccionario de datos de PostgreSQL

PostgreSQL proporciona de manera sencilla toda la información de los objetos que se encuentran en una base de datos a través de su INFORMATION SCHEMA.

Al consultar el INFORMATION_SCHEMA de PostgreSQL (que no es más que una serie de vistas que nos muestran la estructura de nuestras bases de datos) nos encontraremos toda la información referente tablas, vistas y campos contenidos dentro de las mismas.

Ejemplo de como generar el diccionario de datos

Las siguientes tablas son las que usaremos para generar nuestro diccionario de datos:

  • PG_CLASS.
  • TABLES.
  • COLUMNS.
  • TABLE_CONSTRAINTS.
  • KEY_COLUMN_USAGE.
  • REFERENTIAL_CONSTRAINTS.
  • CONSTRAINT_COLUMN_USAGE.

En adelante usaré "t1", "t2", "t3"... etc., como un alias para las tablas para simplificar las consultas.

Obtener las tablas y vistas de una base de datos en PostgreSQL

Para obtener las tablas y vistas contenidas dentro de una base de datos en PostgreSQL, vamos a acceder a la tabla INFORMATION_SCHEMA.TABLES y PG_CLASS (para obtener el OID de la tabla), y listaremos los campos TABLE_NAME (nombre de la tabla) y la función PG_CATALOG.OBJ_DESCRIPTION (para obtener comentario de la tabla), filtrando por el campo TABLE_SCHEMA (nombre del esquema de la base de datos), todo ello ordenado por TABLE_NAME (nombre de la tabla):





Obtener las columnas de una tabla o vista de una base de datos en PostgreSQL

Para obtener las columnas de una tabla en PostgreSQL, vamos a acceder a la tabla INFORMATION_SCHEMA.COLUMNS y PG_CLASS (para obtener el OID de la tabla), y listaremos los campos COLUMN_NAME (nombre de la columna), COLUMN_DEFAULT (valor por defecto de la columna), IS_NULLABLE (si la columna acepta o no valores nulos), DATA_TYPE (tipo de dato de la columna), NUMERIC_PRECISION ó CHARACTER_MAXIMUM_LENGTH (precisión del tipo de dato de la columna), la función PG_CATALOG.OBJ_DESCRIPTION (para obtener comentario de la tabla) y DOMAIN_NAME (nombre del dominio de la columna), esta vez filtrando por el campo TABLE_SCHEMA (nombre del esquema de la base de datos) y TABLE_NAME (nombre de la tabla), todo ello ordenado por ORDINAL_POSITION (orden de nuestra columna en la tabla):



Obtener las restricciones de las columnas de una tabla de una base de datos en PostgreSQL

Para obtener restricciones primarias y foráneas de las tablas de una base de datos en PostgreSQL, vamos a acceder a las tablas INFORMATION_SCHEMA.TABLE_CONSTRAINTS, INFORMATION_SCHEMA.KEY_COLUMN_USAGE, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS y INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE, y listaremos los campos CONSTRAINT_TYPE (tipo de restricción de la columna), COLUMN_NAME (nombre de la columna), CONSTRAINT_NAME (nombre de la restricción de la tabla y nombre de la restricción de la tabla referenciada), TABLE_NAME (nombre de tabla referenciada) y COLUMN_NAME (nombre de columna de tabla referenciada), filtrando por el campo TABLE_SCHEMA (nombre de base de datos), TABLE_NAME (nombre de la tabla) y COLUMN_NAME (nombre de la columna), todo ello ordenado por CONSTRAINT_TYPE (tipo de restricción):











Comentarios

Entradas populares