Então, na verdade a limitação aí é da linguagem PL/SQL, ela só pode manipular/retornar/aceitar como entrada/saída 32767 bytes, então se vc quiser (por exemplo) ler totalmente um LOB, vc escreve um LOOP aonde vc lê e guarda numa variável os primeiros 32767 bytes e faz o processamento que quiser, depois lê os próximos 32767 bytes e processa, assim vai... Vc pode pensar no LOB como um "arquivo" que vc abre, lê uma "linha"/pedaço, processa, continua lendo e no fim vc fecha, é tipo assim, e o banco Oracle te dá uma package DBMS_LOB que justamente faz isso, são DBMS_LOB.OPEn, READ, WRITE, CLOSE... Veja no manual de programadores LOB e em http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1533006062995 , http://www.akadia.com/services/read_file_with_dbms_lob.html e http://www.psoug.org/reference/dbms_lob.html que vc acha uns exemplos, sintaxes, modo de usar....
[]s Chiappa --- Em oracle_br@yahoogrupos.com.br, Rogério Falconi <rogerfal...@...> escreveu > > jlchiappa bom dia... > > Estou com um problema de limitação de tamanho em manipulação de campos clob. > > Quando uso o dbms_lob.substr, a limitação dos 32767. Vc sabe me dizer como > posso romper isso? > O script funciona até os 32767, e depois para por estou de buffer. > > Blob resolveria isso? e como manipulo fazendo contatenação e etc? é o mesmo > jeito? > > Obrigado pela sua pasciência e presteza... > > Rogério > > Em 05/02/09, jlchiappa <jlchia...@...> escreveu: > > > > Relendo a resposta e pensando um pouco, acho que não ficou claro o que > > eu quis dizer com a volta coordenada de todo mundo no horário > > imediatamente anterior à operação NOLOG se houver operações LOGGING > > concorrentes, deixem-me detalhar um pouco - primeiro, o conceito de > > NOLOG é : uma operação que está INTRODUZINDO dados novos e é > > direcionada a usar blocos ACIMA dos últimos já usados, blocos 100% > > garantidamente virgens portanto. Já que é assim, se der um crash no > > banco nessa situação nós temos 100% de certeza de que ** NÃO ** > > existem outras transações querendo mexer com outros registros nesses > > blocos, os blocos que estão sofrendo operação NOLOG estão > > garantidamente VAZIOS no momento (é por isso inclusive que é > > fisicamente IMPOSSÍVEL um UPDATE em modo NOLOG)..... Sendo assim, o > > que aconteceria se vc durante ou imediatamente após uma operação de > > NOLOG aconteceram e foram comitadas operações LOGGING normais e nesse > > cenário vc pedisse volta de backup dos datafiles e aplicasse os logs > > todos até o instante anterior à falha, vc recuperaria ** TOTALMENTE ** > > as operações LOGGING (pois afinal de contas elas ocorreram em blocos > > que GERARM redo log normal!), só os blocos que sofreram a operação > > NOLOG é que não seriam recuperados... A questão é que muitas vezes há > > algum tipo de relacionamento lógico entre o segmento que sofreu NOLOG > > e o segmento LOGGING, e com o restore completo vc teria dados do > > segmento LOGGING sem o correspondente no segmento NOLOGGING, > > logicamente falando PODE SER que nesse cenário bastasse re-executar a > > operação NOLOGGING mas pode ser que não, isso depende da sua > > necessidade, é por isso que eu acenei com a possibilidade de restaurar > > só até o instante antes da operação NOLOG e re-executar tanto a > > operação NOLOG quanto a LOGGING.... > > > > []s > > > > Chiappa > > > > --- Em oracle_br@yahoogrupos.com.br <oracle_br%40yahoogrupos.com.br>, > > "jlchiappa" <jlchiappa@> escreveu > > > > > > Só complementando : como eu disse, normalmente operações NOLOG ocorrem > > > em período de carga, então via de regra não há outras transações > > > gravando/alterando na mesma tablespace, normalmente não há > > > considerações necessárias, MAS se houver em caso de crash vc voltará > > > um backup anterior dos datafiles dessa tablespace e irá aplicar os > > > logs até o momento imediatamente anterior ao início NOLOG, que é o que > > > vc tem - ou seja, na prática o banco VOLTA à situação que estava nessa > > > ocasião, as transações outras que estavam ocorrendo em paralelo à > > > operação NOLOG serão perdidas, também terão que ser > > > re-executadas...São coisas do tipo que vc TEM que estabelecer/combinar > > > muito muito direitinho com o DBA e com os OUTROS desenvolvedores , ok ? > > > > > > []s > > > > > > Chiappa > > > > > > > > Colegas, vamos botar uns detalhes aí nessa thread : Brum, primeiro de > > > > tudo se vc pedir um ALTER TABLESPACE nn NOLOGGING (ou a criar como > > > > NOLOGGING), o que vc conseguiu nesse momento com isso foi NADA, ZERO, > > > > NIENTE, ** COISA ALGUMA ** - somente quando vc ** CRIAR ** e/ou mover > > > > segmentos/tabelas pra dentro dessa tablespace sem especificar cláusula > > > > de log é que esse atributo da tablespace vai ser assumido pelo > > > > segmento/tabela, e isso é CRUCIAL, pois operações NOLOGGING são ** > > > > sempre ** a nível de tabela/segmento, esse atributo NOLOG da > > > > tablespace serve apenas como default quando vc cria a > > > > tabela/segmento...O manual mesmo já nos diz : > > > > > > > > "When an existing tablespace logging attribute is changed by an ALTER > > > > TABLESPACE statement, all tables, indexes, and partitions created > > > > after the statement will have the new default logging attribute (which > > > > you can still subsequently override). The logging attribute of > > > > existing objects is not changed." > > > > > > > > Continuando, para que uma operação não gere log, *** absolutamente não > > > > basta *** que o atributo de NOLOG esteja ativo, há uma SEGUNDA > > > > exigência , é EXIGIDO que a operação esteja na lista de operações que > > > > são permitidas nesse modo : UPDATE por exemplo não é, e já cansei de > > > > ver "expertos" recomendarem ou debaterem contra a conveniência de > > > > UPDATE em tabelas nolog, o que não faz o MENOR SENTIDO... Ok ? Isto > > > > deve ficar escrupulosamente claro, o fato de vc ativar o atributo de > > > > NOLOG numa tabela por si *** NÂO QUER DIZER NADA **, não fará COISA > > > > ALGUMA se a operação não permite modo nolog, apenas umas poucas > > > > operações (como INSERT /*+ APPEND */ , CREATE TABLE, etc) permitem... > > > > Há uma TERCEIRA condição, que é a de que o modo NOLOG de operação > > > > SEJA permitido nesse banco, vc pode ativar o atributo FORCE LOGGING no > > > > seu banco, aí esse cara tem precedência sobre os anteriores, num banco > > > > com FORCELOGGING vc pode ativar o atributo num dado segmento e tentar > > > > uma operação que normalmente permite nolog que o log será SIM > > > > gerado...A Oracle criou isso para os casos em que há replicação > > > > lógica/standby, streams ou coisas do tipo, aonde o log é exigido > > > > sempre para que tais features funcionem a contento. > > > > > > > > Muito bem, agora sobre o backup : realmente, se vc tem um dado > > > > segmento com atributo NOLOG e o banco não está em FORCELOGGING, se vc > > > > iniciar uma operação que permita NOLOG às (digamos) 09:00h , não será > > > > gerado log desse ponto em diante para esse segmento, então a coisa é > > > > assim : necessariamente esse recurso é usado para cargas em ambiente > > > > DW, á noite, onde o segmento em questão ** NÃO ** está sendo usado por > > > > ninguém , NÂO HÁ absolutamente outras transações usando a tal > > > > tablespace ativamente (só consultas), então SE durante a operação, ou > > > > mesmo imediatamente após a operação vc tiver um crash, vc volta o > > > > backup anterior do(s) datafile(s) (que óbvio, está com SCN ** anterior > > > > ** à operação) e aplica os logs ** até ** às 09:00h, que vc tem,vc > > > > perde só a operação NOLOG, yes ??? Simples... O que vc faz também é , > > > > imediatamente após a operação NOLOG, é fazer um novo backup ** DO(s) > > > > DATAFILE(S) que sofreram a operação, aí sim com esse backup se depois > > > > dele vc tiver um crash é ELE que vc vai recuperar, cfrme citado na > > > > thread não há log gerados na operação, então NUNCA vc conseguirá fazer > > > > um recover com os logs apenas E o datafile do backup anterior está > > > > antigo, vc TEM que ter backup dos datafiles APÓS A OPERAÇÃO, mesmo... > > > > O manual de Backup nos diz textualmente isso : > > > > > > > > "The presence of NOLOGGING operations must be taken into account when > > > > devising the backup and recovery strategy. When a database relies on > > > > NOLOGGING operations, the conventional recovery strategy (of > > > > recovering from the latest tape backup and applying the archived > > > > logfiles) is no longer applicable because the log files cannot recover > > > > the NOLOGGING operation." > > > > > > > > É claro, isso ainda tem que ser joeirado com a sua estratégia de uso > > > > : por exemplo, num cliente anterior (DW) o particionamento era por dia > > > > do mês, e cada partição ficava numa tablespace diferente, assim era > > > > feita a carga NOLOG na partição do dia de hoje, que era uma tablespace > > > > só pra ela, SE eu tivesse problema eu simplesmente ** dropava ** a > > > > tablespace, recriava VAZIA e re-executava o procedimento de carga do > > > > dia... > > > > > > > > []s > > > > > > > > Chiappa > > > > > > > > --- Em oracle_br@yahoogrupos.com.br <oracle_br%40yahoogrupos.com.br>, > > Alexandre Brum > > > > <alexandre_brum@> escreveu > > > > > > > > > > Obrigado Carlos > > > > > > > > > > Com relação aos dados não haverá problema, pois tenho como reiniciar > > > > a carga dos dados. O meu receio maior é quanto a recuperar o datafile > > > > dessa tablespace em no logging. Se o BD por exemplo, iria reconhecer > > > > um datafile de um cold backup anterior, mesmo com os datafiles das > > > > outras tablespaces, controlfile estarem numa nova versão. > > > > > > > > > > > > > > > Fique com Deus. > > > > > Um grande abraço. > > > > > > > > > > Att. > > > > > Alexandre Brum > > > > > > > > > > > > > > > > > > > > > > > > > ________________________________ > > > > > De: Carlos E. Gorges <carlos.gorges@> > > > > > Para: oracle_br@yahoogrupos.com.br <oracle_br%40yahoogrupos.com.br> > > > > > Enviadas: Terça-feira, 3 de Fevereiro de 2009 16:59:07 > > > > > Assunto: Re: [oracle_br] Re: Recuperação de Tablespace em no logging > > > > > > > > > > > > > > > Boa tarde, > > > > > > > > > > Depende do tipo de backup que você faz. > > > > > > > > > > Em um cold backup, termine o banco com immediate, não com abort > > (ou ao > > > > > menos force um checkpoint e espere ele terminar)... o abort faz com > > > > > que o banco execute o restore no startup e com nologging não há > > dados > > > > > no redo para o restore. > > > > > Em um hot backup (expdb/export, etc) não há problema, pois os blocos > > > > > são lidos logicamente (datafiles, undo e buffer cache) e não > > > > > fisicamente do disco, pegando as informações corretas via leitura > > > > > consistente. > > > > > Em um backup baseado em archive, você NÃO terá as informações dessas > > > > > alterações, já que o archive é na verdade o redolog que encheu e com > > > > > nologging as informações dos blocos de dados alterados não vão > > para o > > > > > redolog... você conseguirá fazer o recover: os datafiles ficarão > > > > > legiveis pelo oracle mas em nível de dados eles provavelmente > > ficarão > > > > > inconsistentes, além da estrutura dos metadados e índices que > > ficarão > > > > > incorretas de acordo com os dados da tabela. > > > > > > > > > > cya[]; > > > > > Carlos E. Gorges <carlos.gorges@ gmail.com> > > > > > > > > > > 2009/2/3 alexandre_brum <alexandre_brum@ yahoo.com. br>: > > > > > > Carlos > > > > > > > > > > > > Sim. Sei que irei perder esses dados. Mas no caso do datafile > > dessa > > > > > > tablespace se corromper, como seria o processo de restore do > > > backup a > > > > > > fim de que eu possa novamente ter essa tablespace disponível? > > > > > > > > > > > > Obrigado. > > > > > > > > > > > > Att. > > > > > > Alexandre Brum > > > > > > > > > > > > --- Em oracle...@yahoogrup os.com.br, "Carlos E. Gorges" > > > > > > <carlos.gorges@ ...> escreveu > > > > > > > > > > > >> > > > > > >> Boa tarde, > > > > > >> > > > > > >> O nologging irá desligar parte da geração do redolog, > > incluindo os > > > > > >> blocos de dados alterados no DML. Como esses dados ficarão em > > > memória > > > > > >> até ser descarregados para os datafiles em um checkpoint e não > > > estão > > > > > >> em redo (disco), em caso de crash na máquina/banco os dados em > > > > memória > > > > > >> (SGA->Buffer cache) serão perdidos e consequentemente esses > > blocos > > > > > >> alterados também serão perdidos. O resultado será um segmento > > > em uma > > > > > >> versão (SCN) anterior ou parcial... Note que se algum > > datafile seja > > > > > >> corrompido, por bug ou problema no subsistema de I/O por > > exemplo, o > > > > > >> log não vai adiantar nada de qualquer modo... > > > > > >> > > > > > >> Em resumo: não há recuperação :-) > > > > > >> > > > > > >> cya[]; > > > > > >> Carlos E. Gorges <carlos.gorges@ ...> > > > > > >> > > > > > >> 2009/2/3 Alexandre Brum <alexandre_brum@ ...>: > > > > > >> > Prezados > > > > > >> > > > > > > >> > Durante um processo de carga pretendo colocar a tablespace > > desse > > > > > > usuário da > > > > > >> > carga em no logging para agilizar a carga. Entretanto, tenho > > > > > > dúvidas de como > > > > > >> > seria a recuperação dessa tablespace, se por algum motivo, > > > durante > > > > > > a carga, > > > > > >> > os datafiles dessa tablespace se corrompam. Como seria a > > > > > > recuperação dessa > > > > > >> > tablespace? > > > > > >> > > > > > > >> > Muito obrigado. > > > > > >> > Fique com Deus. > > > > > >> > Um grande abraço. > > > > > >> > > > > > > >> > Att. > > > > > >> > Alexandre Brum > > > > > > > > > > > > > > > > > > > > Veja quais são os assuntos do momento no Yahoo! +Buscados > > > > > http://br.maisbuscados.yahoo.com > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] >