Conselhos sobre tablespace e inicio de estudos

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
Responder
Rafael_Santos
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 72
Registrado em: Sex, 18 Nov 2011 4:51 pm

Olá Senhores,
já venho a um tempo estudando para OCA e fiquei interessado em aprofundar alguns conhecimentos.
Durante a caminhada de estudos fiquei interessado em criar um usuário especifico para estudos.
Criei um usuário estudante, tablespace users e temporary tablespace temp.
Então criei roles para esse usuário que seriam select para todas as tabelas dos schemas HR e OE e concedi create table, view e trigger para o estudante.
Quando realizei os testes vi que o usuário estudante não podia criar tabelas pois a tablespace user não possui essa permissão. "ERRO ORA-01950: não há privilégios no tablespace USERS".

Minhas perguntas:
Para todos grants do concedidos a um user também devem ser feitos a uma tablespace?
A melhor maneira para criar um usuário estudante, seria criar um database ou uma tablespace?
O que estou fazendo é interessante para a carreira de DBA?

Abraços e grato pela ajuda concedida.
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Oi Raphael !

Seria legal você atribuir duas permissões especiais para que um usuário criado por você (ex: XPTO) possa trabalhar com tablespaces (ex: TBS_XPTO):

Execute estes comandos:

Selecionar tudo

 ALTER USER <XPTO> DEFAULT TABLESPACE <TBS_XPTO>;
 ALTER USER <XPTO> QUOTA UNLIMITED ON <TBS_XPTO>;
Você deve repetir estes dois comandos para todas as tablespaces em que você deseja que seu usuário "XPTO" crie tabelas ou índices.

O primeiro comando (DEFAULT) indica que qualquer TABELA ou INDICE criado por você seja armazenado na tablespace "TBS_XPTO". Os objetos serão criados automaticamente lá, quando você deixar de mencionar o nome da tablespace nos comandos CREATE TABLE ou CREATE INDEX.

O segundo comando (QUOTA) indica que você terá permissão de usar o espaço das tablespaces mencionadas (ex: TBS_XPTO) para a criação de TABELAS ou INDICES.

Eu prefiro sempre restringir as permissões dos usuários para que eles só trabalhem com as tablespaces planejadas por mim. Não gosto muito de dar permissões généricas do tipo "DBA", "UNLIMITED TABLESPACE", etc. A princípio, parece mais simples para o DBA, mas tenha em mente que permissões além do recomendado podem "zonear" a administração do seu banco de dados no futuro.

Ah, não sei se você tomou este cuidado ao criar o seu usuário "XPTO", mas te recomendaria mais um comando, que precisaria ser executado uma única vez:

Selecionar tudo

ALTER USER <XPTO> TEMPORARY TABLESPACE TEMP;
O comando acima permitirá que seu usuário XPTO utilize a tablespace TEMP para ordenações e outras operações que não possam ser executadas em memória. Também impedirá que as ordenações físicas sejam realizadas na tablespace SYSTEM.

Um grande abraço e bons estudos.

Sergio Coutinho
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Raphael,

Tinha esquecido as suas perguntas -rsss - Vamos lá :

A) Para todos grants do concedidos a um user também devem ser feitos a uma tablespace?
R: Então, aplique os comandos que te expliquei no post anterior. Se você precisa que seu usuário crie tabelas/indices em 4 tablespaces - por exemplo - então repita os dois comandos para cada uma delas.

B) A melhor maneira para criar um usuário estudante, seria criar um database ou uma tablespace?

R: Você não precisa criar um novo DATABASE ou TABLESPACE para trabalhar com um usuário estudante. Digamos que você tenha uma base XE já criada. Você pode criar o usuário XPTO e pedir para ele usar a tablespace USERS e TEMP desta base XE.
Mas pra efeitos de estudos como DBA, para aprender a usar melhor os recursos do banco, te recomendo seguir este roteiro ao criar um novo usuário:
- Criar uma profile de banco;
- Criar uma role de banco;
- Criar uma tablespace de dados e uma outra para indices;
- Criar o novo usuário;
- Atribuir permissões a este usuário (tablespaces) e à role ;
- Atribuir a role ao usuário;
- Atribuir o profile ao usuário;

C) O que estou fazendo é interessante para a carreira de DBA?
R: Se o seu objetivo é se tornar um DBA eu diria que sua postura é simplesmente excelente para um iniciante!
Se você tem uma base para seu uso pessoal, não tenha medo em testar todos os comandos relacionados com a administração e segurança de usuários. Não fique administrando o banco por páginas WEB, pois algum dia você pode ser obrigado a sentar na frente de um terminal UNIX e só irá dispor de uma senha de acesso pra resolver os problemas.

Fique à vontade para postar outras dúvidas no forum. Tenho certeza que os colegas terão prazer em ajudar uma pessoa interessada em aprender!

Um grande abraço e bons estudo !

Sergio Coutinho
Rafael_Santos
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 72
Registrado em: Sex, 18 Nov 2011 4:51 pm

Coutinho, entendi quase tudo.

Você me disse para criar duas tablespaces uma para dados e outra para índices, mas se eu realizar o comando que me disse:
O primeiro comando (DEFAULT) indica que qualquer TABELA ou ÍNDICE criado por você seja armazenado na tablespace "TBS_XPTO".
Como poderei designar para aquele usuário que quando ele criar um índice, o índice vai para tablespace XPTO2 enquanto a tabela e dados ficam na tablespace XPTO1.

Como faço isso, não entendi muito bem, tem como explicar?

Abraços e muito obrigado Coutinho
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Oi Rafa,

Eu mencionei tablespace de DADOS e INDICES mais por uma questão de organização. Uma tablespace pode armazenar tabelas ou índices, e o ORACLE não vai saber identificar onde uma tabela ou índice deverá ser criado.

Você precisará sempre complementar seus comandos de CREATE com o parâmetro TABLESPACE.

Ex:

Selecionar tudo

CREATE TABLE <TAB_XPTO> .... TABLESPACE <TS_XPTO_DAT>;
CREATE INDEX  <IDX_XPTO> ....  TABLESPACE <TS_XPTO_IDX>;
Se você esquecer ou intencionalmente não completar estes comandos de CREATE com o "TABLESPACE <..>" então o ORACLE automaticamente vai criar o objeto (tabela/indice) na tablespace que você indicou com o comando

Selecionar tudo

ALTER USER DEFAULT TABLESPACE <..>
Abraços,

Sergio Coutinho
Rafael_Santos
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 72
Registrado em: Sex, 18 Nov 2011 4:51 pm

Entendi Coutinho, obrigado.
Só mais uma pergunta, é possível conceder permissão a uma tablespace?

Eu não entendi um acontecimento que ocorreu no meu banco.
Criei uma tablespace
Alterei o usuário para ter como tablespace default a tablespace criada
Concedi permissão ao usuário de criar tabelas

Depois quando tentei criar uma tabela na tablespace, apareceu um erro que não possui permissão para criar naquela tablespace.

Pesquisei o comando que me disse QUOTA

Selecionar tudo

ALTER USER <XPTO> QUOTA UNLIMITED ON <TBS_XPTO>;
E quando realizei este comando o meu usuário conseguiu criar tabela.

Agora veja se meu raciocínio está correto:

Uma vez que liberei espaço indeterminado para este usuário, ele poderá utilizar espaço, uma vez que antes ele não possuía espaço definido para utilizar. Ou seja todo usuário que for criar algo precisa ter um espaço limitado nem que seja UNLIMITED. Meu raciocínio está correto?

Muito obrigado Coutinho
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Rafa,

Com o comando QUOTA UNLIMITED, os objetos criados pelo usuário podem ocupar todo o espaço da tablespace. Lembre que uma tabela/indice, se contém dados, ocupa espaço na tablespace.

Você não precisa obrigatoriamente usar o parâmetro UNLIMITED. Pode-se mencionar um espaço máximo que seus objetos vão ocupar nesta tablespace. Eu prefiro no entanto usar o UNLIMITED.

Então este comando (QUOTA), além de permitir a criação de objetos de um determinado usuário em uma tablespace, também estabelece um limite máximo consumido por estes objetos dentro da tablespace.

Abraços,

Sergio Coutinho
Rafael_Santos
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 72
Registrado em: Sex, 18 Nov 2011 4:51 pm

Obrigado Coutinho
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 12 visitantes