Arquivos de Categoria: Sistemas Operacionais

Banco de Dados II – Aula 09

Criando uma table space e usuário no Oracle 11 XE

Necessário entrar com a permissão de system, ou admin diretamente pelo SQL Plus.

Pode-se salvar o arquivo diretamente no diretório home do usuário oracle e executar o script através do SQL Plus*

create tablespace banco1 datafile '/u01/app/oracle/oradata/XE/banco1.dbf' size 10m autoextend on next 5m maxsize 50m online permanent extent management local autoallocate segment space management auto;

create user banco1 identified by banco1 default tablespace banco1 temporary tablespace temp;

grant create session, connect, resource to banco1;

alter user banco1 quota unlimited on banco1; 

connect banco1/banco1;

Até o momento, foi criado a table space chamada de banco1, um usuário banco1 com a senha banco1 e dados permissões de acesso ao usuário banco1

Após a conexão, podemos criar a as tabelas abaixo, fazendo as inserções de dados abaixo como exemplo:

CREATE TABLE DEPTO (
  CDDEPTO CHAR(02) PRIMARY KEY,
  NMDEPTO VARCHAR(30),
  RAMAL NUMBER(3)
);

CREATE TABLE CARGO (
  CDCARGO CHAR(02) PRIMARY KEY,
  NMCARGO VARCHAR(30),
  VRSALARIO NUMBER(8,2)
);

CREATE TABLE FUNCIONARIO (
  NRMATRIC NUMBER(04) PRIMARY KEY,
  NMFUNC   VARCHAR(30),
  DTADM    DATE,
  SEXO     CHAR(01),
  CDCARGO  CHAR(02),
  CDDEPTO  CHAR(02),
  CONSTRAINT FK_FUNC_CDCARGO FOREIGN KEY(CDCARGO) REFERENCES CARGO(CDCARGO),
  CONSTRAINT FK_FUNC_CDDEPTO FOREIGN KEY(CDDEPTO) REFERENCES DEPTO(CDDEPTO)
);


INSERT INTO CARGO (CDCARGO, NMCARGO, VRSALARIO) VALUES ('C1','COZINHEIRA',350);
INSERT INTO CARGO (CDCARGO, NMCARGO, VRSALARIO) VALUES ('C3','AUX ESCRITORIO',450);
INSERT INTO CARGO (CDCARGO, NMCARGO, VRSALARIO) VALUES ('C7','VIGIA',450);
INSERT INTO CARGO (CDCARGO, NMCARGO, VRSALARIO) VALUES ('C2','MECANICO',750);
INSERT INTO CARGO (CDCARGO, NMCARGO, VRSALARIO) VALUES ('C5','GERENTE',2300);
INSERT INTO CARGO (CDCARGO, NMCARGO, VRSALARIO) VALUES ('C4','ESCRITURARIO',600);
INSERT INTO CARGO (CDCARGO, NMCARGO, VRSALARIO) VALUES ('C8','PROGRAMADOR',NULL);
INSERT INTO CARGO (CDCARGO, NMCARGO, VRSALARIO) VALUES ('C9','ANALISTA_DE_SISTEMAS',2100);
COMMIT;


INSERT INTO DEPTO (CDDEPTO, NMDEPTO, RAMAL) VALUES ('D1','ADMINISTRACAO',221);
INSERT INTO DEPTO (CDDEPTO, NMDEPTO, RAMAL) VALUES ('D2','OFICINA',235);
INSERT INTO DEPTO (CDDEPTO, NMDEPTO, RAMAL) VALUES ('D3','SERVICOS GERAIS',243);
INSERT INTO DEPTO (CDDEPTO, NMDEPTO, RAMAL) VALUES ('D4','VENDAS',258);
COMMIT;


INSERT INTO FUNCIONARIO (NRMATRIC, NMFUNC, DTADM, SEXO, CDCARGO, CDDEPTO) 
	VALUES (1001,'JOAO SAMPAIO','10-AUG-93','M','C2','D2');
INSERT INTO FUNCIONARIO (NRMATRIC, NMFUNC, DTADM, SEXO, CDCARGO, CDDEPTO) 
	VALUES (1004,'LUCIO TORRES','02-MAR-94','M','C2','D2');
INSERT INTO FUNCIONARIO (NRMATRIC, NMFUNC, DTADM, SEXO, CDCARGO, CDDEPTO) 
	VALUES (1034,'ROBERTO PEREIRA','23-MAY-92','M','C3','D1');
INSERT INTO FUNCIONARIO (NRMATRIC, NMFUNC, DTADM, SEXO, CDCARGO, CDDEPTO) 
	VALUES (1021,'JOSE NOGUEIRA','10-NOV-94','M','C3','D1');
INSERT INTO FUNCIONARIO (NRMATRIC, NMFUNC, DTADM, SEXO, CDCARGO, CDDEPTO) 
	VALUES (1029,'RUTH DE SOUZA','05-JAN-93','F','C1','D3');
INSERT INTO FUNCIONARIO (NRMATRIC, NMFUNC, DTADM, SEXO, CDCARGO, CDDEPTO) 
	VALUES (1095,'MARIA DA SILVA','03-SEP-92','F','C4','D1');
INSERT INTO FUNCIONARIO (NRMATRIC, NMFUNC, DTADM, SEXO, CDCARGO, CDDEPTO) 
	VALUES (1023,'LUIZ DE ALMEIDA','12-JAN-93','M','C2','D2');
INSERT INTO FUNCIONARIO (NRMATRIC, NMFUNC, DTADM, SEXO, CDCARGO, CDDEPTO) 
	VALUES (1042,'PEDRO PINHEIRO','29-JUL-94','M','C4','D1');
INSERT INTO FUNCIONARIO (NRMATRIC, NMFUNC, DTADM, SEXO, CDCARGO, CDDEPTO) 
	VALUES (1048,'ANA SILVEIRA','01-JUN-93','F','C5','D1');
INSERT INTO FUNCIONARIO (NRMATRIC, NMFUNC, DTADM, SEXO, CDCARGO, CDDEPTO) 
	VALUES (1015,'PAULO RODRIGUES','17-AUG-92','M','C2','D2');
COMMIT;

OBJETOS DO ORACLE

TABELA: tem a principal função armazenar dados;

VIEW: objeto que encapsula uma instrução select, podendo ter uma ou mais tabelas;

SEQUENCE: Gera uma sequencia numérica;

INDICE: Utilizado para melhorar a performance em consultas;

SINONIMO: apelido para objetos de dados;

TABELAS

É possível fazer a criação online;

Após ter sido criada, é possível modificar a sua estrutura;

Importante ter uma estimativa de tamanho para evitar que o banco de dados trave;

Nomes devem ter até 30 caracteres, começando com uma letra;

Nomes das tabelas podem ser: a-z, A-Z, 0-9, _ (underline);

Os caracteres # e $ podem também serem utilizados em nomes de tabelas, porém não recomendados pela Oracle;

É possível ter nomes iguais de objetos desde que sejam de usuários diferentes;

Não se deve utilizar palavras reservadas do Oracle (CREATE, TABLE, ALTER, USER, INSERT, etc);

Em tabelas, não há case-sensitive;

CREATE TABLE

Para se criar tabelas, é necessário que o usuário conectado tenha privilégios ;

CREATE TABLE CLIENTES (
  COD_CLI NUMBER(5),
  NOME_CLI VARCHAR2(30)
);

TIPOS DE DADOS

As colunas de uma tabela precisa ser definida com um tipo de dados, pois será tratado posteriormente pelo banco de dados;

VARCHAR2: utilizado para armazenar tipos de caracteres alfa-numéricos (aceitando letras e números), podendo ser definido de 1 a 4000 caracteres; A quantidade de bytes utilizada é da quantidade de caracteres + 1 (especifica o tamanho da string)

CHAR: permite armazenar caracteres alfa-numéricos, podendo ser definido de 1 a 2000 caracteres, com tamanho fixo (exemplos: CPF, CEP, CNPJ);

NUMBER: permite armazenar números inteiros ou decimais (precisão e escala m,n), que varia de 1 a 38. Exemplo NUMBER(10,2), pode armazenar 8 inteiros e 2 decimais;

DATE: permite armazenar data e hora que pode variar de 01/01/4712 AC até 31/12/9999 DC;

LONG: permite armazenar caracteres de até 2 GB (evite usar LONG – somente para compatibilidades passadas). Utilize LOB;

CLOB: permite armazenar caracteres de até 4 GB;

RAW(tamanho): permite armazenar dados binários brutos;

LONG RAW: armazena dados binários de tamanho variável de até 2 GB;

BLOB: Dados binários de até 4 GB;

BFILE: Armazena arquivos binários em arquivos externos ao banco de dados de até 4 GB;

ROWID: permite armazenar o endereço físico exclusivo de uma linha em uma tabela correspondente. Toda a tabela tem um ROWID, controlado pelo ORACLE. Pode-se acessar executando SELECT ROWID;

LONG: O tipo de dados LONG não pode ser copiado para outra tabela através de uma subquery; A coluna LONG não pode ser incluída no GROUP BY ou ORDER BY; É limitado a 1 coluna LONG por tabela; Não pode ser definida como CONSTRAINTS; Utilize CLOB em vez de LONG;

TIMESTAMP: É uma extensão do tipo DATE, armazenando até o segundo e fração de segundos;Pode especificar o fuso horário;
Exemplo:
TIMESTAMP WITH LOCAL TIME ZONE;
TIMESTAMP WITH TIME ZONE;

INTERVAL YEAR TO MONTH: É usado para armazenar diferença entre dois valores de datas/horários, levando-se em conta somente o mês e o ano;
Exemplo:
INTERVAL ’12-5’ YEAR(2) TO MONTH;
Grava um intervalo de doze anos e cinco meses;

INTERVAL YEAR TO MONTH
Exemplo:
INTERVAL ’231’ MONTH(2);
Grava um intervalo de 231;

INTERVAL ’543’ YEAR; Retorna erro, pois não foi definido o ano e o padrão para ano são de 2 dígitos;

INTERVAL DAY TO SECOND: armazena um período em dias, horas, minutos e segundos
Exemplo:
INTERVAL ’2 3:20:10.222’ DAY TO SECOND(3);
Grava 2 dias, 3 horas, 20 minutos, 10 segundos e 222 milhares de segundo;

INTERVAL ’7 5:12’ DAY TO MINUTE;
Grava 7 dias, 5 horas e 12 minutos;
Exemplo:
INTERVAL ’235 5 DAY(3) TO HOUR;
Grava 235 dias e 5 horas;

INTERVAL ’11:12:10.2222222’ HOUR TO SECOND(7);
Grava 11 horas, 12 minutos e 10,2222222 segundos;

EXEMPLOS DE CRIAÇÃOD DE TABELA USANDO OS TIPOS DE DADOS

CREATE TABLE TESTE_DADOS (
  CODIGO      NUMBER(10),
  NOME        VARCHAR(30),
  CEP         CHAR(8),
  NASCIMENTO DATE,
  SALARIO     NUMBER(10,2)
);

INSERT INTO TESTE_DADOS (CODIGO, NOME, CEP, NASCIMENTO, SALARIO)
VALUES
(1,'TESTE DE NOME','12548963',TO_DATE('07/15/2010','MM/DD/YYYY'),1501.45);

SELECT * FROM TESTE_DADOS;

CREATE TABLE TESTE_TABELA (
  HORA_ATUAL TIMESTAMP(7)
);

INSERT INTO TESTE_TABELA(HORA_ATUAL)
VALUES (SYSDATE);

SELECT * FROM TESTE_TABELA;

CREATE TABLE TABELA_INTERVALOS(
  INTERVALO_ANO INTERVAL YEAR(3) TO MONTH,
  INTERVALO_DIA INTERVAL DAY(3) TO SECOND
);

INSERT INTO TABELA_INTERVALOS(INTERVALO_ANO, INTERVALO_DIA)
VALUES (INTERVAL '120' MONTH(3),
        INTERVAL '180' DAY(3)
);

SELECT INTERVALO_ANO, INTERVALO_DIA
FROM TABELA_INTERVALOS;

SELECT TO_CHAR(SYSDATE+INTERVALO_ANO,'DD-MON-YYYY'),
               SYSDATE+INTERVALO_DIA AS intervalo_dia
FROM TABELA_INTERVALOS;

CONSTRAINTS

São regras que são impostas no nível de tabela (ou coluna), que no geral, impedem a inserção, atualização e deleção de dados indevidos;

As mais importantes são: NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK;

Sempre que possível, nomeie as CONSTRAINS. Caso não, o ORACLE dá o nome à constraint de “SYS_…”;

Aconselhável criar as constraints logo na criação da tabela, porém podem ser criadas posteriormente;

Podem ser definidas em nível de tabela ou coluna;

CONSTRAINT NOT NULL

Serve para que uma determinada coluna não tenha valores nulos;
Por padrão, as colunas são NULL;
EXEMPLO:
CREATE TABLE NOME_TABELA(
NOME_COL TIPO_COL NOT NULL
);

CONSTRAINT UNIQUE

Serve para que uma determinada coluna (ou colunas) tenha valores únicos, podendo ter valores nulos;

As PRIMARY KEYS implicitamente são UNIQUE;

CONSTRAINT PRIMARY KEY

Serve para que uma coluna (ou colunas) tenham valores diferente entre tuplas, sendo valores únicos e não nulos;
É limitada a ser criado uma única PK por tabela, que pode ter várias colunas (todas as colunas precisam ser não nulas);
É automaticamente criado um índice, para melhor pesquisar os registros;

CONSTRAINT FOREIGN KEY

Serve para garantir a integridade dos relacionamentos entre as tabelas;
Para ser criada, é necessário ter uma PK ou UNIQUE de outra tabela;
Pode-se utilizar os comandos abaixo para se fazer exclusão de dados em cascata:
ON DELETE CASCADE;
ON DELETE SET NULL;

CONSTRAINT CHECK

Serve para fazer a checagem de um determinado dado antes da ação na tabela;
Algumas das expressões NÃO podem ser utilizadas com CHECK: SYSDATE, UID, USER e USERENV, ou a pseudocolunas como: CURRVAL, NEXTVAL, LEVEL e ROWNUM e consultas que fazem referencia a outros valores em outra linhas;

EXEMPLOS:

–nivel coluna

CREATE TABLE EMPREGADOS (
COD NUMBER(6) CONSTRAINT COD_EMP_PK PRIMARY KEY,
NOME VARCHAR2(30)
);

EXEMPLO:

–nivel tabela

CREATE TABLE EMPREGADOS (
COD NUMBER(6),
NOME VARCHAR2(30),
CONSTRAINT COD_EMP_PK PRIMARY KEY(COD)
);


CREATE TABLE TABELA_CONSTRAINTS (
ID NUMBER(10),
COD_EMP NUMBER(10),
NAO_NULO NUMBER(10) NOT NULL,
COLUNA_UNICA DATE,
COLUNA_CHECK NUMBER(10,2),
CONSTRAINT ID_PK PRIMARY KEY(ID),
CONSTRAINT UK_UNIQUE01 UNIQUE(COLUNA_UNICA),
CONSTRAINT FK_COD_EMP FOREIGN KEY(COD_EMP)
REFERENCES EMPLOYEES(EMPLOYEE_ID) ON DELETE CASCADE,
CONSTRAINT CK_COL01 CHECK (COLUNA_CHECK > 10)
);

INSERT INTO TABELA_CONSTRAINTS VALUES (10,100, NULL, NULL,10);

INSERT INTO TABELA_CONSTRAINTS VALUES (10,100, 10, NULL,10);

INSERT INTO TABELA_CONSTRAINTS VALUES (10,100, 3,TO_DATE('15/10/2015','DD/MM/YYYY') ,11);

SELECT * FROM TABELA_CONSTRAINTS;

CONSTRAINTS DEFAULT

Define um valor padrão de uma coluna quando não for especificado nenhum valor (null implícito);
Pode ser usado funções de linhas como SYSDATE e o USER;
Não pode usar o nome de outra coluna como referencia;
O valor padrão precisa ter o mesmo tipo da coluna;

EXEMPLO DE DEFAULT

CREATE TABLE TESTE_DEFAULT (
ID NUMBER(10),
DATA DATE DEFAULT SYSDATE
);

INSERT INTO TESTE_DEFAULT (ID) VALUES (1);
INSERT INTO TESTE_DEFAULT (ID) VALUES (2);
INSERT INTO TESTE_DEFAULT (ID) VALUES (3);
INSERT INTO TESTE_DEFAULT (ID) VALUES (4);
INSERT INTO TESTE_DEFAULT (ID) VALUES (5);

SELECT * FROM TESTE_DEFAULT

CRIANDO UMA TABELA COM UMA SUBQUERY

Serve para criar rapidamente uma tabela com dados selecionado pela query;
Quando se tem expressões, é obrigatório o uso de alias;

EXEMPLO DE CREATE SELECT

CREATE TABLE TESTE_SUBSELECT AS
SELECT EMPLOYEE_ID, FIRST_NAME, HIRE_DATE, SALARY * 12 AS SAL
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 90;

DESC TESTE_SUBSELECT;

ALTER TABLE

Serve para fazer manutenção em tabelas já existentes, podendo modificar colunas, criar novas colunas, eliminar colunas, adicionar valor default às colunas;

EXEMPLO ALTER TABLE

ALTER TABLE TESTE_DEFAULT
ADD NOME_USER VARCHAR2(30);

UPDATE TESTE_DEFAULT SET NOME_USER = USER;

SELECT * FROM TESTE_DEFAULT;

ALTER TABLE TESTE_DEFAULT
MODIFY NOME_USER VARCHAR2(20) NOT NULL;

ALTER TABLE TESTE_DEFAULT
RENAME COLUMN NOME_USER TO NOME_USER2;

ALTER TABLE TESTE_DEFAULT
RENAME TO TESTE_DEFAULT2

SELECT * FROM TESTE_DEFAULT2

DROP TABLE

Serve para eliminar uma tabela com todos os seus dados e índices;
Após ser executado, transações pendentes são submetidos a um COMMIT, efetivando as transações;

EXEMPLO DE DROP TABLE

DROP TABLE TESTE_DEFAULT2

EXERCICIOS

Faça um script que contenha a criação de uma tablespace (schema), usuário para o schema criado, associação do usuário com o schema, chamando a tablespace de banco999 e o usuário de banco999, fazendo com que o usuário banco999 seja dono de outros objetos criados;

Crie os seguites objetos dentro desse schema:

ScreenHunter_519 Apr. 23 14.00

Posteriormente faça as seguintes inserções de dados:

ScreenHunter_520 Apr. 23 14.00

Video 1

 
Video 2

Anúncios

Installing and configuring disks with fdisk and oracleasm commands – Part 05

Instalando e configurando discos com os comandos fdisk e oracleasm – Parte 05 (off topic)

Até o momento, só fizemos a expansão de discos da máquina virtual. Precisaremos particionar os discos existentes, instalar e configurar o oracleasm para o Oracle Linux 7.3 e aplicar o asm nas partições dos discos.

Inicie a máquina virtual normalmente.

ScreenHunter_315 Jul. 17 12.47

Entre com o usuário oracle, e senha dada no momento da criação do usuário:

ScreenHunter_316 Jul. 17 12.56

Particionando os dispositivos /dev/sdb e /dev/sdc

Após ter iniciado a sessão do ambiente, vá ao menu Applications / Utilities / Disks

ScreenHunter_144 Jul. 18 20.42

Observe que o dispositivo /dev/sda está configurado conforme instalação inicial do Linux, contendo as partições de /boot, swap e /. Os mesmos já estão devidamente montandos.

ScreenHunter_145 Jul. 18 20.43

O dispositivo /dev/sdb está sem particionar e a intenção é este dispositivo fique dividido como:
sdb1 – 12 GB – Ext4 (ponto de montagem /u01)
sdb2 – 2 GB – GUID Partition Table (Volume ASMDISK01)
sdb3 – 2 GB – GUID Partition Table (Volume ASMDISK02)
sdb4 – 2 GB – GUID Partition Table (Volume ASMDISK03)
sdb5 – 2 GB – GUID Partition Table (Volume ASMDISK04)

ScreenHunter_146 Jul. 18 20.43

O dispositivo /dev/sdc está sem particionar e a intenção é este dispositivo fique dividido como:
sdc1 – 1 GB – GUID Partition Table (Volume ASMDISK05)
sdc2 – 1 GB – GUID Partition Table (Volume ASMDISK06)
sdc3 – 1 GB – GUID Partition Table (Volume ASMDISK07)
sdc4 – 1 GB – GUID Partition Table (Volume ASMDISK08)
sdc5 – 1 GB – GUID Partition Table (Volume ASMDISK09)
sdc6 – 1 GB – GUID Partition Table (Volume ASMDISK10)
sdc7 – 1 GB – GUID Partition Table (Volume ASMDISK11)
sdc8 – 1 GB – GUID Partition Table (Volume ASMDISK12)
sdc9 – 1 GB – GUID Partition Table (Volume ASMDISK13)
sdc10 – 1 GB – GUID Partition Table (Volume ASMDISK14)
sdc11 – 1 GB – GUID Partition Table (Volume ASMDISK15)

ScreenHunter_147 Jul. 18 20.44.jpg

Precisaremos utilizar o fdisk para fazer os particionamentos dos discos.

Abra um terminal, se transforme em super usuário (su -), com a senha “oracle” (sem aspas) e digite o comando fdisk -l (para listar os discos e suas partições). Perceba que o dispositivo /dev/sda está particionado e montado.

ScreenHunter_148 Jul. 18 22.54.jpg

Iremos particionar o dispositivo /dev/sdb, conforme o mapa abaixo:

sdb1 – 12 GB – Ext4 (ponto de montagem /u01)
sdb2 – 2 GB – GUID Partition Table (Volume ASMDISK01)
sdb3 – 2 GB – GUID Partition Table (Volume ASMDISK02)
sdb4 – 2 GB – GUID Partition Table (Volume ASMDISK03)
sdb5 – 2 GB – GUID Partition Table (Volume ASMDISK04)

Para isso, digite o comando “fdisk /dev/sdb”(sem aspas). Com isso, iremos entrar no menu do fdisk.

ScreenHunter_149 Jul. 18 22.57

Digite m para mostrar a lista de opções disponíveis para o dispositivo /dev/sdb

ScreenHunter_150 Jul. 18 22.59.jpg

Digite g (em minusculo), para criar um tipo de partição GUID Partition Table (GPT)

ScreenHunter_151 Jul. 18 23.01

Clique em n para criar uma nova partição, [enter] par deixar a partição 1 como default, [enter] para deixar o setor inicial, e digite “+12G” (sem aspas) para acionar 12 GB nessa partição.

ScreenHunter_152 Jul. 18 23.03

Iremos continuar a fazer as demais partições com 2 GB cada. Faça o mesmo procedimento para a partições, 2, 3 e 4 com 2 GB cada.

ScreenHunter_153 Jul. 18 23.08.jpg

Na última partição a ser criada, repare que tentando colocar o tamanho +2G, irá retornar um erro que está ultrapassando o range da faixa permitida. Simplesmente pressioner [enter] para obter o default.

ScreenHunter_154 Jul. 18 23.10

Digite o comando “w” (sem aspas) para gravar as alterações feitas.

ScreenHunter_155 Jul. 18 23.12

No terminal, digite novamente o comando fdisk -l. Observe agora que o dispositivo /dev/sdb está dividido.

ScreenHunter_156 Jul. 18 23.15.jpg

Faça a mesma coisa para o dispositivo /dev/sdc. Divida em 12 partes de 1 GB cada.

ScreenHunter_157 Jul. 18 23.19.jpg

Depois de ter criado todas as partições, no terminal digitando o comando “fdisk -l /dev/sdc” (sem aspas), deve aparesentar aproximadamente como a figura abaixo.

ScreenHunter_158 Jul. 18 23.23.jpg

No ambiente X-Window (gráfico), em Applications / Utilities / Disks, verifque como ficou o particionamento do dispositivo /dev/sdb.

ScreenHunter_159 Jul. 18 23.27.jpg

Observe o dispositivo /dev/sdc.

ScreenHunter_160 Jul. 18 23.28.jpg

Desse modo, terminamos de fazer o particionamentos dos dispositivos /dev/sdb e /dev/sdc.

Por segurança, crie um snapshot até esse ponto da máquina virtual.

ScreenHunter_161 Jul. 18 23.45.jpg

Montando o dispositivo /dev/sdb1 (de 12 GB) para o ponto de montagem /u01

O ponto de montagem /u01 é padrão para a estrutura de diretórios do Oracle Database. Precisaremos formatar o dispositivo /dev/sdb1 e fazer com que o ponto de montagem seja montado automaticamente.

Precisaremos configurar o arquivo /etc/selinux/config, para que o parametro SELINUX fique igual a disabled.

ScreenHunter_162 Jul. 18 23.52

Edite a linha SELINUX=sdisabled e salve o arquivo.

ScreenHunter_163 Jul. 18 23.53.jpg

Reinicie o servidor Linux

ScreenHunter_164 Jul. 18 23.54

Depois de ter reiniciado a máquina, abra novamente o terminal, e de o comando “su -” (sem aspas) para se transformar em super usuário.

Formate o dispositivo /dev/sdb1, com o seguinte comando:
mkfs –t=ext4 /dev/sdb1

ScreenHunter_165 Jul. 19 00.00.jpg

Até esse momento, fizemos a formatação com o sistema de arquivo ext4 do dispositivo /dev/sdb1. Precisamos montar esse dispositivo em um ponto de montagem, chamado /u01.

No ambiente X-Window (gráfico), vá em Applications / Utilities / Disks, e clique em cima do dispositivo /dev/sdb1 (13 GB). Clique no ícone da engrenagem e escolha Format. Faça a formatação da partição e logo estará definido o Sistema de Arquivo da partição.

Após a formatação, selecione a opção “Edit Mount Options…: .

ScreenHunter_166 Jul. 19 00.06.jpg

Após ter entrado na opção, deixe as seguintes configurações para essa partição e clique em [OK]

ScreenHunter_167 Jul. 19 00.07.jpg

Ele pedirá a confirmação da senha do administrador.

ScreenHunter_168 Jul. 19 00.07

Clique no ícono play (seta para direita) do dispositivo configurado. Irá ser pedido mais uma vez a senha do administrador (oracle) e posteriormente irá montar o ponto de montagem configurado:

ScreenHunter_169 Jul. 19 00.08.jpg

No terminal, digite o comando df -h e verifique se o ponto de montagem /u01 está disponível.

ScreenHunter_170 Jul. 19 00.14.jpg

Para ter certeza de que o ponto de montagem /u01 irá ser montado toda vez que o Linux for reiniciado, verifique o conteúdo do arquivo /etc/fstab. Observe que o linux adicionou na ultima linha o comando de montagem automática.

ScreenHunter_171 Jul. 19 00.16

Instalando o oracleasm

No terminal com o usuário oracle (acesso de su), com o comando “yum install oracleasm-support kmod-oracleasm” (sem aspas) , faça a instalação dos pacotes., Digite “y” para baixar os pacotes.

ScreenHunter_172 Jul. 19 00.25.jpg

Após algum tempo, a instalação será completada.

ScreenHunter_173 Jul. 19 00.29

Apesar de ter instalado o oracleasm, ele ainda não foi configurado. Baseado no site https://pierreforstmanndotcom.wordpress.com/2015/01/20/how-to-install-asmlib-on-oracle-linux-7-with-unbreakable-linux-kernel-uek/, adaptei os comandos para configurar o oracleasm.

Verifique se o serviço do oracleasm está habilitado com o seguinte comando:

systemctl is-enabled oracleasm.service

ScreenHunter_174 Jul. 19 00.34

Porém, mesmo habilitado, o módulo ainda não está corregado no kernel.

lsmod | grep oracleasm

ScreenHunter_175 Jul. 19 00.35

Com o comando modinfo oracleasm, podemo ver que o módulo está instalado

ScreenHunter_176 Jul. 19 00.38.jpg

Para carregar o driver ASMLib, de o comando no terminal

/usr/sbin/oracleasm init

ScreenHunter_177 Jul. 19 00.40.jpg

Após isso, repita novamente o comando
lsmod | grep oracleasm

ScreenHunter_178 Jul. 19 00.42

E agora configure o asmlib, com o comando
/usr/sbin/oracleasm configure -i

ScreenHunter_179 Jul. 19 00.44

Digite o comando abaixo para listar os discos configurados pelo oracleams
oracleasm listdisks

ScreenHunter_180 Jul. 19 00.46

Para criar discos com ASM, digite os comandos abaixo, um de cada vez.

oracleasm createdisk ASMDISK01 /dev/sdb2
oracleasm createdisk ASMDISK02 /dev/sdb3
oracleasm createdisk ASMDISK03 /dev/sdb4
oracleasm createdisk ASMDISK04 /dev/sdb5

Desse modo, configuramos as partições sdb2, sdb3, sdb4 e sdb5 com as devidas nomenclaturas.

ScreenHunter_181 Jul. 19 00.50

Abra o utilitário Disks do ambiente gráfico e verifique o dispositivo /dev/sdb

ScreenHunter_182 Jul. 19 00.52.jpg

Faça a mesma coisa o dispositivo /dev/sdc no terminal

oracleasm createdisk ASMDISK05 /dev/sdc1
oracleasm createdisk ASMDISK06 /dev/sdc2
oracleasm createdisk ASMDISK07 /dev/sdc3
oracleasm createdisk ASMDISK08 /dev/sdc4
oracleasm createdisk ASMDISK09 /dev/sdc5
oracleasm createdisk ASMDISK10 /dev/sdc6
oracleasm createdisk ASMDISK11 /dev/sdc7
oracleasm createdisk ASMDISK12 /dev/sdc8
oracleasm createdisk ASMDISK13 /dev/sdc9
oracleasm createdisk ASMDISK14 /dev/sdc10
oracleasm createdisk ASMDISK15 /dev/sdc11
oracleasm createdisk ASMDISK16 /dev/sdc12

ScreenHunter_183 Jul. 19 00.56.jpg

ScreenHunter_184 Jul. 19 00.58.jpg

Volte a ferramenta gráfica Disks e verifique o dispositivo /dev/sdc. Perceba que o /dev/sdc6 nao foi atribuido o ASM. Refaça o comando novamente para as partições que não acataram.

ScreenHunter_185 Jul. 19 00.59.jpg

No meu caso, repeti o comando para o dispositivo /dev/sdc6

ScreenHunter_186 Jul. 19 01.01

 

Expanding virtual machine resources to use ASM – Part 04

Expandindo recursos da máquina virtual para uso do ASM – Parte 04 (topic off)

Vamos precisar simular mais discos em nossa máquina virtual para simular o uso do ASM. Para isso, entre nas configurações da máquina virtual e adicione mais um disco de VMDK.

Vá em Configurações da VM (maquina virtual), na aba Armazenamento, clique em Controladora SATA e posteriormente em Adicionar Disco (ícone do + com quadrado)

ScreenHunter_310 Jul. 17 12.31

Irá abrir a tela de pergunta e clique em [Criar novo disco]

ScreenHunter_311 Jul. 17 12.33

Configure a tela de criação do novo disco com as seguintes configurações e clique em [Criar]

ScreenHunter_312 Jul. 17 12.34

Após ter escolhido as configurações, é necessário aguardar a criação do novo disco

ScreenHunter_313 Jul. 17 12.35

O disco será criado e mostrado nas configurações da máquina virtual. Clique em [OK] para confirmar a criação.

ScreenHunter_314 Jul. 17 12.42

 

Este artigo continua em:

Installing and configuring disks with fdisk and oracleasm commands – Part 05

 

 

 

Configuring Oracle Enterprise Linux 7 environment for Oracle Database 11g installation – Part 03

Configurando o ambiente Oracle Enterprise Linux 7 para instalação do Oracle Database 11g – Parte 03 (topic off)

01 – Instalando Imagem de CD dos Adicionais para Convidado

Após ter instalado a máquina virtual com o Oracle Enterprise Linux 7, é necessário fazer a atualização de algumas bibliotecas e ajustar o seu ambiente para que melhor possa traballhar.

Como a instalação está em uma máquina virtual, é muito aconselhável que façamos a instalação dos drives adicionais para Convidado. É uma forma de ter mais compatibilidade de dispositivos compartilhados entre a máquina virtualizada e o host (no meu caso, o host é um Windows 10). O mouse, teclado, câmera e outros dispositivos de sua máquina melhor compatibilizam entre esses dois ambientes.

Para isso, entre e logue em sua máquina virtual criada. No menu da máquina virtual, vá em Dispositivo / Inserir Imagem de CD dos Adicionais para Convidado…

Captura de tela 2017-07-14 22.21.07.png

Aparecerá uma tela de confirmação, para poder executar o conteúdo do “CD”. Clique em [Run].

ScreenHunter_93 Jul. 14 22.24

Digite a senha para o usuário administrador, que foi configurada na instalação como “oracle” (sem aspas)

ScreenHunter_94 Jul. 14 22.25

O virtualbox irá acabar de instalar o Additions Guest.

ScreenHunter_96 Jul. 14 22.27.jpg

Reinicie o Linux e perceba que já não é mais necessário ficar pressionando <Alt GR> + <Ctrl> (direito) para alterar entre a máquina virtual e o host.

Após ter reiniciado a máquina virtual, faça um snapshot dessa máquina, para que seja possível restaurar até o ponto criado. Na configuração da máquina virtual, no canto superior direito, vá em Snapshot, clique no ícone da máquina fotográfica e de um nome e uma descrição para o Snap shot. Clique em [OK]. Desse modo, voce criou um ponto de restauração em sua máquina virtual.

ScreenHunter_97 Jul. 14 22.55.jpg

02 – Configurando arquivos e variáveis de sistema para para o Oracle Database 11g

Configurando a placa de rede do servidor Oracle Linux Enterprise

Na instalação da estrutura da máquina virtual, deixamos a configuração da placa de rede como tipo “Placa em modo Bridge”, ou seja, a sua máquina virtual irá fazer parte da sua rede como se fosse um host qualquer.

Na maioria das redes domésticas, o router de internet está configurado para distribua IP’s dinamicamente, ou seja, quando um dispositivo conecta a sua rede, atribui-se um IP diferente.

Para qualquer tipo de servidor, é necessário que o número IP esteja fixo ou estático. Vamos fazer essa configuração no servidor Linux, para que ele “nunca” mude de IP.

Abra um terminal ( no menu Applications / favorites / terminal) e ping em um número IP da sua rede que não esteja sendo usado (preferencialmente um IP que voce memorize facilmente), para que não haja conflitos de IP. Após ter confirmado que o IP não esteja sendo utilizado, digite “exit” (sem aspas) para fechar o terminal.

ScreenHunter_101 Jul. 16 11.06.jpg

 

No ambiente de trabalho, clique em cima da bateria / wired /wired settigns

ScreenHunter_98 Jul. 16 10.58

Irá ser mostrado as configurações atuais da placa de rede. No caso abaixo apresentado, está configurado para ser DHCP. Clique em cima do ícone da engrenagem para que o sistema apresente as configurações a serem modificadas.

ScreenHunter_99 Jul. 16 11.03

Na aba IPv4, altere as configurações da sua placa de rede para “Manual”. Digite as novas configurações da sua placa de rede, clique [Apply] e feche a janela da placa de rede. Clique em Off e On para reiniciar as configurações da placa de rede.

ScreenHunter_102 Jul. 16 11.14.jpg

Preferencialmente, no seu host fisico, tente dar um ping no IP dado à máquina virtual. Dessa forma, se o ping retornar, é sinal que a sua máquina virtual está sendo enchergada na rede.

ScreenHunter_103 Jul. 16 20.31.jpg

Configurando o arquivo hostname

No Terminal do Linux, transforme-se em super usuário, com o comando “su -” (sem aspas) e digite a senha de administrador dado na instalação (oracle). Verifique o nome do host na máquina virtual com o comando hostname.

ScreenHunter_104 Jul. 16 20.32.jpg

Complemente o arquivo /etc/hosts com o seu editor favorito. No caso, estamos utilizando o “vi”, pois é o editor padrão que é possível usar em qualquer sistema linux.

ScreenHunter_105 Jul. 16 20.40

Dentro do arquivo, adicione a linha do meio com o numero IP mais o nome do host. (no caso abaixo, adicionamos a linha 192.168.25.10 oracle.localhost localhost). Salvamos o arquivo com <ESC>, para sair do modo de edição e depois com o comando :wq (dois pontos, write, quit)

ScreenHunter_106 Jul. 16 20.43

Dê um ping no nome oracle.localhost e veja se o ping retorna. De um <Ctrl> + C para cancelar o ping

ScreenHunter_107 Jul. 16 20.44.jpg

Instalando pacotes de requisitos de software para o Oracle Database 11g

Mesmo o Oracle Linux sendo um Sistema Operacional da própria Oracle, é necessário primeiramente instalar softwares de dependencia antes de iniciar a instalação.

É importante a sua máquina virtual estar conectada à internet, para que se possa utilizar o comando yum. Execute o comando “yum install binutils-2.* gcc.*”

ScreenHunter_109 Jul. 16 20.59.jpg

Criando grupos de arquivos para oracle

Crie os grupos oinstall e dba, através dos comandos groupadd. Verifique se os grupos realmente foram criados através do comandos grep

ScreenHunter_110 Jul. 16 21.30

Verifique se o usuário oracle existe através do comando “id oracle”.

ScreenHunter_111 Jul. 16 21.43

É necessário adicionar o usuário oracle aos grupos criados oinstall e dba, através dos comandos abaixo:

ScreenHunter_113 Jul. 16 21.47.jpg

Configurando parametros do Kernel

Edite do arquivo /etc/sysctl.conf com o editor de sua preferencia:

ScreenHunter_114 Jul. 16 21.59

Complemente o arquivo conforme o texto abaixo, ficando como a figura a seguir. Salve a arquivo.

fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
#kernel.shmmax = 536870912
kernel.shmmax = 1578493952
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

ScreenHunter_115 Jul. 16 22.00

Edite do arquivo /etc/security/limits.conf com o editor de sua preferencia:

ScreenHunter_116 Jul. 16 22.20

Adicione as linhas abaixo no final do arquivo:

#numero de arquivos abertos
oracle soft nofile 4096
oracle hard nofile 65536
#numero maximo de processos
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
#espaco de memoria bloqueada
oracle soft memlock 2765
oracle hard memlock 2765

ScreenHunter_117 Jul. 16 22.22

Edite do arquivo /etc/pam.d/login com o editor de sua preferencia:

ScreenHunter_118 Jul. 16 22.25

Adicione no final do arquivo:

session required pam_limits.so

ScreenHunter_119 Jul. 16 22.32

Edite do arquivo /etc/profile com o editor de sua preferencia:

ScreenHunter_120 Jul. 16 22.33

Adicione o seguinte código no final do arquivo:

if [ $USER = “oracle” ]; then
if [ $SHELL = “/bin/ksh” ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi

ScreenHunter_121 Jul. 16 22.47.jpg

Edite o arquivo .bash_profile do usuário oracle.

Primeiramente de o comando “su – oracle” (sem aspas) e depois edit o arquivo .bash_profile

ScreenHunter_122 Jul. 16 22.51

Complemente o arquivo com o seguinte código:

ORACLE_BASE=/u01/app; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.4/db_1; export ORACLE_HOME
ORACLE_SID=orcl; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
#DISPLAY=localhost:0.0; export DISPLAY

ScreenHunter_139 Jul. 17 23.25.jpg

Execute o comando: source .bash_profile, para verificar se há algo de errado configurado no arquivo .bash_profile. (caso tenha, conserte o arquivo)

ScreenHunter_125 Jul. 16 23.40

Execute os seguintes comandos para conferir as variáveis de ambientes configuradas:

ScreenHunter_126 Jul. 16 23.44.jpg

 

Para fazer o reload dos parametros do Kernel, digite o seguinte comando como super usuário:

/sbin/sysctl -p

Após essas configurações feitas, faça um snapshot da máquina virtual para posteriormente fazer a instalação do oracle database.

ScreenHunter_127 Jul. 17 00.14.jpg

04 – Configurando acesso remoto para o Oracle Enterprise Linux 7.

É possível fazer acesso remoto entre o sistema operacional do host (no meu caso, Windows 10) e o Linux que está virtualizado.

Para isso, utilizaremos o putty para fazer acesso remoto. Procure pelo google por “putty” (sem aspas) e baixe um arquivo putty.exe (para a versão 32 ou 64 bits), e Xming-6-9-0-31-setup.exe. (esse ultimo arquivo servirá para executar ambientes gráficos chamados pelo putty)

Execute o putty no Windows, e coloque o número IP do servidor linux. Dê um nome para a conexao, e clique em [Open]

ScreenHunter_128 Jul. 17 00.24.jpg

Complemente e configure dentro de Connection / SSH. Salve e depois abra o terminal

ScreenHunter_221 Jul. 20 20.30.jpg

A primeira vez executada, irá aparecer a seguinte mensagem.  Clique em [Yes]

ScreenHunter_129 Jul. 17 00.26

Digite o nome do usuário oracle, com a senha escolhida na instalação (oracle)

ScreenHunter_130 Jul. 17 00.30.jpg

Execute o arquivo baixado do xming server no SO do seu host (no meu caso foi o Windows 10). Clique em [Next]

ScreenHunter_131 Jul. 17 00.31

Escolha a pasta que será instalada e clique em [Next]

ScreenHunter_132 Jul. 17 00.31

Deixe na opção Normal e clique em [Next]

ScreenHunter_133 Jul. 17 00.32

Deixe o nome como é o padão e clique em [Next]

ScreenHunter_134 Jul. 17 00.32

Deixe as opções marcadas por padrão em clique em [Next]

ScreenHunter_135 Jul. 17 00.32

Irá ser mostrado as configurações feitas e clique em [Next]

ScreenHunter_136 Jul. 17 00.32

A instalação foi concluída com sucesso. Clique em [Finish]

ScreenHunter_137 Jul. 17 00.33

No Windows, clique em [Allow access]

ScreenHunter_138 Jul. 17 00.33

Verifique na barra de tarefas se o Xwing Server está instalado.

Para utilizar o Xming, é necessário ainda configurar o SSH server para que aceite o ambiente X-Window.

Conforme o artigo https://www.redhat.com/archives/rhl-list/2005-March/msg04651.html, precisaremos editar o arquivo /etc/ssh/ssh_config. Altere e inclua no arquivo as seguintes linhas:

ForwardX11 yes
ForwardX11Trusted yes

Assim, será possível executar aplicativos em o ambiente gráfico pelo host Windows.

 

 

Este artigo continua em:

Expanding virtual machine resources to use ASM – Part 04

 

Installing Oracle Enterprise Linux 7 (OEL) on environment created by Virtual Box – Parte 02

Instalando Oracle Enterprise Linux 7 (OEL) no ambiente criado pelo Virtual Box – Parte 02

Na Parte 01 do artigo, temos somente a estrutura básica para podermos iniciar a instalação do Oracle Linux 7. Depois da imagem baixada (arquivo ISO) do site da Oracle, vamos fazer com que a máquina virtual simule o arquivo como se fosse uma unidade de DVD. Para isso, selecione a máquina virtual criada e clique em configurações.

Captura de tela 2017-07-13 20.20.51.png

Na aba Armazenamento, selecione a controladora IDE / Vazio, e em atributos / drive óptico, selecione o arquivo ISO baixado equivamente o Oracle Linux. (No meu caso, baixei a versão 7.3, a qual o nome do arquivo é V834394-01.ISO). Clique em [OK]

Captura de tela 2017-07-13 20.23.40

No menu principal do Oracle Linux, clique no botão [Iniciar]

Captura de tela 2017-07-13 20.24.52

A máquina será inicializada, aparecendo o menu para que voce escolha a opção “Install Oracle Linux 7.3”. Pressione [Enter]

ScreenHunter_66 Jul. 13 20.26

O Oracle Linux irá carregar as feramentas necessárias para a instalação.

ScreenHunter_67 Jul. 13 20.28.jpg

Em ambiente gráfico, escolha o teclado e idioma de preferencia e clique em [Continue]

ScreenHunter_68 Jul. 13 20.32.jpg

Em Lozalization, configure o Date &Time para a região equivalente a onde voce está. Em Network & HostName, ligue a placa de rede e configure o nome da máquina.

ScreenHunter_69 Jul. 13 20.37.jpg

Na configuração em NetWork & Host Name, deverá ter aproximadamente as seguintes configurações (placa ON, e Hostname modificado para oracle.localhost):

ScreenHunter_70 Jul. 13 21.10

Clique em Instalation Destination, selecione o disco SDA / 16 GiB Free, selecione “I will configure partioning” e clique em [Done]

ScreenHunter_71 Jul. 13 21.15.jpg

Selecione em Standard Partition e clique em [Done]

ScreenHunter_72 Jul. 13 21.18

Clique no botão [ + ] no canto inferior esquerdo para poder criar as partições. Iremos criar o básico, não estando preparado este sevidor para criticidade. Clique em [Done] quando acabar de configurar conforme informações abaixo:
Partição: /boot               – Tam. 300 MiB             – File System: Ext4
Partição: swap               – Tam. 4096 MiB          – File System: swap
Partição: /                       – Tam. 11.71 GB (Deixe em branco o tamanho) – File System: Ext4

ScreenHunter_73 Jul. 13 21.30

Após ter clicado em [Done], aparecerá a seguinte tela pedindo confirmação para aceitar as alterações. Clique em [Accept Changes]

ScreenHunter_74 Jul. 13 21.35

O sistema irá voltar ao menu principal. Clique em “Software Selection” para configurar.

ScreenHunter_75 Jul. 13 21.38.jpg

Selecione “Server with GUI”, marcando “Compatibility Libraries” e “Development Tools”. Clique em [Done]

ScreenHunter_76 Jul. 13 21.47.jpg

O sistema irá voltar ao menu principal novamente, e clique em [Begin Instalation]

ScreenHunter_77 Jul. 13 21.50.jpg

Enquanto a instalação está sendo realizada, clique em User Settings / Root Password.

ScreenHunter_79 Jul. 13 21.53

Defina o password como “oracle” (sem aspas). O sistema irá mostrar que é uma senha fraca. Aceite mesmo assim clicando em [Done]

ScreenHunter_78 Jul. 13 21.53

Aguarde até o Installer acabar de instalar os pacotes.

ScreenHunter_80 Jul. 13 21.58.jpg

No término da instalação, o Installer irá pedir para dar o reboot no SO, finalizando assim a instalação do Linux.

ScreenHunter_81 Jul. 13 23.11

Após a inicialização, ele o Linux irá pedir para aceitar os termos de licença de utilização. Clique em “License Information”

ScreenHunter_82 Jul. 13 23.14

Clique em “I accept the license agreement”e depois em [Done]

ScreenHunter_83 Jul. 13 23.16.jpg

O installer irá voltar ao “Initial Setup”. Clique em “User Creation”. Crie um usuário oracle, com a senha oracle. e clique em [Done]

ScreenHunter_84 Jul. 13 23.18.jpg

No menu “Initial Setup”, no lado inferior direito, clique em [Finish]. O sistema irá pedir para que o usuário criado faça o logon. Entre com o password “oracle”(sem aspas).

ScreenHunter_85 Jul. 13 23.23

Uma tela de bem vindo será exibida. Escolha o idioma “English”. Clique em [Next]

ScreenHunter_86 Jul. 13 23.27

Selecione o layput do teclado “English (US, alternative international)”, Clique em [Next]

ScreenHunter_87 Jul. 13 23.30.jpg

O Linux irá oferecer alguns recursos de autenticação. Clique em [Skip]

ScreenHunter_88 Jul. 13 23.30

Finalizando o término das configurações. Clique em [Start using Oracle Linux Server]

ScreenHunter_89 Jul. 13 23.31

Finalmente o Desktop do Oracle Linux como é conhecido é mostrado!

ScreenHunter_90 Jul. 13 23.38.jpg

 

Este artigo continua em:

Configuring Oracle Enterprise Linux 7 environment for Oracle Database 11g installation – Part 03

 

learningdatabase.com.br

Tecnologias em Banco de Dados Relacionais, Modelagem de dados dimencionais, tecnologias SQL Servere e Oracle

Aprendendo Programação

Algorítmos, C, C++,Pascal, Python, R

WikiDBA

by Virendra Yaduvanshi - Microsoft SQL Server Database Architect | Consultant | Blogger | Specialist | DBA | Speaker

Blog - Fabiano Neves Amorim

SELECT * FROM [Coisas Da Minha Cabeça] WHERE dbo.fn_TempoParaPost() < dbo.fn_TempoLivre()

Tércio Costa, Oracle Developer, OCE SQL, ACE Associate

Guia de estudos para certificação ORACLE SQL(1Z0-047, 1Z0-051, 1Z0-061 e 1Z0-071) e PL/SQL(1Z0-144, 1Z0-146 e 1Z0-148)

Strate SQL

Data Adventures with an Architect