Oracle Live

12/04/2016

CAP 3.- Multitenant Administración

Filed under: 1z0-060,Certificaciones — mogukiller @ 2:01 pm

En este capítulo se describen los comandos básicos para la administración de bases de datos multitenant.

1.- Conectar con CDB y PDB.

Para conectar con el CDB lo utilizaremos con el mecanismo normal. Exportando ORACLE_SID y conectando con sqlplus / as sysdba.

Para poder conectar a una PDB tenemos varias opciones:

Desde la CDB haciendo:

ALTER SESSION SET CONTAINER=DATOS1;

Por cada PDB se registra con el listener un servicio. Por lo que podemos añadir una entrada en el tnsnames

sqlplus sys/oracle@datos1

Oracle recomienda que unicamente se utilicen estos servicios para labores administrativas, que se creen servicios exclusivos para los usuarios.

Adicionalmente podemos crear servicios para un determinado PDB:


srvctl add service -d prueba -s DATOS -pdb datos1

Cuando ejecutamos comandos con CONTAINER=ALL tenemos que estar conectados a CDB$ROOT

2.- Common Users

Un common user se puede conectar al root o a cualquier PDB. Ademas se le pueden dar los roles de administración CDB_DBA y PDB_DBA.

Hay que tener en cuenta lo que no puede hacer un common user:

  • No puede bajar la instancia si esta conectado a una PDB.
  • Crear otras PDBs.
  • Ejecutar DDLs que afecten a CDB$ROOT.
  • Modificar parametros de inicio de la instancia.

Para crear un common user tenemos que tener en cuenta dos cosas:

  • Los usuarios deben de comenzar por c##
  • Utilizar la clausula CONTAINER=ALL.

Ejemplo:


CREATE USER c##MOGU IDENTIFIED BY temporal DEFAULT TABLESPACE cdb_tbs CONTAINER=ALL;

3.- Startup / Shutdown CDB y PDBs

En multitenant al compartir todas las PDBs la misma instancia, cuando se para el CDB se deja de tener acceso a todas las PDBs.

La gestión de la CDB se realiza de forma tradicional, conectado al container CDB$ROOT ejecutamos los comandos de STARTUP o SHUTDOWN. Unicamente tendremos acceso a las PDBs cuando la CDB este OPEN.


13:52:19 PRUEBA SQL>COL START_TIME FOR A30
13:52:20 PRUEBA SQL>SELECT CON_ID,DBID  ,NAME,OPEN_MODE ,TO_CHAR(OPEN_TIME, 'YYYY/MM/DD HH24:MI:SS') AS START_TIME      ,ROUND(TOTAL_SIZE / 1024 / 1024) AS "SIZE_MB"FROM V$CONTAINERS;

CON_ID       DBID NAME                           OPEN_MODE  START_TIME                        SIZE_MB
---------- ---------- ------------------------------ ---------- ------------------------------ ----------
1 4220353016 CDB$ROOT                       MOUNTED                                            0
2 1182393125 PDB$SEED                       MOUNTED                                            0
3  596486228 DATOS1                         MOUNTED                                            0
4 2221908874 DATOS3                         MOUNTED                                            0

13:52:20 PRUEBA SQL>alter database open;

Database altered.

13:52:41 PRUEBA SQL>COL START_TIME FOR A30
13:52:43 PRUEBA SQL>SELECT CON_ID,DBID  ,NAME,OPEN_MODE ,TO_CHAR(OPEN_TIME, 'YYYY/MM/DD HH24:MI:SS') AS START_TIME      ,ROUND(TOTAL_SIZE / 1024 / 1024) AS "SIZE_MB"FROM V$CONTAINERS;

CON_ID       DBID NAME                           OPEN_MODE  START_TIME                        SIZE_MB
---------- ---------- ------------------------------ ---------- ------------------------------ ----------
1 4220353016 CDB$ROOT                       READ WRITE 2016/04/12 13:52:34                     0
2 1182393125 PDB$SEED                       READ ONLY  2016/04/12 13:52:34                   775
3  596486228 DATOS1                         MOUNTED    2016/04/12 13:52:38                   965
4 2221908874 DATOS3                         MOUNTED                                            0

Hay que darse cuenta que una vez abierta la CDB las PDBs quedan en estado MONTED. Seria necesario abrirlas.

Para poder gestionar una PDB tenemos que saber en que estados puede estar:

  • OPEN READ WRITE
  • OPEN READ ONLY
  • OPEN MIGRATE (Cuando se va a hacer un upgrade)
  • MONTED

Un common user desde root puede cambiar el estado de una PDB.


ALTER PLUGGABLE DATABASE datos1 OPEN;

-- Se puede abrir todas las PDBs de una:

ALTER PLUGGABLE DATABASE all OPEN;

-- Para pararlas todas

ALTER PLUGGABLE DATABASE all CLOSE IMMEDIATE;

'nota: IMMEDIATE hace que se pare la PDB sin esperar las sesiones conectadas'

-- Otra opcion seria:

STARTUP PLUGGABLE DATABASE datos1 OPEN;

-- Se se esta conectado a la PDB se pueden utilizar SHUTDOWN para pararlo

SHUTDOWN IMMEDIATE;

4.- Modificar parametros de inicio

Al haber una unica instancia, unicamente hay un spfile. En una base de datos multitenant habrá parametros que afecten a todas las PDBs y habrá otros parámetros que se puedan particularizar por PDB.

Para saber si un parametro se puede particularizar para una instancia tenemos que consultar la columan V$PARAMETER.ISPDB_MODIFIABLE si esta a TRUE.

Para modificar un parametro de inicio para una determinada PDB, nos conectamos a esa PDB y ejecutamos ALTER SYSTEM de forma normal.

5.- Features de una CDB.

En una base de datos multitenat hay que tener en cuenta que cada PDB almacena sus propias estadisticas.

Que herramientas como SQL Tuning o ADDM unicamente se pueden ejecutar desde root. Para poder particularizarlo para una PDB hay que utilizar la clausula SET CONTAINER

6.- Vistas utiles

En las bases de datos multitenant ademas de las tipicas vistas V$ y DBA_ existen otras vistas CDB_.

Un commun user puede obtener de estas vistas informacion del CDB y de las PDBs pero tiene que estar conectado en CDB$ROOT. Cuando esta conectado a una PDB y consulta las CDB_xx obtiene informacion de la root y de la PDB en la que esta.

Desde las PDBs existe punteros metadata link para acceder a los metadatos almacenados en el diccionario de root. Y punteros object link que permite acceder tanto a los metadatos como a los datos almacenados en root.

Cuando queremos limitar la visibilidad de un usuario en una determinada vista haremos:


ALTER USER c##mogu SET container_data=(CDB$ROOT, datos1) FOR V$SESSION CONTAINER=CURRENT;

7.- Gestionar tablespace

En multitenant cada PDB tiene su propio tablespace SYS y SYSTEM.

Unicamete puede haber un tablespace de UNDO para todas las PDBs.

Cada PDB puede tener su propio tablespace temporar.

Para crear un tablespace en una PDB tenemos que estar conectados a esa PDB.

Cuando queramos modificar un tablespace tenemos que estar conectados en la PDB y utilizar la sentencia ALTER PLUGGABLE DATABASE.

8.- Gestion de privilegios

Tenemos local roles y common roles.

Hay que tener en cuenta que un common user puede tener diferentes privilegios en diferentes PDBs.

No se pueden crear local users en CDB$ROOT.

Un common user puede crear otro common user si tiene los privilegios de CREATE USER y SET CONTAINER.

Un local user unicamente puede asignar privilegios locales, pero pude recibir comunes y locales.

Para asignar un privilegio de forma comun haremos:


GRANT APP_ADMIN TO C##MOGU CONTAINER=ALL;

9.- Gestion de roles

Los roles comunes se crean en root y se ven en todos los PDBs. Commun roles se pueden asignar a common users y local users. Si un common role contiene privilegios locales, esos privilegios estaran activos unicamente en la PDB en la que este definido

Para crear un common role, tendremo que estar conectados en root y hacer:


CREATE ROLE c##admin_app CONTAINER=ALL;

 

Dejar un comentario »

Aún no hay comentarios.

RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Crea un blog o un sitio web gratuitos con WordPress.com.

A %d blogueros les gusta esto: