{"id":34,"date":"2016-01-11T00:48:49","date_gmt":"2016-01-11T00:48:49","guid":{"rendered":"http:\/\/168.138.249.13\/?p=34"},"modified":"2020-08-06T03:31:45","modified_gmt":"2020-08-06T03:31:45","slug":"locks","status":"publish","type":"post","link":"https:\/\/adrianotanaka.com.br\/index.php\/2016\/01\/11\/locks\/","title":{"rendered":"Locks"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\" id=\"oracle-lock\">Oracle Lock<\/h2>\n\n\n\n<p>Conversando com alguns amigos entramos no assunto Lock e ent\u00e3o resolvi escrever esse post para explicar do que se trata esse mecanismo.<\/p>\n\n\n\n<p>Antes de tudo, devemos entender que o Lock n\u00e3o \u00e9 um problema e sim um mecanismo de prote\u00e7\u00e3o.<\/p>\n\n\n\n<p>Existe um conceito em banco de dados chamado&nbsp;<strong>ACID<\/strong>&nbsp;(<strong>A<\/strong>tomicidade,&nbsp;<strong>C<\/strong>onsist\u00eancia,&nbsp;<strong>I<\/strong>solamento e&nbsp;<strong>D<\/strong>urabilidade) veja&nbsp;<a href=\"https:\/\/pt.wikipedia.org\/wiki\/ACID\">aqui na Wikipedia<\/a>&nbsp;uma melhor explica\u00e7\u00e3o , nesse post vamos nos concentrar no&nbsp;<strong>I<\/strong>&nbsp;(isolamento).<\/p>\n\n\n\n<p><strong>Imagine a seguinte situa\u00e7\u00e3o:<\/strong><\/p>\n\n\n\n<p>O sal\u00e1rio do funcion\u00e1rio Jo\u00e3o \u00e9 de R$1000,00 e seu gerente resolve dar um aumento de R$200,00, seu gerente abre o programa que controla a folha de pagamento e ajusta o sal\u00e1rio para R$1200,00 mas esquece de clicar em salvar (commit) ou cancelar (rollback), se nesse meio tempo (entre ele confirmar ou cancelar) algu\u00e9m tamb\u00e9m tentar atualizar o sal\u00e1rio do Jo\u00e3o, um lock vai ocorrer pois o banco de dados est\u00e1 aguardando que o gerente libere esse campo com um commit ou um rollback.<\/p>\n\n\n\n<p>J\u00e1 imaginou se o banco de dados deixasse todo mundo atualizar o mesmo campo ao mesmo tempo? Como poder\u00edamos ter certeza de qual a informa\u00e7\u00e3o \u00e9 a v\u00e1lida? Por isso costumamos dizer que um lock \u00e9 um mecanismo de prote\u00e7\u00e3o e n\u00e3o um problema.<\/p>\n\n\n\n<p><strong>Tipos de lock<\/strong><\/p>\n\n\n\n<p>Agora que sabemos que um lock \u00e9 um mecanismo de prote\u00e7\u00e3o e n\u00e3o um problema, vamos entender os diferentes tipos de lock existentes em um banco de dados Oracle.<\/p>\n\n\n\n<p>Dentro do banco de dados Oracle existe uma view chamada&nbsp;<strong>V$LOCK<\/strong>&nbsp;que possui uma coluna chamada&nbsp;<strong>TYPE<\/strong>, nela conseguimos verificar qual o tipo de lock que esta ocorrendo, os mais comuns s\u00e3o os tipos TX e TM.<\/p>\n\n\n\n<p><strong>TX tamb\u00e9m conhecido como Row Lock<\/strong><\/p>\n\n\n\n<p>Um lock do tipo TX serve para evitar que diversos usu\u00e1rios editem a mesma linha ao mesmo tempo, gra\u00e7as ao lock TX apenas as linhas em uso ficam bloqueadas, deixando assim o resto da tabela livre para edi\u00e7\u00e3o, geralmente pegamos esse tipo de lock com SQLs mal escritos que n\u00e3o executam um commit logo ap\u00f3s a sua execu\u00e7\u00e3o.<\/p>\n\n\n\n<p><strong>TM lock de tabelas<\/strong><\/p>\n\n\n\n<p>Esse tipo de lock ocorre quando existem diversas opera\u00e7\u00f5es DML no mesmo objeto, como j\u00e1 falado, esse tipo de lock serve para proteger o objeto de uma poss\u00edvel altera\u00e7\u00e3o na estrutura da tabela enquanto um DML \u00e9 executado.<\/p>\n\n\n\n<p><strong>Uma infinidade de locks<\/strong><\/p>\n\n\n\n<p>Caso queiram se aprofundar no assunto, recomendo dar uma olhada na documenta\u00e7\u00e3o oficial da Oracle l\u00e1 existe uma tabela com as opera\u00e7\u00f5es e que tipo de lock elas podem causar :&nbsp;<a href=\"http:\/\/docs.oracle.com\/cd\/E11882_01\/server.112\/e41084\/ap_locks001.htm#SQLRF55502\">http:\/\/docs.oracle.com\/cd\/E11882_01\/server.112\/e41084\/ap_locks001.htm#SQLRF55502<\/a><\/p>\n\n\n\n<p>##Posso matar um lock? A resposta \u00e9 sim e n\u00e3o, isso varia para cada caso e o ideal \u00e9 que os locks sejam resolvidos de forma autom\u00e1tica pelo pr\u00f3prio banco. Onde trabalho, um cliente nos solicitou que os locks n\u00e3o sejam finalizados pois ele possui uma rotina que gera nota fiscal que \u00e9 normal ela travar e causar locks, tamb\u00e9m possu\u00edmos clientes que j\u00e1 solicitam isso direto, em caso de lock devemos mata-los. S\u00f3 mate o lock caso realmente seja necess\u00e1rio.<\/p>\n\n\n\n<p>##Referencias:&nbsp;<a href=\"http:\/\/docs.oracle.com\/cd\/E11882_01\/server.112\/e41084\/ap_locks001.htm#SQLRF55502\">http:\/\/docs.oracle.com\/cd\/E11882_01\/server.112\/e41084\/ap_locks001.htm#SQLRF55502<\/a>&nbsp;<a href=\"https:\/\/docs.oracle.com\/cloud\/latest\/db112\/REFRN\/dynviews_2027.htm#REFRN30121\">https:\/\/docs.oracle.com\/cloud\/latest\/db112\/REFRN\/dynviews_2027.htm#REFRN30121<\/a>&nbsp;<a href=\"https:\/\/pt.wikipedia.org\/wiki\/ACID\">https:\/\/pt.wikipedia.org\/wiki\/ACID<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Oracle Lock Conversando com alguns amigos entramos no assunto Lock e ent\u00e3o resolvi escrever esse post para explicar do que se trata esse mecanismo. Antes de tudo, devemos entender que o Lock n\u00e3o \u00e9 um problema e sim um mecanismo de prote\u00e7\u00e3o. Existe um conceito em banco de dados chamado&nbsp;ACID&nbsp;(Atomicidade,&nbsp;Consist\u00eancia,&nbsp;Isolamento e&nbsp;Durabilidade) veja&nbsp;aqui na Wikipedia&nbsp;uma melhor [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"material-hide-sections":[],"footnotes":""},"categories":[6,1],"tags":[5,4,3],"class_list":["post-34","post","type-post","status-publish","format-standard","hentry","category-oracle","category-uncategorized","tag-banco-de-dados","tag-database","tag-oracle"],"_links":{"self":[{"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/posts\/34","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=34"}],"version-history":[{"count":1,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/posts\/34\/revisions"}],"predecessor-version":[{"id":35,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/posts\/34\/revisions\/35"}],"wp:attachment":[{"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=34"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=34"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/adrianotanaka.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=34"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}