{"id":1134,"date":"2026-06-05T21:25:14","date_gmt":"2026-06-05T19:25:14","guid":{"rendered":"https:\/\/anjo.pt\/keyword-oracle\/?p=1134"},"modified":"2026-06-05T21:25:14","modified_gmt":"2026-06-05T19:25:14","slug":"asm-diskgroup-space-calculator-for-exacc","status":"publish","type":"post","link":"https:\/\/anjo.pt\/keyword-oracle\/2026\/06\/05\/asm-diskgroup-space-calculator-for-exacc\/","title":{"rendered":"ASM diskgroup space calculator for ExaCC"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">In ExaCC and probably on Exadata in OCI it is sometimes a bit complex to calculate how much space you need to add to the ASM, as you can only change the total space and the distribution. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When you just want to add 10TB (or GB) space to DATA diskgroup, you need to play a while or do an excel. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With the calculator below, you can now do it easily:<\/p>\n\n\n\n<style data-wp-block-html=\"css\">\n.asm-table { width: 100%; border-collapse: collapse; font-size: 14px; }\n  .asm-table th { font-weight: 500; font-size: 12px; color: var(--color-text-secondary); text-align: right; padding: 8px 10px; border-bottom: 0.5px solid var(--color-border-tertiary); }\n  .asm-table th:first-child { text-align: left; }\n  .asm-table td { padding: 6px 10px; border-bottom: 0.5px solid var(--color-border-tertiary); text-align: right; }\n  .asm-table td:first-child { text-align: left; font-weight: 500; color: var(--color-text-primary); }\n  .asm-table tr.total-row td { border-bottom: none; font-weight: 500; background: var(--color-background-secondary); }\n  .asm-table input[type=number] { width: 110px; text-align: right; font-size: 14px; padding: 4px 8px; }\n  .row-label { display: flex; align-items: center; gap: 8px; }\n  .dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }\n  .dot-data { background: #378ADD; }\n  .dot-reco { background: #1D9E75; }\n  .dot-sparse { background: #BA7517; }\n  .dot-total { background: var(--color-text-secondary); }\n  .unit { font-size: 12px; color: var(--color-text-secondary); margin-left: 2px; }\n@media (max-width: 768px) {\n  .asm-table input[type=number] {\n    width: 60px;\n    padding: 3px 4px;\n    font-size: 13px;\n  }\n\n  .asm-table {\n    font-size: 12px;\n  }\n\n  .asm-table th,\n  .asm-table td {\n    padding: 4px 3px;\n  }\n}\n<\/style>\n\n<script data-wp-block-html=\"js\">\nconst rows = ['data','reco','sparse'];\n\nfunction g(id) { return document.getElementById(id); }\nfunction v(id) { return parseFloat(g(id).value) || 0; }\nfunction set(id, val) { g(id).value = val === null ? '' : round(val); }\nfunction round(x) { return Math.round(x * 100) \/ 100; }\n\nfunction setRow(row, usable) {\n  set(row+'-usable', usable);\n  set(row+'-raw', usable * 3);\n}\n\nfunction refreshPcts() {\n  const total = v('total-usable');\n  rows.forEach(r => {\n    const u = v(r+'-usable');\n    set(r+'-pct', total > 0 ? round(u \/ total * 100) : 0);\n  });\n}\n\nfunction refreshTotal() {\n  const totalU = rows.reduce((s, r) => s + v(r+'-usable'), 0);\n  set('total-usable', totalU);\n  set('total-raw', totalU * 3);\n}\n\nfunction onUsable(row) {\n  const u = v(row+'-usable');\n  set(row+'-raw', u * 3);\n  refreshTotal();\n  refreshPcts();\n}\n\n\nfunction onRaw(row) {\n  const u = v(row+'-raw') \/ 3;\n  set(row+'-usable', u);\n  refreshTotal();\n  refreshPcts();\n}\n\nfunction onPct(row) {\n  const total = v('total-usable');\n  const pct = v(row+'-pct');\n  const u = total * pct \/ 100;\n  set(row+'-usable', u);\n  set(row+'-raw', u * 3);\n  refreshTotal();\n  refreshPcts();\n}\n\nfunction onTotalUsable() {\n  const total = v('total-usable');\n  set('total-raw', total * 3);\n  rows.forEach(r => {\n    const pct = v(r+'-pct');\n    const u = total * pct \/ 100;\n    set(r+'-usable', u);\n    set(r+'-raw', u * 3);\n  });\n}\n\nfunction onTotalRaw() {\n  const total = v('total-raw') \/ 3;\n  set('total-usable', total);\n  rows.forEach(r => {\n    const pct = v(r+'-pct');\n    const u = total * pct \/ 100;\n    set(r+'-usable', u);\n    set(r+'-raw', u * 3);\n  });\n}\n\nfunction init() {\n  const total = 16;\n  set('total-usable', total);\n  set('total-raw', total * 3);\n  setRow('data',   total * 0.8);\n  setRow('reco',   total * 0.2);\n  setRow('sparse', 0);\n  refreshPcts();\n}\n\ndocument.addEventListener('DOMContentLoaded', function() {\n  init();\n});\n<\/script>\n\n<div style=\"padding: 1rem 0;\">\n  <p style=\"font-size: 13px; color: var(--color-text-secondary); margin: 0 0 1rem 10px;\">\n    Edit any cell \u2014 usable, raw (\u00d73), % of total, or the total row itself. Other values update accordingly.\n  <\/p>\n\n  <table class=\"asm-table\">\n    <thead>\n      <tr>\n        <th style=\"width:120px;\">Disk group<\/th>\n        <th>Usable space<\/th>\n        <th>Raw space (\u00d73)<\/th>\n        <th>% of total<\/th>\n      <\/tr>\n    <\/thead>\n    <tbody>\n      <tr>\n        <td><div class=\"row-label\"><span class=\"dot dot-data\"><\/span>DATA<\/div><\/td>\n        <td><input type=\"number\" id=\"data-usable\" min=\"0\" step=\"0.01\" oninput=\"onUsable('data')\"><span class=\"unit\">TB<\/span><\/td>\n        <td><input type=\"number\" id=\"data-raw\" min=\"0\" step=\"0.01\" oninput=\"onRaw('data')\"><span class=\"unit\">TB<\/span><\/td>\n        <td><input type=\"number\" id=\"data-pct\" min=\"0\" max=\"100\" step=\"0.1\" oninput=\"onPct('data')\" style=\"width:50px;\"><span class=\"unit\">%<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td><div class=\"row-label\"><span class=\"dot dot-reco\"><\/span>RECO<\/div><\/td>\n        <td><input type=\"number\" id=\"reco-usable\" min=\"0\" step=\"0.01\" oninput=\"onUsable('reco')\"><span class=\"unit\">TB<\/span><\/td>\n        <td><input type=\"number\" id=\"reco-raw\" min=\"0\" step=\"0.01\" oninput=\"onRaw('reco')\"><span class=\"unit\">TB<\/span><\/td>\n        <td><input type=\"number\" id=\"reco-pct\" min=\"0\" max=\"100\" step=\"0.1\" oninput=\"onPct('reco')\" style=\"width:50px;\"><span class=\"unit\">%<\/span><\/td>\n      <\/tr>\n      <tr>\n        <td><div class=\"row-label\"><span class=\"dot dot-sparse\"><\/span>SPARSE<\/div><\/td>\n        <td><input type=\"number\" id=\"sparse-usable\" min=\"0\" step=\"0.01\" oninput=\"onUsable('sparse')\"><span class=\"unit\">TB<\/span><\/td>\n        <td><input type=\"number\" id=\"sparse-raw\" min=\"0\" step=\"0.01\" oninput=\"onRaw('sparse')\"><span class=\"unit\">TB<\/span><\/td>\n        <td><input type=\"number\" id=\"sparse-pct\" min=\"0\" max=\"100\" step=\"0.1\" oninput=\"onPct('sparse')\" style=\"width:50px;\"><span class=\"unit\">%<\/span><\/td>\n      <\/tr>\n      <tr class=\"total-row\">\n        <td><div class=\"row-label\"><span class=\"dot dot-total\"><\/span>Total<\/div><\/td>\n        <td><input type=\"number\" id=\"total-usable\" min=\"0\" step=\"0.01\" oninput=\"onTotalUsable()\"><span class=\"unit\">TB<\/span><\/td>\n        <td><input type=\"number\" id=\"total-raw\" min=\"0\" step=\"0.01\" oninput=\"onTotalRaw()\"><span class=\"unit\">TB<\/span><\/td>\n        <td><span style=\"font-size:14px; color: var(--color-text-secondary); padding: 4px 8px; display:inline-block;\">100%<\/span><\/td>\n      <\/tr>\n    <\/tbody>\n  <\/table>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">When looking inside asmcmd, you see the &#8220;Raw space&#8221;. This is how much from disk space is used. The Usable space is what the users see and what you need to consider. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>In ExaCC and probably on Exadata in OCI it is sometimes a bit complex to calculate how much space you need to add to the ASM, as you can only change the total space and the distribution. When you just want to add 10TB (or GB) space to DATA diskgroup, you need to play a [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[51,67,82,21,52,6],"tags":[54],"class_list":["post-1134","post","type-post","status-publish","format-standard","category-cloud","category-engineer-systems","category-exacc","category-ideas","category-oci","category-oracle","tag-oci","czr-hentry"],"_links":{"self":[{"href":"https:\/\/anjo.pt\/keyword-oracle\/wp-json\/wp\/v2\/posts\/1134","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/anjo.pt\/keyword-oracle\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/anjo.pt\/keyword-oracle\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/anjo.pt\/keyword-oracle\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/anjo.pt\/keyword-oracle\/wp-json\/wp\/v2\/comments?post=1134"}],"version-history":[{"count":3,"href":"https:\/\/anjo.pt\/keyword-oracle\/wp-json\/wp\/v2\/posts\/1134\/revisions"}],"predecessor-version":[{"id":1137,"href":"https:\/\/anjo.pt\/keyword-oracle\/wp-json\/wp\/v2\/posts\/1134\/revisions\/1137"}],"wp:attachment":[{"href":"https:\/\/anjo.pt\/keyword-oracle\/wp-json\/wp\/v2\/media?parent=1134"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/anjo.pt\/keyword-oracle\/wp-json\/wp\/v2\/categories?post=1134"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/anjo.pt\/keyword-oracle\/wp-json\/wp\/v2\/tags?post=1134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}