Como posso obter uma lista de procedimentos/funções armazenados que são compilados para depuração?
Não vejo coluna relevante nas tabelas a seguir.
- DBA_PROCEDURES
- DBA_OBJECTS
Como posso obter uma lista de procedimentos/funções armazenados que são compilados para depuração?
Não vejo coluna relevante nas tabelas a seguir.
Estou tentando clonar nosso banco de dados de produção na máquina virtual de teste. Nosso banco de dados de produção funciona com ASM. Eu gostaria de usar o sistema de arquivos simples no banco de dados de teste.
Criei banco de dados, serviços, pfile etc. Forneci arquivos de controle de banco de dados de produção para testar o banco de dados. No momento, estou tentando renomear arquivos de dados no banco de dados de teste. Eu recebo o seguinte erro.
SQL> startup mount;
.....
SQL> alter database rename file '+NEWDATA/XX/XX01.dbf' to 'M:\oracle\datafiles\XX\XX01.dbf'; alter database rename file
'+NEWDATA/XX/XX01.dbf' to 'M:\oracle\datafiles\XX\XX01.dbf';
* ERROR at line 1: ORA-01511: error in renaming log/data files ORA-01141: error renaming data file 162 - new file
'M:\oracle\datafiles\XX\XX01.dbf' not found ORA-01110: data file 162:
'+NEWDATA/XX/XX01.dbf' ORA-27046: file size is not a multiple of
logical block size OSD-04012: file size mismatch O/S-Error: (OS 4) The
system cannot open the file.
Meu backup são peças de backup rman normais, não backup como cópia. Estou tentando renomear arquivos inexistentes. Após esse processo de renomeação, tentarei restaurar o banco de dados do backup rman. Mas esse backup não é uma cópia peça por peça.
Gostaria de encontrar a lista de colunas computadas no banco de dados Oracle usando o Oracle Data Dictionary Views .
Eu gostaria de adicionar mais informações. Suponha que eu tenha a seguinte coluna computada/calculada no banco de dados.
ALTER TABLE HR.EMPLOYEES
ADD FULL_NAME AS ( FIRST_NAME || ' ' || LAST_NAME);
Posso selecionar este valor de coluna em Select Statements.
SELECT EMPLOYEE_ID,FULL_NAME FROM HR.EMPLOYEES;
Resultados
... 174 Ellen Abel ...
Posso ver esta coluna na exibição TAB_COLUMNS.
select * from all_tab_columns C
WHERE
1 = 1
AND C.table_name = 'EMPLOYEES'
AND C.OWNER = 'HR'
AND COLUMN_NAME = 'FULL_NAME'
;
Gostaria de encontrar determinado esquema, tabela e coluna, descobrir se esta coluna é calculada/computada?
Eu pensei erroneamente que a visão INDEXES me dá essa informação. Mas a seleção seguinte não retorna nenhuma linha. Isso fornece apenas índices funcionais.
SELECT index_name,index_Type,I.*
FROM ALL_indexes I
WHERE
1 = 1
AND INDEX_TYPE LIKE 'FUNCTION-BASED%'
AND I.OWNER = 'HR'
Os Sistemas Especialistas são um ramo da Inteligência Artificial. Esses sistemas tentam capturar o conhecimento dos Especialistas por meio de um conjunto de regras. A maioria das regras é declarada em linguagem natural. Mas eles precisam ser interpretados pelo mecanismo de regras, portanto, são declarações na forma do clássico if-then-else.
IF
THEN
ELSE
Este sistema especialista específico conterá substâncias e pacientes. Cada regra dá um conselho de acordo com os atributos do paciente, que são armazenados no banco de dados.
Por exemplo:
IF (PatientWeight < 50 AND PatientSex = Male AND DaysInTreatment = 0)
THEN SUBSTANCE_X = 10
IF (PatientWeight < 50 AND PatientSex = Male AND DaysInTreatment > 0)
THEN SUBSTANCE_X = 20 + DaysInTreatment *5
Eu nunca projetei tal sistema. Você pode me dar algumas dicas iniciais para ler? Ou algum conselho?
LOB_DATA: varbinary(max),varchar(max), imagem, colunas de texto.
Eu tenho 4 tabelas com grande quantidade de LOB_DATA nela. Gostaria de mover LOB_DATA nessas tabelas para um grupo de arquivos diferente em um disco rígido diferente.
Eu criei um novo grupo de arquivos e arquivo neste grupo de arquivos. Eu também usei o comando sql desta questão . Mas o armazenamento da coluna varbinary permanece onde estava antes.
-- To move table data to new filegroup
CREATE UNIQUE CLUSTERED INDEX PK_YourTableName
ON dbo.YourTableName(YourPKFields)
WITH (DROP_EXISTING = ON) ON [NewFilegroup]
Eu uso o seguinte sql para ver o grupo de arquivos de lob_data.
-- To see lob_data filegroups
SELECT OBJECT_NAME(object_id) as OBJECT_NAME, FILEGROUP_NAME(data_space_id) as
FILE_GROUP_NAME, type_desc
FROM sys.partitions p
JOIN sys.allocation_units a
on p.partition_id = a.container_id
WHERE
type_desc = 'LOB_DATA'
Estou usando o SQLServer 2008.
Eu encontrei a seguinte solução como mover os dados do lob de um grupo de arquivos para outro . Existe outra abordagem?
Normalmente em java ou C# , eu usaria uma construção a seguir ao tentar detectar erros.
Manipulação de Exceção Ruim em C# e Java
try
{
// do something
}
catch(Exception ex)
{
}
Bom Tratamento de Exceções em Java e C#
try
{
}
catch(ArgumentException ex)
{
log(ex);
// java throw
throw ex;
// in C#, throw only, is better since it keeps stack trace
throw;
}
catch(Exception ex)
{
// this is catch ALL others block
log(ex);
// java throw
throw ex;
// in C#, throw only, is better since it keeps stack trace
throw;
}
Em C# e java , eu usaria bibliotecas de registro. java: log4j, veja outros https://stackoverflow.com/questions/3042450/what-log4j-alternative-logging-libraries-are-available
.Net: log4net, Nlog etc.
Em PL/SQL
Manuseio de Exceção Ruim
BEGIN
-- Do Something
EXCEPTION -- exception handlers begin
WHEN ZERO_DIVIDE THEN
null;
WHEN OTHERS THEN
null;
END;
Bom Tratamento de Exceções
BEGIN
-- Do Something
EXCEPTION -- exception handlers begin
WHEN ZERO_DIVIDE THEN
LOG
RAISE
WHEN OTHERS THEN
LOG
RAISE
END;
uma simples pesquisa no Google traz o pacote log4plsql: http://log4plsql.sourceforge.net/
A Documentação Oracle para Tratamento de Erros não fornece dicas sobre log.
Dá a seguinte frase e usa dbms_output.put_line para registro:
"Às vezes, você deseja gerar novamente uma exceção, ou seja, tratá-la localmente e, em seguida, passá-la para um bloco de inclusão. Por exemplo, você pode querer reverter uma transação no bloco atual e, em seguida, registrar o erro em um bloco de inclusão. "
Eu estava pedindo mais informações sobre o sistema operacional. Aí eu me perguntei se um sql genérico pode dar essa informação? As seguintes coisas vêm à minha mente.
Minha saída do banco de dados de teste está abaixo.
SQL> SELECT banner from V$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production
PL/SQL Release 11.2.0.2.0 - Production
CORE 11.2.0.2.0 Production
TNS for Linux: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production
SQL> SELECT LOG_MODE ,PLATFORM_ID,PLATFORM_NAME FROM V$DATABASE;
LOG_MODE PLATFORM_ID PLATFORM_NAME
------------ ----------- -------------------
NOARCHIVELOG 10 Linux IA (32-bit)
Eu tenho a seguinte consulta de exemplo.
variable pStartDateBegin VARCHAR2(10);
variable pEndDateFinish VARCHAR2(10);
begin
select '01-01-2000', '30-11-2011'
into :pStartDateBegin,:pEndDateFinish
from dual;
end;
-- SELECT :pStartDateBegin,:pEndDateFinish FROM dual;
WITH EXAMPLE
AS
(
SELECT OWNER,TABLE_NAME FROM DBA_TABLES T
WHERE T.LAST_ANALYZED BETWEEN :pStartDateBegin AND :pEndDateFinish
)
SELECT * FROM EXAMPLE;
Quando executo esta consulta usando o TOAD. Ele é executado com sucesso.
XXXX rows selected.
Time End: 06.12.2011 12:05:37
Elapsed Time for Script Execution: 3 secs
No SQL Developer, recebo o seguinte erro.
Error report:
ORA-06550: line 12, column 2:
PLS-00103: Encountered the symbol "WITH"
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
No sqlplus, tenho erro semelhante.
ATILLA@DENEME > @WithAndBindVariablesExample.sql
WITH EXAMPLE
*
ERROR at line 12:
ORA-06550: line 12, column 1:
PLS-00103: Encountered the symbol "WITH"
Se eu usar a seguinte notação
variable pStartDateBegin VARCHAR2(10);
variable pEndDateFinish VARCHAR2(10);
exec :pStartDateBegin := '01-01-2000';
exec :pEndDateFinish := '30-11-2011';
WITH EXAMPLE
AS
(
SELECT OWNER,TABLE_NAME FROM DBA_TABLES T
WHERE T.LAST_ANALYZED BETWEEN to_date(:pStartDateBegin,'DD-MM-YYYY') AND to_date(:pEndDateFinish,'DD-MM-YYYY')
)
SELECT * FROM EXAMPLE;
Ele executa com sucesso todas as três ferramentas.
Parece que me falta um conhecimento básico sobre isso. Gostaria de dicas de tutoriais sobre esse comportamento, explicações etc.
Eu tenho uma consulta bastante complicada. Eu escrevi duas consultas diferentes para atingir meu objetivo. O primeiro está usando WITH, o outro está usando tabelas temporárias globais.
Primeiro:
WITH A
(
KNO
..
)
, B
(
KNO
...
)
, C
(
KNO
...
)
SELECT * from
A INNER JOIN B
on A.KNO = B.KNO
INNER JOIN C
on B.KNO = C.KNO
O segundo:
Truncate Table tempA;
Truncate Table tempB;
Truncate Table tempC;
INSERT INTO tempA SELECT -- Same select which constructs WITH A
INSERT INTO tempB SELECT -- Same select which constructs WITH B
INSERT INTO tempC SELECT -- Same select which constructs WITH C
SELECT * from
tempA A INNER JOIN tempB B
on A.KNO = B.KNO
INNER JOIN tempC C
on B.KNO = C.KNO
Eles estão em pé de igualdade. O que quero dizer é que observo o mesmo tempo de consulta com os dois. Mas quando adiciono o índice KNO às tabelas temporárias tempA, tempB, tempC. O segundo dispara.
O que quero dizer é: fica mais rápido, muito. Eu consulto por 1 ano de valores. usando COM: cerca de 58 minutos. usando Temp Table com INDEX: cerca de 30 minutos.
Os tempos de consulta para 4 meses de valores são fornecidos abaixo.
Usando COM
DENEME@DENEME Finished 15:37:02 15:40:38 03:36 mins Select 500 WITH A
Total: 216.000 ms
Usando Tabelas Temporárias + Índice
DENEME@DENEME Finished 15:41:54 15:41:55 1 sec Select 500 WITH D
DENEME@DENEME Finished 15:41:38 15:41:38 665 msecs Insert 34660 INSERT INTO C
DENEME@DENEME Finished 15:41:21 15:41:35 14 secs Insert 34660 INSERT INTO B
DENEME@DENEME Finished 15:41:17 15:41:17 109 msecs Insert 1804 INSERT INTO A
DENEME@DENEME Finished 15:41:12 15:41:12 33 msecs Unknown 0 TRUNCATE TABLE C
DENEME@DENEME Finished 15:41:12 15:41:12 39 msecs Unknown 0 TRUNCATE TABLE B
DENEME@DENEME Finished 15:41:11 15:41:11 203 msecs Unknown 0 TRUNCATE TABLE A
Total: 16049 ms
Minha pergunta é :
Posso dar dica ao oracle para adicionar índice quando estiver construindo COM tabelas temporárias?
Um índice agrupado no servidor SQL como um dicionário ou lista telefônica. A,B,C,D continua.
Se você procurar o nome Ozgur, você começa O, depois z etc.
Eu gostaria de uma explicação simples para este conceito para usuários do oracle savy.
Mais informações sobre índices clusterizados no Sql Server. O que é um índice agrupado?