26
Cómo crear un nuevo esquema en Oracle paso a paso Submitted by cfb on 22 October, 2006 - 21:44 Bases de datos Oracle Administración Bases de datos Oracle create DBA esquema tablespace usuario Vamos a ver en tres sencillos pasos cómo crear un esquema de Oracle. Para poder crear un nuevo esquema de Oracle siguiendo estos pasos es necesario iniciar la sesión en la base de datos con un usuario con permisos de administración. Lo más sencillo es utilizar directamente el usuario SYSTEM: Creación de un tablespace para datos y otro para índices. Estos tablespaces son la ubicación donde se almacenarán los objetos del esquema de Oracle que vamos a crear. Tablespace para datos, con tamaño inicial de 1024 Mb, y auto extensible CREATE TABLESPACE "APPDAT" LOGGING DATAFILE '/export/home/oracle/oradata/datafiles/APPDAT.dbf' SIZE 1024M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO Tablespace para índices, con tamaño inicial de 512 Mb, y auto extensible

Cómo crear un nuevo esquema en Oracle paso a paso.docx

Embed Size (px)

Citation preview

Page 1: Cómo crear un nuevo esquema en Oracle paso a paso.docx

Cómo crear un nuevo esquema en Oracle paso a pasoSubmitted by cfb on 22 October, 2006 - 21:44

Bases de datos Oracle Administración Bases de datos Oracle create DBA esquema tablespace usuario

Vamos a ver en tres sencillos pasos cómo crear un esquema de Oracle. Para poder crear un nuevo esquema de Oracle siguiendo estos pasos es necesario iniciar la sesión en la base de datos con un usuario con permisos de administración. Lo más sencillo es utilizar directamente el usuario SYSTEM:

Creación de un tablespace para datos y otro para índices. Estos tablespaces son la ubicación donde se almacenarán los objetos del esquema de Oracle que vamos a crear.

Tablespace para datos, con tamaño inicial de 1024 Mb, y auto extensible

CREATE TABLESPACE "APPDAT" LOGGING DATAFILE '/export/home/oracle/oradata/datafiles/APPDAT.dbf' SIZE 1024M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO

Tablespace para índices, con tamaño inicial de 512 Mb, y auto extensible

CREATE TABLESPACE "APPIDX" LOGGING DATAFILE '/export/home/oracle/oradata/datafiles/APPIDX.dbf' SIZE 512M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO

La creación de estos tablespaces no es obligatoria, pero sí recomendable, así cada usuario de la BD tendrá su propio espacio de datos.

Creación del usuario que va a trabajar sobre estos tablespaces, y que será el propietario de los objetos que se se creen en ellos

Page 2: Cómo crear un nuevo esquema en Oracle paso a paso.docx

CREATE USER "APP" PROFILE "DEFAULT" IDENTIFIED BY "APPPWD"DEFAULT TABLESPACE "APPDAT" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK;

Si no se especifica un tablespace, la BD le asignará el tablespace USERS, que es el tablespace que se utiliza por defecto para los nuevos usuarios. Se puede apreciar también que no hay ninguna referencia al tablespace de índices APPIDX que hemos creado. Si queremos mantener datos e índices separados habrá que acordarse de especificar este tablespace en las sentencias de creación de índices de este usuario, si no se hace éstos se crearán en APPDAT:

CREATE INDEX mi_indice ON mi_tabla(mi_campo) TABLESPACE APPIDX;

Sólo falta asignarle los permisos necesarios para trabajar. Si se le asignan los roles 'Connect' y 'Resource' ya tiene los permisos mínimos, podrá conectarse a la base de datos y realizar las operaciones más habituales de consulta, modificación y creación de objetos en su propio esquema.

GRANT "CONNECT" TO "APP";GRANT "RESOURCE" TO "APP";

Completamos la asignación de permisos con privilegios específicos sobre objetos del esquema Oracle para asegurarnos de que el usuario pueda realizar todas las operaciones que creamos necesarias

GRANT ALTER ANY INDEX TO "APP";GRANT ALTER ANY SEQUENCE TO "APP";GRANT ALTER ANY TABLE TO "APP";GRANT ALTER ANY TRIGGER TO "APP";GRANT CREATE ANY INDEX TO "APP";GRANT CREATE ANY SEQUENCE TO "APP";GRANT CREATE ANY SYNONYM TO "APP";GRANT CREATE ANY TABLE TO "APP";GRANT CREATE ANY TRIGGER TO "APP";GRANT CREATE ANY VIEW TO "APP";GRANT CREATE PROCEDURE TO "APP";GRANT CREATE PUBLIC SYNONYM TO "APP";GRANT CREATE TRIGGER TO "APP";GRANT CREATE VIEW TO "APP";GRANT DELETE ANY TABLE TO "APP";GRANT DROP ANY INDEX TO "APP";GRANT DROP ANY SEQUENCE TO "APP";GRANT DROP ANY TABLE TO "APP";GRANT DROP ANY TRIGGER TO "APP";GRANT DROP ANY VIEW TO "APP";

Page 3: Cómo crear un nuevo esquema en Oracle paso a paso.docx

GRANT INSERT ANY TABLE TO "APP";GRANT QUERY REWRITE TO "APP";GRANT SELECT ANY TABLE TO "APP";GRANT UNLIMITED TABLESPACE TO "APP";

Ahora el usuario ya puede conectarse a la base de datos y comenzar a trabajar sobre su nuevo esquema Oracle.

Creación de tablasEn Oracle cada estructura de información se denomina TABLA, las cuales junto a los índices y al diccionario de datos del sistema, componen la base de datos. Por lo tanto, la creación de las tablas en el proceso de programación en Oracle juegan un papel muy importante. En el momento de crear las tablas se definen características a dos niveles: Tabla y Columna, como se muestra a continuación:

A nivel de tabla

Nombre: Nombre de la tabla puede ser de 1 a 30 caracteres.

Propietario: La tabla tiene como propietario al usuario que las crea.

Cantidad de columnas: Una tabla puede tener un máximo de 254 columnas.

A nivel de columna

Nombre: Puede tener de 1 a 30 caracteres.

Tipo de dato y su ancho

CHAR Máximo de 255 caracteres

NUMBER Máximo de 105 dígitos

INTEGER Nº sin decimal

DATE hasta 31/12/4712

LONG Tipo carácter con tamaño variable hasta 65535 bytes

RAW Dato en binario puro (imágenes y sonido)

LONGRAW Igual que long pero para almacenar datos en binario puro

Page 4: Cómo crear un nuevo esquema en Oracle paso a paso.docx

Restricciones: Su función es definir reglas de validación de la columna.

Para facilitar la continuidad del análisis, usaremos las tablas definidas como : Clientes y Ventas.

La definición de restricciones al crear las tablas permite establecer de validación de datos, así como los controles necesarios para mantener la integridad referencial entre tablas a través de las columnas claves. Las restricciones que se pueden definir son:

Valor obligatorio:En oracle existe el concepto de valor nulo (NULL) como un valor indefinido o ausencia del valor, y la inversa no nulo (NOT NULL) que es obligatorio de introducir.

Rango de valores:Sirven para chequear que el valor sea mayor a un valor determinado o para que se encuentre entre dos valores.

Clave primaria:Columnas que identifican de forma única al registro, es un valor único y no nulo.

Clave externa:Columna de la tabla que hace referencia a un valor que tiene que estar registrado en otra tabla

Destacadas estas cuestiones veamos, entonces cómo se procede para crear las tablas Clientes y Ventas:

Tabla Clientes

Objetivo:Ficha con datos para identificar al cliente. Consta del código del cliente (nº secuencial), fecha de alta al sistema, nombre, teléfono, dirección y alguna anotación.

RequisitosSe debe identificar a cada cliente con un código único (clave primaria), registrando su nombre teléfono y fecha de registro (estos datos son obligatorios). La dirección y anotaciones son campos opcionales.

Creación de la tabla:

CREATE TABLE clientes( codigo integer NOT NULL PRIMARY KEY, fecha date NOT NULL, nombre char(30) NOT NULL, telefono char(20) NOT NULL, direccion char(100), anotación long);

Tabla Ventas

Page 5: Cómo crear un nuevo esquema en Oracle paso a paso.docx

Objetivo:Registrar las ventas con la siguiente información: Código del cliente, fecha de la venta artículo y valor de la venta.

RequisitosEl número del cliente es una clave externa que hace referencia a la columna código en la tabla clientes. En este caso todos los datos son obligatorios. Se controla que la columna valor sea mayor a cero.

Creación de la tabla:

CREATE TABLE ventas( codigo integer NOT NULL REFERENCES clientes(codigo), fecha date NOT NULL, articulo char(20) NOT NULL, valor number(10,2) NOT NULL check (valor>0));<>Las restricciones de las claves primarias y clave externa se definieron a nivel de columna, pero se pueden definir a nivel de tabla, al final de la misma, como se muestra a continuación:

CREATE TABLE clientes( codigo integer NOT NULL , fecha date NOT NULL, nombre char(30) NOT NULL, telefono char(20) NOT NULL, direccion char(100), anotación long, PRIMARY KEY(codigo));CREATE TABLE ventas( codigo integer NOT NULL , fecha date NOT NULL, articulo char(20), valor number(6,2) NOT NULL check (valor>0), FOREIGN KEY (codigo) REFERENCES clientes(codigo) );

La definición a nivel de tabla es necesaria cuando la misma está formada por más de un columna.

Unicidad de la clave con índices

Para garantizar la unicidad de los valores de la clave primaria de la tabla Clientes (en la versión 6 donde esta restricción solo y no está activa), se debe crear un índice que garantice la unicidad de la clave principal. Un requisito importante para la unicidad de la clave principal es que las columnas de la clave se definen como NOT NULL.

A continuación mostraremos como crear un índice cliente_codigo para garantizar la unicidad de la clave primaria:

CREATE UNIQUE INDEX cliente_codigo ON clientes(codigo);

Page 6: Cómo crear un nuevo esquema en Oracle paso a paso.docx

Secuencias: codificación numérica

La codificación numérica del cliente se puede realizar con una secuencia que automáticamente genera los números enteros en orden ascendente , no siendo necesario recordar cual fue el último número asignado, con el uso del siguiente comando:

CREATE SEQUENCE codigo_cliente INCREMENT BY 1 START WITH 1;

Para registrar un nuevo código con la secuencia definida anteriormente se usa el pseudo-columna codigo_cliente.NEXTVAL, la cual nos dará el siguiente valor que le corresponde a la secuencia, la forma en que esto se realiza se explica más adelante cuando analicemos el ingreso de datos.

Para conocer el valor actual de la secuencia, es decir, el último código asignado, se usa la pseudo-columna codigo_cliente.CURRVAL, desde la tabla DUAL del sistema , cuyo fin es poder consultar pseudo-columnas (como se muestra a continuación):

SELECT user, sysdate,codigo_cliente.currval FROM DUAL;

donde:

1.- user es el nombre del usuario 2.- sysdate es la fecha del sistema 3.- codigo_cliente.currval es el último valor asignado a la secuencia

Scripts de creación de Base de Datos Oracle 9i y 10g

Compartir este post:

Page 7: Cómo crear un nuevo esquema en Oracle paso a paso.docx

En ciertas circunstancias un DBA debe ser capaz de crear una base de datos Oracle sin ayuda de los utilitarios gráficos disponibles en Oracle (DBCA).

Es bueno experimentar con la creación manual de bases de datos Oracle, ya que entrega una experiencia que permite entender y decantar muchos conceptos en relación al funcionamiento del motor Oracle.

Este artículo describe las tareas que el DBA debe realizar para crear una base de datos en ambiente (Linux-Unix) haciendo uso solo de la clásica consola de administración sqlplus.

Pasos para crear una base de datos Oracle:

1. Decidir nombre único para la instancia, nombre de base de datos, tamaño del bloque Oracle, set de caracteres, número máximo de archivos de datos, y número máximo de archivos de redolog.

2. Decidir la estructura de almacenamiento físico de la base de datos (ASM, File System, Raw Devices) . En el ejemplo se usa almacenamiento por file system, y se han definido y creado los puntos de montaje de acuerdo al modelo OFA de Oracle.

3. Copiar y editar el archivo de parámetros (init.ora) que permite inicializar la instancia Oracle.

4. Configurar las variables apropiadas del sistema operativo (ORACLE_SID), otras variables tales como ORACLE_HOME, ORACLE_BASE deberian estar previamente definidas.

5. Crear archivo de password (según el valor que se haya definido para el parámetro REMOTE_LOGIN_PASSWORDFILE)

6. Invocar el SQLPLUS y conectarse a la base como sysdba. 7. Iniciar la instancia en estado NOMOUNT. En este estado se crea una base de datos nueva. 8. Crear la base de datos (ejecutar script de creación de la base de datos)

Ejemplo de archivo de parámetro inittest.ora

*.audit_file_dest=’/u01/app/oracle/admin/test/adump’

*.background_dump_dest=’/u01/app/oracle/admin/test/bdump’*.compatible=’10.2.0.1.0′

*.control_files=’/u02/oradata/test/control01.ctl’, ‘/u02/oradata/test/control02.ctl’,'/u02/oradata/test/control03.ctl’*.core_dump_dest=’/u01/app/oracle/admin/test/cdump’*.db_block_size=8192*.db_domain=’midominio.cl’*.db_file_multiblock_read_count=16*.db_name=’test’*.db_recovery_file_dest=’/u01/app/oracle/flash_recovery_area’*.db_recovery_file_dest_size=2147483648*.dispatchers=’(PROTOCOL=TCP) (SERVICE=testXDB)’*.job_queue_processes=10*.open_cursors=300*.pga_aggregate_target=92274688

Page 8: Cómo crear un nuevo esquema en Oracle paso a paso.docx

*.processes=150*.remote_login_passwordfile=’EXCLUSIVE’*.sga_target=277872640*.undo_management=’AUTO’*.undo_tablespace=’TS_UNDO’*.user_dump_dest=’/u01/app/oracle/admin/test/udump’

Ver archivo inittest.ora inittest

Ejemplo de Creación Manual de Base de Datos Oracle 9i

En los ejemplos que vienen a continuación se ha preparado un archivo llamado inittest.ora que contiene los parámetros de la instancia llamada test.

u01/app/oracle/database/oracle9iR2/dbs >sqlplus “/ as sysdba”

SQL*Plus: Release 9.2.0.2.0 – Production on Wed Apr 05 14:08:37 2006

Copyright (c) 1982, 2002, Oracle Corporation.   All rights reserved.

Connected to an idle instance.

SQL> startup nomount pfile=?/dbs/inittest.oraORACLE instance started.

Total System Global Area   160925320 bytes Fixed Size                                     730760 bytes Variable Size                         109051904 bytes Database Buffers                     50331648 bytes Redo Buffers                                 811008 bytes

SQL> CREATE DATABASE testLOGFILE group 1 (‘/u01/oradata/test/redolog1a.dbf’,‘/u02/oradata/test/redolog1b.dbf’ ) SIZE 10M,group 2 (‘/u01/oradata/test/redolog2a.dbf’,‘/u02/oradata/test/redolog2b.dbf’ ) SIZE 10M,group 3 (‘/u01/oradata/test/redolog3a.dbf’,‘/u02/oradata /test/redolog3b.dbf’ ) SIZE 10MDATAFILE ‘/u02/oradata/test/system01.dbf’ SIZE 200MCHARACTER SET WE8ISO8859P1national character set utf8EXTENT MANAGEMENT LOCALundo tablespace ts_undodatafile ‘/u02/oradata/test/undo01.dbf’size 50Mdefault temporary tablespace ts_temp

Page 9: Cómo crear un nuevo esquema en Oracle paso a paso.docx

tempfile ‘/u02/oradata/test/temp01.dbf’size 50M autoextend on next 50M maxsize 300M;

Si se genera un error ORA-01031: insufficient privileges, eso significa que lo más probable, es que el usuario actual no está en el grupo dba (en unix), o en el grupo ORA_DBA (Windows).

Si el archivo init.ora no está en su ubicación por defecto o no se ha encontrado con el atributo pfile, se genera un error ORA-01078: failure in processing system parameters y   se emite un error LRM-00109: could not open parameter file ‘/u01/app/oracle/product/database/9.2.0/db_1/dbs/inittest.ora’

Ejemplo de Creación Manual de Base de Datos Oracle 10g

/u01/app/oracle/product/database/10.2.0/db_1/dbs >sqlplus “/ as sysdba”

SQL*Plus: Release 10.2.0.1.0 – Production on Wed Apr 05 14:08:37 2007

Copyright (c) 1982, 2002, Oracle Corporation.   All rights reserved.

Connected to an idle instance.

SQL> startup nomount pfile=?/dbs/inittest.oraORACLE instance started.

Total System Global Area   160925320 bytes Fixed Size                                     730760 bytes Variable Size                         109051904 bytes Database Buffers                     50331648 bytes Redo Buffers                                 811008 bytes

SQL>CREATE DATABASE testLOGFILE group 1 (‘/u01/oradata/test/redolog1a.dbf’,‘/u02/oradata/test/redolog1b.dbf’ ) SIZE 10M,group 2 (‘/u01/oradata/test/redolog2a.dbf’,‘/u02/oradata/test/redolog2b.dbf’ ) SIZE 10M,group 3 (‘/u01/oradata/test/redolog3a.dbf’,‘/u02/oradata/test/redolog3b.dbf’ ) SIZE 10MDATAFILE ‘/u02/oradata/test/system01.dbf’ SIZE 400M autoextend on next 16M maxsize unlimitedCHARACTER SET WE8ISO8859P1national character set utf8EXTENT MANAGEMENT LOCALsysaux datafile ‘/u02/oradata/test/sysaux01.dbf’ size 300M autoextend on next 16M maxsize unlimitedundo tablespace ts_undo

Page 10: Cómo crear un nuevo esquema en Oracle paso a paso.docx

datafile ‘/u02/oradata/test/undo01.dbf’ size 50M autoextend on next 16M maxsize unlimiteddefault temporary tablespace ts_temptempfile ‘/u02/oradata/test/temp01.dbf’ size 50M autoextend on next 50M maxsize 300M/

El comando anterior lo puede obtener haciendo clicl crea_db

El comando create database también ejecuta un archivo cuyo nombre es determinado por el parámetro de inicio (oculto) _init_sql_file. Después de la creación de la base de datos, ésta puede ser montada y abierta para su uso.

Una vez creada la base de datos cruda, se deben completar algunas tareas adicionales:

Tareas de post creación de la base de datos

Una vez que se ha creado la base datos con el comando create database, ésta debe ser complementada con la ejecución de algunos scripts para crear el catálogo y la opción procedural que permite ejecutar programas PL/SQL.

Ejecute como SYS·       ?/rdbms/admin/catalog.sql ·       ?/rdbms/admin/catproc.sql y

Donde ? representa un shortcut para el valor de la variable de ambiente $ORACLE_HOME (solo en sqlplus)

catalog.sql llama, por ejemplo, a catexp.sql que es un requisito para el utilitario exp que permite crear respaldos lógicos o dbmsstdx.sql que es un requisito para crear triggers.

El usuario   system también puede ejecutar ?/sqlplus/admin/pupbld.sql. pupbld.sql crea una tabla que permite bloquear a alguien más el uso de sqlplus.

8.2. CONCEDER Y REVOCAR PRIVILEGIOS

CONCEDER Y REVOCAR PRIVILEGIOS

Por default, nadie puede hacer nada en una Base de Datos Oracle. Como usuario no puede incluso conectarse sin el otorgamiento de un privilegio. Y una vez hecho esto, todavía no puede hacer nada útil (o peligroso) sin haber dado más privilegios. Los privilegios son asignados a las cuentas de usuarios con el comando GRANT y retirados con un REVOKE. Sintaxis adicional puede dar a usuario capacidad para conceder

Page 11: Cómo crear un nuevo esquema en Oracle paso a paso.docx

privilegios a otros usuarios. Por defecto sol el DBA (SYS y SYSTEM) tiene el derecho para conceder

Los privilegios vienen en dos grupos: Privilegios de sistemas que (generalmente hablando) permite a a los usuarios desarrollar acciones que afecten el diccionario de datos y privilegios de objeto que permiten a los usuarios desarrollar acciones que afectan los datos.

PRIVILEGIOS DE SISTEMA.Hay cerca de dos cientos privilegios de sistema. La mayoría aplica para acciones que afectan el diccionario de datos, tales como creación de tablas o usuarios. Otros afectan la Base de Datos o la Instancia, tales como creación de Tablespaces, modificar valores de los parámetros de instancia, o el establecimiento de una sesión. Algunos de los más comúnmente utilizados son:

• CREATE SESSION este permite a los usuarios conectarse, sin este, no puede incluso loguearse en la Base de Datos.• RESTRICTED SESSION si la Base de Datos es iniciada con STARTUP RESTRICT, o modificada con ALTER SYSTEM ENABLE RESTRICTED SESSION, solo los usuarios con este privilegio serán capaz de conectarse.

• ALTER DATABASE da acceso a muchos comandos necesarios para modificar estructuras físicas.

• ALTER SYSTEM Da control total sobre parámetros de instancia y estructuras de memoria.

• CREATE TABLESPACE con los privilegios ALTER TABLESPACE y DROP TABLESPACE, este permitirá a los usuarios gestionar Tablespaces.

• CREATE TABLE permite al concesionario crear tablas en su propio esquema; incluso la capacidad para alterar y eliminarlos, para ejecutar SELECT y comandos DML sobre ellos, y para crear, alterar o eliminar índices sobre ellos.

• GRANT ANY OBJECT PRIVILEGE permite al concesionario conceder permisos de objetos sobre objetos que él no posee a otros pero no para si misma.

• CREATE ANY TACLE el concecionario puede crear tablas que pertenecen a otros usuarios.

• DROP ANY TABLE. El concesionario puede eliminar tablas pertenecientes a otros usuarios.

• INSERT ANY TABLE, UPDATE ANY TABLE, DELETE ANY TABLE el concesionario puede ejecutar estos commandos DML contra tablas propiedad de todos los demas usuarios.

Page 12: Cómo crear un nuevo esquema en Oracle paso a paso.docx

• SELECT ANY TABLE el concesionarios puede SELECT cualquier tabla en la Base de Datos.

La sintaxis para otorgar privilegios de sistema es:

GRANT privilege [, privilege...] TO username ;

Despues de crear una cuenta de usuario, un comando tal como este otorgará los privilegios de sistema comúnmente asignado a usuario que estarán involucrados en el desarrollo de aplicaciones:

grant create session, alter session,create table, create view, create synonym, create cluster,create database link, create sequence,create trigger, create type, create procedure, create operatorto username ;

Estos privilegios le permiten al usuario conectarse y configurar su sesión, y entonces crear objetos para almacenar datos y objetos PL/SQL. Estos objetos solo pueden existir en su propio esquema; no tendrá privilegios contra cualquier otro esquema. La creación de objetos también se verá limitada por la cuota puede haber sido asignado en varios Tablespaces.Una variación en la sintaxis le permite pasar sus privilegios a otros terceros. Por ejemplo:

connect system/oracle;grant create table to scott with admin option;connect scott/tiger;grant create table to jon;

Este da a SCOTT la capacidad para crear tablas en su propio esquema, y también para emitir el mismo el comando GRANT. En este ejemplo. Se le permite a JON crear tablas también. Pero JON solo será capaz para crear en su propio esquema. La figura 8-5 muestra el resultado de los otorgamientos según lo presentado por el Database Control. La misma información puede ser recogida por una consulta a la vista DBA_SYS_PRIVS.

EXAMEN

Page 13: Cómo crear un nuevo esquema en Oracle paso a paso.docx

La revocación de unos privilegios de sistema no es en cascada (a diferencia de una revocación de privilegio de objeto)

Si un privilegio es revocado de un usuario, cualquier acción realizada que se realiza con ese privilegio (tales como crear tablas) permanecerá intacta. También, si ha sido otorgado y había utilizado el ADMIN OPTION, cualquier usuario a quien le paso el privilegio lo retendrá. Hay registro guardado del otorgante de un privilegio de sistema, por lo que no es posible un REVOKE en cascada.La figura 8-6 ilustra esto. El privilegio ANY da permiso contra todos los objetos relevantes en la Base de Datos.

Por lo tanto,

grant select any table to scott;

Page 14: Cómo crear un nuevo esquema en Oracle paso a paso.docx

Permitirá a SCOTT consultar cualquier tabla en cualquier esquema en la Base de Datos. Es a menudo considerado mala práctica otorgar el privilegio ANY a cualquier otro usuario que el administrador de sistemas.

EN EL TRABAJOEn realidad, no es tan peligroso ahora como con versiones anteriores. Ya no se incluyen tablas en el esquema SYS, por lo que el diccionario de datos esta todavía protegido. Pero ANY debe ser utilizado con extrema precaución, ya que elimina toda la protección de las tablas de usuarios.

PRIVILEGIOS DE OBJETOS

Los privilegios de objeto dan la capacidad para realizar los comandos SELECT, INSERT, UPDATE y DELETE contra tabla y objetos relacionados, y para ejecutar objetos PL/SQL. Estos privilegios no existen para los objetos propios en el esquema del usuario.

Si un usuario tiene el privilegio de sistema CRETA TABLE, puede realizar operaciones SELECT y DML contra las tablas que el crea sin la necesidad de adicionar permisos.

EXAMEN

El privilegio ANY, que concede permisos contra objetos en cualquier cuenta de usuario en la Base de Datos, no es privilegio de objeto, son privilegios de sistemas.

Los privilegios de objetos aplicados a los diferentes tipos de objetos

La sintaxis es.GRANT privilege ON schema.object TO username [WITH GRANT OPTION] ;

Por ejemplo:grant select on hr.regions to scott;

Page 15: Cómo crear un nuevo esquema en Oracle paso a paso.docx

Las variaciones incluyen el uso de ALL, que aplicará todos los permisos relevantes al tipo de objeto, y nombramiento de columnas particulares de vistas y tablas.

grant select on hr.employees to scott;grant update (salary) on hr.employees to scott;grant all on hr.regions to scott;

Este código permitirá a SCOTT consultar todas las columnas de la tabla HR EMPLOYEES pero solo escribir a una columna nominada, SALARY. Luego SCOTT da tolos los privilegios (SELECT y DML) de objeto sobre la tabla HR REGIONS. La figura 8-7 muestra el resultado de esto, como vista en el Database Control.

EN EL TRABAJO

Otorgar privilegios a nivel de columna es a menudo ser una mala práctica debido a la carga de trabajo masivo que involucra. Si es necesario restringir el acceso a algunas personas a ciertas columnas, creando una vista que muestra solo las columnas a menudo será buena alternativa.

Utilizando WITH GRANT OPTION (o con el Database Control, seleccionado el Check Box GRANT OPTION como se muestra en la figura 8-7) permite a un usuario pasar sus privilegios de objeto sobre un tercer usuario. Oracle mantiene un registro de quien otorgo privilegios de objeto a quien. Esto permite un REVOKE sobre un objeto en cascada para todos estos en la cadena. Considere esta secuencia de comandos:

connect hr/hr;

Page 16: Cómo crear un nuevo esquema en Oracle paso a paso.docx

grant select on employees to scott with grant option;connect scott/tiger;grant select on hr.employees to jon with grant option;conn jon/jon;grant select on hr.employees to sue;connect hr/hr;revoke select on employees from scott;

En la conclusión de este comando, ni SCOTT ni JON ni SUE tiene el privilegio SELECT contra HR.EMPLOYEES.

EXAMENLa revocación de un privilegio de objeto es en cascada (a diferencia de un privilegio de sistema)

EJERCICIO 8-2.OTORGANDO PRIVILEGIOS DIRECTOS.En este ejercicio, usted otorgará algunos privilegios a los usuarios creados en el ejercicio 8-1 y probar que funcionan.

1. Conéctese a su Base de Datos como usuario SYSTEM con SQL*PLUS.

2. Otorgue CREATE SESSION al usuario ALOIS:grant create sessions to alois;

3. Abrir otra sesión SQL*PLUS, y conéctese como ALOIS. Esta vez, el Login tendrá éxito. connect alois/oracle

4. Como ALOIS, intente crear una Tabla:create table t1 (c1 date);Esta fallara con el mensaje “ORA-01031: insufficient privileges”

5. En la sesión SYSTEM, otorgue a ALOIS el privilegio CREATE TABLE:grant create table to alois;

6. En la sesión ALOIS, intente nuevamente:create table t1 (c1 date);Este fallará con el mensaje “ORA-01950: no privileges on Tablespace ‘EXAMPLE’.”

Page 17: Cómo crear un nuevo esquema en Oracle paso a paso.docx

7. En la sesión de SYSTEM, dar a ALOIS una quota en el Tablespace EXAMPLE:alter user alois quota 1m on example;

8. En la session ALOIS, intente nuevamente, esta vez, la creación tendrá éxito.

9. Como ALOIS, conceda privilegios de objeto sobre la nueva Tabla:grant all on t1 to afra;grant select on t1 to anja;

10. Conectese al Database Control como SYSTEM.

11. Confirme que los privilegios de objeto han sido otorgados.  

La ruta de navegación desde la página principal del Database Control es: sobre la ficha Schema dar clic al link Table en la sección Database Objects. Ingrese ALOIS cono el esquema y T1 como la tabla y dar clic en el botón Go. En la lista de Accions, seleccione Objects Privileges. Como lo muestra la siguiente ilustración, ANJA solo tiene SELECT, pero AFRA tiene todo. Tenga en cuenta que la ventana también muestra por quien los privilegios fueron concedidos, y que ninguno de ellos fue concedido con WITH GRANT OPTION

12. Con el Database Control, confirme que privilegios tiene otorgado ALOIS. La ruta de navegación desde la pagina principal de la Base de Datos es: sobre la ficha Server dar clic al link Users en la sesión de Seguridad, seleccione el Radio Button para ALOIS, dar

Page 18: Cómo crear un nuevo esquema en Oracle paso a paso.docx

clic al View Botón. Usted vera que tiene dos privilegios de sistema (CREATE SESSION y CREATE TABLE)sin la opción ADMIN OPTION, un 1MB de quota en EXAMPLE y nada más.

13. Recupere la misma información mostrada en los pasos 11 y 12 con SQL*PLUS. Como SYSTEM ejecute esta consulta:

select grantee,privilege,grantor,grantable from dba_tab_privswhere owner='ALOIS' and table_name='T1';select * from dba_sys_privs where grantee='ALOIS';14. Revoque los privilegios concedidos a AFRA y ANJA:revoke all on alois.t1 from afra;revoke all on alois.t1 from anja;

Manual de Oracle Conexión TNS Es el nombre por el que se conocen las instancias de una base de datos Oracle en una red. El nombre de servicio TNS se asigna al configurar la conectividad a la base de datos de Oracle. La replicación utiliza el nombre de servicio TNS para identificar al suscriptor y establecer las conexiones.

Una vez finalizada la instalación con Oracle Universal Installer, utilice Net Configuration Assistant para configurar la conectividad de red. Debe proporcionar cuatro grupos de información para configurar la conectividad de red. El administrador de base de datos de Oracle configura la red al instalar la base de datos y la escucha, y debería poder proporcionar esta información si el usuario no la tiene. Debe realizar las siguientes acciones:

Acción Descripción

Identificar la base de datos Existen dos métodos para identificar la base de datos. El primer método utiliza el Identificador de sistema (SID) de Oracle y está disponible en cada versión de Oracle. El segundo método utiliza el Nombre de servicio, que está disponible a partir de Oracle versión 8.0. Los dos métodos utilizan un valor que se configura al crear la base de datos y es importante que la configuración de red de cliente use el mismo método de nomenclatura que utilizó el administrador al configurar la escucha para la base de datos.

Identificar un alias de red para la base de datos Se debe especificar un alias de red, que se utilizará para tener acceso a la base de datos de Oracle. El alias de red es básicamente un puntero al SID o al Nombre de servicio remoto que se configuró al crear la base de datos; tiene nombres distintos en las diferentes versiones y productos de Oracle, incluidos Net Service Name y TNS Alias.

Page 19: Cómo crear un nuevo esquema en Oracle paso a paso.docx

SQL*Plus solicita este alias como el parámetro "Host String" (Cadena de host) cuando se inicia la sesión.

Seleccionar el protocolo de red Seleccione los protocolos que desee admitir. La mayoría de aplicaciones utilizan TCP.

Especificar la información de host para identificar las escuchas de base de datos El host es el nombre o el alias de DNS del equipo donde se está ejecutando la escucha de Oracle, que normalmente es el mismo equipo donde reside la base de datos. En algunos protocolos, se debe proporcionar información adicional. Por ejemplo, si se selecciona TCP, se debe proporcionar el puerto donde se escuchan las solicitudes de conexión a la base de datos de destino. La configuración predeterminada de TCP utiliza el puerto 1521.

Configurar permisos de directorio

La cuenta que se ejecuta el servicio SQL Server en el distribuidor deben concederse permisos de lectura y ejecución para el directorio (y todos los subdirectorios) en el que esté instalado el software de red de cliente de Oracle.

Comprobar la conectividad entre el distribuidor de SQL Server y el publicador de Oracle

Casi al final del asistente para configuración de redes puede que aparezca una opción para comprobar la conexión al publicador de Oracle. Antes de comprobar la conexión, asegúrese de que la instancia de la base de datos de Oracle está en línea y que la Escucha de Oracle está ejecutándose. Si la comprobación no es correcta, póngase en contacto con el administrador de bases de datos de Oracle responsable de la base de datos a la intenta conectarse.

Después de realizar una conexión correcta al publicador de Oracle, intente iniciar la sesión en la base de datos con la cuenta y la contraseña configurados para el Agente de distribución de la suscripción.

Haga clic en Inicio y, a continuación, en Ejecutar.

Escriba cmd y haga clic en Aceptar.

En el símbolo del sistema, escriba:

sqlplus /@

Por ejemplo: sqlplus replication/$tr0ngPasswerd@Oracle90Server

Si la configuración de red es correcta, se iniciará la sesión.

Page 20: Cómo crear un nuevo esquema en Oracle paso a paso.docx

Manual de Oracle Datafiles Es la representación física de un Tablespace. Son los "ficheros de datos" donde se almacena la información físicamente, puede tener cualquier nombre y extensión (siempre dentro de las limitaciones del sistema operativo), y puede estar localizado en cualquier directorio del disco duro.

Un Datafiles tiene un tamaño predefinido en su creación (por ejemplo 100Mb) y este puede ser alterado en cualquier momento. Cuando creemos un Datafiles, este ocupará tanto espacio en disco como hayamos indicado en su creación, aunque internamente esté vacío.

Oracle hace esto para reservar espacio continuo en disco y evitar así la fragmentación. Conforme se vayan creando objetos en ese Tablespace, se irá ocupando el espacio que creó inicialmente.

Características:

• Archivo físico donde se almacenan los datos.

• Es el espacio de memoria concedido al usuario para que interactué con el SGA.

• Un Datafiles esta asociado a un solo Tablespace.

• Se pueden extender automáticamente cuando la BD necesita espacio.

Usuarios.- Objetos con información propia del usuario al que estamos conectado.

Características:

• Accesible desde todos los usuarios.

• Proporcionan menos información que los objetos DBA

• Los datos son almacenados en la tabla: DBA.USER