Directorios de Datos
¿Qué es un Directorio de Datos?
¿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
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.
Si queremos cambiar de lugar el directorio
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)
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.
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:
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
Publicar un comentario