terça-feira, 24 de novembro de 2015

Fragmentando tablespace

 Fragmentação de tablespaces


 Passo 1 - connectar como dba
 a connect system/uninove
 b alter user sys identified by oracle
 c connect sys as sysdba senha:oracle


  passo2 - criando uma tablespa

 a select file_name from dba_data_files;
 b create tablespace tbs_teste

CREATE TABLESPACE tbs_teste
DATAFILE
'C:\APP\ALUNO\ORADATA\ORCL\arq_texte_01.dbf' SIZE 50 M reuse
extent management local
segment space management auto;

passo 3 criando um usuario

create user teste identified by teste
default tablespace tbs_teste
quota unlimited on tbs_teste;

passo 4 grant connect, resource to teste

passo 5 connectar com usuario teste
a criar uma tabela criente na tablespace criada
b criar uma sequence
c fazer uma carga de 100.000
d select count (*) from cliente


create table cliente(
id_cliente number(6),
nome_cliente varchar2(20),
cpf_cliente varchar2(20))
tablespace tbs_teste;


 create sequence
 sequencia_cliente
 start with 40;


 DECLARE
      contador INTEGER;
      CPF_CLI NUMBER(11):=35419972816;
     BEGIN
       contador := 1;
       while contador <= 100000 loop
               insert into cliente values (sequencia_cliente.nextval, 'marcio_marcelo', CPF_CLI);
              contador := contador + 1;
        CPF_CLI := CPF_CLI +1;
       end loop;
       commit;
    end;
  /

select count (*) from cliente;

passo 6 analisar a tabela

analyze table cliente compute statistics;

passo 7  consultar blocos livres e blocos utilizados

select a.blocks, b.blocks hwm, b.empty_blocks
from
user_segments a, user_tables b
where a. segment_name=b.table_name and
b.table_name='CLIENTE';

passo 8 deletando as linhas da tabela cliente

delete from cliente;
commit;

passo 9 analisar a tabela

analyze table cliente compute statistics;

passo 10 consulta dos blocos

select a.blocks, b.blocks hwm, b.empty_blocks
from
user_segments a, user_tables b
where a. segment_name=b.table_name and
b.table_name='CLIENTE';

passo 11 connectar administrador e efetuar
consulta dos extents utilizados
pelo segmento cliente

select extent_id,blocks,block_id from
dba_extents
where upper (segment_name)='CLIENTE' and upper(owner)='TESTE';

passo 12 criar e popular titulo
a connect teste/teste
b create table titulo (id number);
c insert into titulo select level from dual connect by level <=20000;

passo 13 consulta blocos livres e blocos usados

select a.blocks, b.blocks hwm, b.empty_blocks
from
user_segments a, user_tables b
where a. segment_name=b.table_name and
b.table_name='TITULO';

passo 14 consulta dos extents

select extent_id,blocks,block_id from
dba_extents
where upper (segment_name)='TITULO' and upper(owner)='TESTE';

passo 15 eliminar a fragmentação
connect teste/teste
a - alter table cliente move;
b - alter table cliente enable row movement;
c - alter table cliente shrink space;

passo 16  (no system) consulta dos extents do segmento cliente

select extent_id,blocks,block_id from
dba_extents
where upper (segment_name)='CLIENTE' and upper(owner)='TESTE';


quinta-feira, 5 de novembro de 2015

Consultar privilégios de usuário no Oracle

Estas são consultas úteis para identificar quais são os privilégios de um determinado usuário em base Oracle:

1) Privilégios de sistema: select privilege from dba_sys_privs where grantee = '<usuario>';

2) Privilégios em tabelas: select privilege from dba_tab_privs where grantee = '<usuario>';

3) Roles concedidas ao usuário: select granted_role from dba_role_privs where grantee = '<usuario>';

Para identificar quais são as ROLES e privilégios do usuário que você está conectado, existem essas duas consultas, que são mais simples:

1) Roles do meu usuário: select * from session_roles;

2) Privilégios do meu usuário: select * from session_privs;

quinta-feira, 1 de outubro de 2015

ALTERAR TABLESPACE

alter user MARCIO default tablespace BECODOSPOETAS;

Criando uma tablespace, usuário e uma tabela

Ante de começar você sabe o que é uma Tablespaces?
Um banco de dados é dividido em unidades lógicas de armazenamento, denominadas tablespaces, que podem ser usadas para agrupar estruturas lógicas relacionadas. Cada banco de dados está dividido logicamente em um ou mais tablespaces. Um ou mais arquivos de
dados são criados explicitamente para cada tablespace, de modo a armazenar fisicamente os dados de todas as estruturas lógicas de um tablespace.
Enfim, vamos ao que interessa, para criarmos uma tablespace, devemos logar com o usuário sys:
[oracle@oracle ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 – Production on Sat Apr 30 22:01:08 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production
With the Partitioning, OLAP and Data Mining options
Agora podemos rodar o comando create tablespace, para criar a tablespace:
CREATE TABLESPACE nome_tablespace LOGGING DATAFILE ‘/u01/app/oracle/oradata/TSH1/nome_tablespace.dbf’ SIZE 100m AUTOEXTEND ON NEXT 100m EXTENT MANAGEMENT LOCAL;
Ótimo, criamos uma tablespace e agora criamos um usuário no Oracle e vincular este usuário ao tablespace chamada nome_tablespace.
CREATE USER usuario IDENTIFIED BY senha DEFAULT TABLESPACE nome_tablespace QUOTA UNLIMITED ON  nome_tablespace;
Se tentarmos logar com este usuário, vai aparecer o seguinte erro:
[oracle@oracle ~]$ sqlplus usuario/senha
SQL*Plus: Release 10.2.0.1.0 – Production on Sat Apr 30 22:15:06 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
ERROR:
ORA-01045: user USUARIO lacks CREATE SESSION privilege; logon denied
Humm… esta faltando o grant de session, para que possamos logar com o usuario, vamos dar um grant para o usuário logar e abrir uma sessão:
GRANT CREATE SESSION TO usuario;
Consegui logar e agora vamos tentar criar uma tabela:
[oracle@oracle ~]$ sqlplus usuario/senha;
SQL*Plus: Release 10.2.0.1.0 – Production on Sat Apr 30 22:24:16 2011
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production
With the Partitioning, OLAP and Data Mining options
SQL> CREATE TABLE TABELA (
  2  nome VARCHAR(100),
  3  sobre_nome VARCHAR(100),
  4  Telefone CHAR(11),
  5  Endereco VARCHAR(30),
  6  Idade    NUMBER
  7  );
CREATE TABLE TABELA (
*
ERROR at line 1:
ORA-01031: insufficient privileges
Caramba ainda falta mais grant !!! este oracle é chatão neh ??? NÃO e NÃO, ele é SEGURO!!!! Vamos ao grant para a tabela, após tentamos criar novamente a tabela.
GRANT CREATE TABLE TO usuario;
CREATE TABLE TABELA (
nome VARCHAR(100),
sobre_nome VARCHAR(100),
Telefone CHAR(11),
Endereco VARCHAR(30),
Idade    NUMBER
);
table TABELA created.

Pronto, criamos a tabela, mais não vamos conseguir criar sequence, procedure, views e etc, para isso podemos colocar na mesma linha o grant, façamos desta maneira:
GRANT create session, alter session, create table, create procedure, create view, create materialized view, create trigger, create sequence, create any directory, create type, create synonym TO william;
Acho que é isso, espero que gostem.
Um abraço

FONTE http://aprenderoracle.com/2011/04/30/criando-uma-tablespace-um-usuario-e-uma-tabela/

exercicio resolvido

-script sql que construa as demandas solicitadas:

-criação de um usuario owner (schema / esquema) que será proprietário dos objetos dos objetos (tabelas,etc) da atividade.(videolar

-criar 1 usuario que terá um perfil de digitador c/ o seguinte nome ''dig01'' senha " clobo"

-criar 1 usuario que tera um perfil de gerente
c/ o seguinte nome "ger01"  senha "curitiba"

-o perfil digitador pode executar select, insert , update, delete via role nas tabelas de videolar.

-o perfil gerente pode somente select






resposta

create user videolar identified by lar;

 create table videolar.clientes(
 cpf number (10)primary key,
 Nom_cliente varchar2(30) not null,
 End_cliente varchar2(30) not null,
 Cidade varchar2(30) not null,
 Estado varchar2(30),
 Bairro varchar2(30),
 Telefone number (15)
 );

 create table videolar.genero(
 cod_genero number (10)primary key,
 nom_genero varchar2(30) not null
 );

 create table videolar.itens_locados(
 cod_locacao number (5),
 cod_filme number (10),
 valor_unitario number (10,2) not null
 );

alter table itens_locados add constraint item_PK primary key (cod_locacao,cod_filme);
alter table itens_locados add constraint locacao1_fk foreign key (cod_locacao) references locacao (cod_locacao);
alter table itens_locados add constraint fil_fk foreign key (cod_filme)  references filmes (cod_filme);

create table videolar.genero(
cod_genero number (10)primary key,
nom_genero varchar2(30) not null
);

create table videolar.locacao(
cod_locacao number (5)primary key,
cpf number (10),
data_locacao date not null,
data_devolucao date not null,
valor_total number (10,2)
);

alter table locacao add constraint locacao_fk foreign key (cpf) references clientes (cpf);

create table videolar.categoria(
cod_categoria number (5) primary key,
tipo_categoria varchar2(30),
valor_categoria number (10,2) null
);

alter table categoria add constraint ck_categoria check(tipo_categoria in ('OURO','PRATA','BRONZE'));

create table videolar.filmes(
cod_filme number (10)primary key,
cod_categoria number (5),
cod_genero number (5),
tit_filme varchar2(30),
ano_lancamento number (5),
tipo_midia varchar2(3) not null
);

alter table filmes add constraint cat_fk foreign key (cod_categoria) references categoria (cod_categoria);
alter table filmes add constraint gen_fk foreign key (cod_genero)references genero (cod_genero);
alter table filmes add constraint ck_midia check(tipo_midia in ('DVD','VHS'));

create table videolar.itens_locados(
cod_locacao number (5),
cod_filme number (10),
valor_unitario number (10,2) not null
);

alter table itens_locados add constraint item_PK primary key (cod_locacao,cod_filme);
alter table itens_locados add constraint locacao1_fk foreign key (cod_locacao) references locacao (cod_locacao);
alter table itens_locados add constraint fil_fk foreign key (cod_filme) references filmes (cod_filme);


insert into videolar.clientes values(10,'ANTONIO SERAFIN','RUA UVAIAS , 137','SAO PAULO','SP', 'SAUDE', 34528473);
insert into videolar.clientes values(20,'MARIA APARECIDA','RUA ANTONIO PRADO, 245','CAMPINAS','SP', 'SAO JOAQUIM', 87362390);
insert into videolar.clientes values(30,'JOSE AMADEU','RUA ALMIRANTE BARROSO, 512','SAO PAULO','SP', 'VILA FORMOSA', 98371235);
insert into videolar.clientes values(40,'CLAUDIO DA SILVA','RUA DA GLORIA, 9826','SAO PAULO','SP', 'VILA MARIANA', 54543972);
insert into videolar.filmes values(1,3,6,'LAGOA AZUL',1980,'VHS');
insert into videolar.filmes values(2,1,2,'HOME-ARANHA 3',2007,'DVD');
insert into videolar.filmes values(3,2,3,'PEQUENOS ESPIOES',2005,'DVD');
insert into videolar.filmes values(4,2,3,'SHREK',2005,'DVD');
insert into videolar.filmes values(5,3,1,'TITANIC',2002,'VHS');
insert into videolar.filmes values(6,3,6,'VIDAS PASSADAS',1997,'VHS');
insert into videolar.genero values (1,'DRAMA');
insert into videolar.genero values (2,'AVENTURA');
insert into videolar.genero values (3,'INFANTIL');
insert into videolar.genero value  (5,'COMEDIA');

COMMIT;

create role digitador;
create role gerente;
 

grant select,insert,update,delete on videolar.clientes to digitador;
grant select,insert,update,delete on videolar.genero to digitador;
grant select,insert,update,delete on videolar.locacao to digitador;
grant select,insert,update,delete on videolar.categoria to digitador;
grant select,insert,update,delete on videolar.filmes to digitador;
grant select,insert,update,delete on videolar.itens_locados to digitador;


grant digitador to dig01;


grant select on videolar.clientes to gerente;
grant select on videolar.genero to gerente;
grant select on videolar.categoria to gerente;
grant select on videolar.filmes to gerente;
grant select on videolar.itens_locados to gerente;
grant select on videolar.locacao to gerente;


grant connect to ger01;

grant connect to dig01;









alterar senha usuario

alter user USUARIO identified by nova_senha;

Dicionário de dados

Podemos dizer que dicionário de dados, é um conjuto de tabelas e views somente leitura, utilizado pelo banco de dados Oracle. Este conjunto é criado e mantido pelo Oracle e contém informações sobre o banco de dados, o dicionário de dados é estruturado em tabelas e views, da mesma forma que outros dados do banco. O dicionário de dados é uma importante ferramenta para todos os usuários, desde usuários finais até os desenvolvedores, inclusive os DBA’s. Para acessar o dicionário de dados, é utilizado as instruções de SQL, como dito acima, é somente leitura, então, só vamos conseguir usar o SELECT.  Todas as tabelas pertecem ao usuário SYS.
Que informações vamos encontrar na nas views de dicionário ?
As informações armazenadas no dicionário de dados incluem os nomes dos usuários do servidor Oracle, os privilegios concedidos aos usuários, os nomes dos objetos do banco de dados, as constraints de tabelas e as informações de auditoria. Há quatro categorias de views de dicionário de dados. Cada categoria possui um prefixo distinto que flete o uso pretendido.

PrefixoSignificado
USER_Contém detalhes dos objetos pertencentes ao usuário.
ALL_Contém detalhes dos objetos para os quais o usuário ganhou direitos de acesso e dos objetos pertencentes ao usuário.
DBA_Contém detalhes dos usuários com privilégios de DBA para acessar qualquer objeto do banco de dados.
V$_Armazena informações sobre o desempenho ou bloqueio do servidor do banco de dados; disponível para os administradores do banco.

Vejamos algumas views mais utilizadas:

Antes de começarmos a ver as tabelas do dicionário, podemos ver como elas se encontram dentro da tabela dicionário.
Select * from dictionary;

USER_TABLES: Exibe a descrição de todas as tabelas do usuário.
Select * from user_tables;

ALL_TABLES: Exibe a descrição de todas as tabelas do usuário e as que foram concedidas a ele, mesmo ele não sendo o owner.
SELECT * FROM all_tables;

USER_OBJECTS: Exibe todos os objetos pertencentes ao seu usuário.
SELECT * FROM user_objects;

ALL_OBJECTS: Exibe todos os objetos que pertencem ao usuário e aos quais tem acesso.
SELECT * FROM all_objects;

USER_TAB_COLUMNS: Você obter informações detalhadas sobre as colunas das suas tabelas. No qual, você é o dono.
SELECT * FROM user_tab_columns;

USER_CONSTRAINTS: Exibe as definições de constrainsts nas tabelas, pertencentes a seu usuário.
SELECT * FROM user_constraints;

USER_CONS_COLUMNS: Exibe as definições de constraints nas colunas das tabelas, pertencentes ao seu usuário
SELECT * FROM user_cons_columns;

USER_VIEWS: Exibe as views pertencentes ao seu usuário.
SELECT * FROM user_views;

USER_SEQUENCES: Exibe informações das sequences criadas, pelo seu usuário.
SELECT * FROM user_sequences;

USER_SYNONYMS: Exibe os synonyms pertencentes ao seu usuário.
SELECT * FROM user_synonyms;

USER_TAB_PRIVS_MADE: Exibe todas as conexões feitas aos objetos pertencentes ao usuário
SELECT * FROM user_tab_privs_made;

USER_COL_PRIVS_MADE: Exibe todas as concessões feitas às colunas de objetos pertencentes ao usuário.
SELECT * FROM user_col_privs_made;
Espero que tenham gostado.
Um abraço.

fonte : http://aprenderoracle.com/2011/05/13/dicionario-de-dados/