Quantcast
Channel: Comments for Oracle DBA – A lifelong learning experience
Viewing all 467 articles
Browse latest View live

Comment on ASM disks – lsdg compared with the v$asm_diskgroup view by John Hallas

$
0
0

You are exactly right Scott. Glad to see your are still keeping yourself well educated by reading my blog:)
If you take the System 1 lsdg example first line as a working example. if you multiply 798940 * 2 and then add 433152 you get 2031032 which is Free_Mb
Free_MB Req_mir_free_MB Usable_file_MB
2031032 433152 798940

I could amend the v$asm_diskgroup query to show failgroups and really I should do – however it has never been a problem because 99% of our systems do not use NORMAL or HIGH levels of mirroring – it is all done at the SAN level

John


Comment on ASM disks – lsdg compared with the v$asm_diskgroup view by Vitaly Kaminsky

$
0
0

Hi John,

I love the original asm_info.sql and thank you for updating it over the years.

Below is another little thing from Oracle itself – I am using it when telling clients why they are really in trouble when disks begin to fail on Exadatas (after about 3 years).

I thing you can use some ideas from here as well.

Vitaly

SET SERVEROUTPUT ON
SET LINES 155
SET PAGES 0
SET TRIMSPOOL ON

DECLARE
v_num_disks NUMBER;
v_group_number NUMBER;
v_max_total_mb NUMBER;

v_required_free_mb NUMBER;
v_usable_mb NUMBER;
v_cell_usable_mb NUMBER;
v_one_cell_usable_mb NUMBER;
v_enuf_free BOOLEAN := FALSE;
v_enuf_free_cell BOOLEAN := FALSE;

v_req_mirror_free_adj_factor NUMBER := 1.10;
v_req_mirror_free_adj NUMBER := 0;
v_one_cell_req_mir_free_mb NUMBER := 0;

v_disk_desc VARCHAR(10) := ‘SINGLE’;
v_offset NUMBER := 50;

v_db_version VARCHAR2(8);
v_inst_name VARCHAR2(1);

v_cfc_fail_msg VARCHAR2(500);

BEGIN

SELECT substr(version,1,8), substr(instance_name,1,1) INTO v_db_version, v_inst_name FROM v$instance;

IF v_inst_name ‘+’ THEN
DBMS_OUTPUT.PUT_LINE(‘ERROR: THIS IS NOT AN ASM INSTANCE! PLEASE LOG ON TO AN ASM INSTANCE AND RE-RUN THIS SCRIPT.’);
GOTO the_end;
END IF;

DBMS_OUTPUT.PUT_LINE(‘—— DISK and CELL Failure Diskgroup Space Reserve Requirements ——‘);
DBMS_OUTPUT.PUT_LINE(‘ This procedure determines how much space you need to survive a DISK or CELL failure. It also shows the usable space ‘);
DBMS_OUTPUT.PUT_LINE(‘ available when reserving space for disk or cell failure. ‘);
DBMS_OUTPUT.PUT_LINE(‘ Please see MOS note 1551288.1 for more information. ‘);
DBMS_OUTPUT.PUT_LINE(‘. . .’);
DBMS_OUTPUT.PUT_LINE(‘ Description of Derived Values:’);
DBMS_OUTPUT.PUT_LINE(‘ One Cell Required Mirror Free MB : Required Mirror Free MB to permit successful rebalance after losing largest CELL regardless of redundancy type’);
DBMS_OUTPUT.PUT_LINE(‘ Disk Required Mirror Free MB : Space needed to rebalance after loss of single or double disk failure (for normal or high redundancy)’);
DBMS_OUTPUT.PUT_LINE(‘ Disk Usable File MB : Usable space available after reserving space for disk failure and accounting for mirroring’);
DBMS_OUTPUT.PUT_LINE(‘ Cell Usable File MB : Usable space available after reserving space for SINGLE cell failure and accounting for mirroring’);
DBMS_OUTPUT.PUT_LINE(‘. . .’);

IF (v_db_version = ‘11.2.0.3’) OR (v_db_version = ‘11.2.0.4’) OR (v_db_version = ‘12.1.0.1’) OR (v_db_version = ‘12.1.0.2’) THEN
v_req_mirror_free_adj_factor := 1.10;
DBMS_OUTPUT.PUT_LINE(‘ASM Version: ‘||v_db_version);
ELSE
v_req_mirror_free_adj_factor := 1.5;
DBMS_OUTPUT.PUT_LINE(‘ASM Version: ‘||v_db_version||’ – WARNING DISK FAILURE COVERAGE ESTIMATES HAVE NOT BEEN VERIFIED ON THIS VERSION!’);
END IF;

DBMS_OUTPUT.PUT_LINE(‘. . .’);
— Set up headings
DBMS_OUTPUT.PUT_LINE(‘—————————————————————————————————————————————————-‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘|Cell Req”d ‘);
DBMS_OUTPUT.PUT(‘|Disk Req”d ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT_Line(‘|’);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘|DG ‘);
DBMS_OUTPUT.PUT(‘|Num ‘);
DBMS_OUTPUT.PUT(‘|Disk Size ‘);
DBMS_OUTPUT.PUT(‘|DG Total ‘);
DBMS_OUTPUT.PUT(‘|DG Used ‘);
DBMS_OUTPUT.PUT(‘|DG Free ‘);
DBMS_OUTPUT.PUT(‘|Mirror Free ‘);
DBMS_OUTPUT.PUT(‘|Mirror Free ‘);
DBMS_OUTPUT.PUT(‘|Disk Usable ‘);
DBMS_OUTPUT.PUT(‘|Cell Usable ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT_LINE(‘|PCT |’);
DBMS_OUTPUT.PUT(‘|DG Name ‘);
DBMS_OUTPUT.PUT(‘|Type ‘);
DBMS_OUTPUT.PUT(‘|Disks’);
DBMS_OUTPUT.PUT(‘|MB ‘);
DBMS_OUTPUT.PUT(‘|MB ‘);
DBMS_OUTPUT.PUT(‘|MB ‘);
DBMS_OUTPUT.PUT(‘|MB ‘);
DBMS_OUTPUT.PUT(‘|MB ‘);
DBMS_OUTPUT.PUT(‘|MB ‘);
DBMS_OUTPUT.PUT(‘|File MB ‘);
DBMS_OUTPUT.PUT(‘|File MB ‘);
DBMS_OUTPUT.PUT(‘|DFC ‘);
DBMS_OUTPUT.PUT(‘|CFC ‘);
DBMS_OUTPUT.PUT_LINE(‘|Util |’);
DBMS_OUTPUT.PUT_LINE(‘—————————————————————————————————————————————————-‘);

FOR dg IN (SELECT name, type, group_number, total_mb, free_mb, required_mirror_free_mb FROM v$asm_diskgroup ORDER BY name) LOOP

v_enuf_free := FALSE;

v_req_mirror_free_adj := dg.required_mirror_free_mb * v_req_mirror_free_adj_factor;

— Find largest amount of space allocated to a cell
SELECT sum(disk_cnt), max(max_total_mb), max(sum_total_mb)*v_req_mirror_free_adj_factor
INTO v_num_disks, v_max_total_mb, v_one_cell_req_mir_free_mb
FROM (SELECT count(1) disk_cnt, max(total_mb) max_total_mb, sum(total_mb) sum_total_mb
FROM v$asm_disk
WHERE group_number = dg.group_number
GROUP BY failgroup);

— Eighth Rack
IF dg.type = ‘NORMAL’ THEN

— Eighth Rack
IF (v_num_disks v_required_free_mb THEN v_enuf_free := TRUE; END IF;
— Quarter Rack
ELSIF (v_num_disks >= 36 AND v_num_disks v_required_free_mb THEN v_enuf_free := TRUE; END IF;
— Half Rack
ELSIF (v_num_disks >= 84 AND v_num_disks v_required_free_mb THEN v_enuf_free := TRUE; END IF;
— Full rack is most conservative, it will be default
ELSE
— Use eqn: y = 1.33333 x+83220.
v_required_free_mb := 1.33333 * v_max_total_mb + 83220;
IF dg.free_mb > v_required_free_mb THEN v_enuf_free := TRUE; END IF;

END IF;

— DISK usable file MB
v_usable_mb := ROUND((dg.free_mb – v_required_free_mb)/2);
v_disk_desc := ‘ONE disk’;

— CELL usable file MB
v_cell_usable_mb := ROUND( (dg.free_mb – v_one_cell_req_mir_free_mb)/2 );
v_one_cell_usable_mb := v_cell_usable_mb;

ELSE
— HIGH redundancy

— Eighth Rack
IF (v_num_disks v_required_free_mb THEN v_enuf_free := TRUE; END IF;
— Quarter Rack
ELSIF (v_num_disks > 18 AND v_num_disks v_required_free_mb THEN v_enuf_free := TRUE; END IF;
— Half Rack
ELSIF (v_num_disks > 36 AND v_num_disks v_required_free_mb THEN v_enuf_free := TRUE; END IF;
— Full rack is most conservative, it will be default
ELSE
— Use eqn: y = 2.14077 x+54276.4
v_required_free_mb := 2.14077 * v_max_total_mb + 54276.4;
IF dg.free_mb > v_required_free_mb THEN v_enuf_free := TRUE; END IF;

END IF;

— DISK usable file MB
v_usable_mb := ROUND((dg.free_mb – v_required_free_mb)/3);
v_disk_desc := ‘TWO disks’;

— CELL usable file MB
v_one_cell_usable_mb := ROUND( (dg.free_mb – v_one_cell_req_mir_free_mb)/3 );

END IF;
DBMS_OUTPUT.PUT(‘|’||RPAD(dg.name,v_offset-40));
DBMS_OUTPUT.PUT(‘|’||RPAD(nvl(dg.type,’ ‘),v_offset-41));
DBMS_OUTPUT.PUT(‘|’||LPAD(TO_CHAR(v_num_disks),v_offset-45));
DBMS_OUTPUT.PUT(‘|’||TO_CHAR(v_max_total_mb,’9,999,999’));
DBMS_OUTPUT.PUT(‘|’||TO_CHAR(dg.total_mb,’999,999,999’));
DBMS_OUTPUT.PUT(‘|’||TO_CHAR(dg.total_mb – dg.free_mb,’999,999,999’));
DBMS_OUTPUT.PUT(‘|’||TO_CHAR(dg.free_mb,’999,999,999’));
DBMS_OUTPUT.PUT(‘|’||TO_CHAR(ROUND(v_one_cell_req_mir_free_mb),’999,999,999’));
DBMS_OUTPUT.PUT(‘|’||TO_CHAR(ROUND(v_required_free_mb),’999,999,999’));
DBMS_OUTPUT.PUT(‘|’||TO_CHAR(ROUND(v_usable_mb),’999,999,999’));
DBMS_OUTPUT.PUT(‘|’||TO_CHAR(ROUND(v_one_cell_usable_mb),’999,999,999’));

IF v_enuf_free THEN
DBMS_OUTPUT.PUT(‘|’||’PASS’);
ELSE
DBMS_OUTPUT.PUT(‘|’||’FAIL’);
END IF;

IF dg.type = ‘NORMAL’ THEN
— Calc Free Space for Rebalance Due to Cell Failure
IF v_req_mirror_free_adj < dg.free_mb THEN
DBMS_OUTPUT.PUT('|'||'PASS');
ELSE
DBMS_OUTPUT.PUT('|'||'FAIL');
v_cfc_fail_msg := 'WARNING: Not enough free space to rebalance after loss of ONE cell (however, cell failure is very rare)';
END IF;
ELSE
— Calc Free Space for Rebalance Due to Single Cell Failure
IF v_one_cell_req_mir_free_mb 0 THEN
DBMS_OUTPUT.PUT_LINE(‘|’||TO_CHAR((((dg.total_mb – dg.free_mb)/dg.total_mb)*100),’999.9′)||CHR(37)||’|’);
ELSE
DBMS_OUTPUT.PUT_LINE(‘| |’);
END IF;

END LOOP;

DBMS_OUTPUT.PUT_LINE(‘—————————————————————————————————————————————————-‘);
<>

IF v_cfc_fail_msg is not null THEN
DBMS_OUTPUT.PUT_LINE(‘Cell Failure Coverage Freespace Failures Detected. Warning Message Follows.’);
DBMS_OUTPUT.PUT_LINE(v_cfc_fail_msg);
END IF;

DBMS_OUTPUT.PUT_LINE(‘. . .’);
DBMS_OUTPUT.PUT_LINE(‘Script completed.’);

END;
/

WHENEVER SQLERROR EXIT FAILURE;

Comment on More problems with orapwd file and shipping redo logs by The need of refreshing/copying an Oracle 12c Password File (stored in ASM) while configuring Active Data Guard of a RAC database - Oracle Blog - Oracle - Toad World

Comment on Creating standby database inc DG Broker and 12c changes by Rman duplicating an oracle 11g database in active state on the same host | Bitbach's Blog

$
0
0

[…] when auxiliary instance is started with spfile cannot use SPFILE clause underway the duplicate run. Creating standby database inc dg broker and 12c changes helped me out here in locating the cause of the problem. Thinking the problem through, yet another […]

Comment on ASM disks – lsdg compared with the v$asm_diskgroup view by Vitaly Kaminsky

$
0
0

Hi John,

I love the original asm_info.sql and thank you for updating it over the years.

Below is another little thing from Oracle itself – I am using it when telling clients why they are really in trouble when disks begin to fail on Exadatas (after about 3 years).

Vitaly

SET SERVEROUTPUT ON
SET LINES 155
SET PAGES 0
SET TRIMSPOOL ON

DECLARE
v_num_disks NUMBER;
v_group_number NUMBER;
v_max_total_mb NUMBER;

v_required_free_mb NUMBER;
v_usable_mb NUMBER;
v_cell_usable_mb NUMBER;
v_one_cell_usable_mb NUMBER;
v_enuf_free BOOLEAN := FALSE;
v_enuf_free_cell BOOLEAN := FALSE;

v_req_mirror_free_adj_factor NUMBER := 1.10;
v_req_mirror_free_adj NUMBER := 0;
v_one_cell_req_mir_free_mb NUMBER := 0;

v_disk_desc VARCHAR(10) := ‘SINGLE’;
v_offset NUMBER := 50;

v_db_version VARCHAR2(8);
v_inst_name VARCHAR2(1);

v_cfc_fail_msg VARCHAR2(500);

BEGIN

SELECT substr(version,1,8), substr(instance_name,1,1) INTO v_db_version, v_inst_name FROM v$instance;

IF v_inst_name ‘+’ THEN
DBMS_OUTPUT.PUT_LINE(‘ERROR: THIS IS NOT AN ASM INSTANCE! PLEASE LOG ON TO AN ASM INSTANCE AND RE-RUN THIS SCRIPT.’);
GOTO the_end;
END IF;

DBMS_OUTPUT.PUT_LINE(‘—— DISK and CELL Failure Diskgroup Space Reserve Requirements ——‘);
DBMS_OUTPUT.PUT_LINE(‘ This procedure determines how much space you need to survive a DISK or CELL failure. It also shows the usable space ‘);
DBMS_OUTPUT.PUT_LINE(‘ available when reserving space for disk or cell failure. ‘);
DBMS_OUTPUT.PUT_LINE(‘ Please see MOS note 1551288.1 for more information. ‘);
DBMS_OUTPUT.PUT_LINE(‘. . .’);
DBMS_OUTPUT.PUT_LINE(‘ Description of Derived Values:’);
DBMS_OUTPUT.PUT_LINE(‘ One Cell Required Mirror Free MB : Required Mirror Free MB to permit successful rebalance after losing largest CELL regardless of redundancy type’);
DBMS_OUTPUT.PUT_LINE(‘ Disk Required Mirror Free MB : Space needed to rebalance after loss of single or double disk failure (for normal or high redundancy)’);
DBMS_OUTPUT.PUT_LINE(‘ Disk Usable File MB : Usable space available after reserving space for disk failure and accounting for mirroring’);
DBMS_OUTPUT.PUT_LINE(‘ Cell Usable File MB : Usable space available after reserving space for SINGLE cell failure and accounting for mirroring’);
DBMS_OUTPUT.PUT_LINE(‘. . .’);

IF (v_db_version = ‘11.2.0.3’) OR (v_db_version = ‘11.2.0.4’) OR (v_db_version = ‘12.1.0.1’) OR (v_db_version = ‘12.1.0.2’) THEN
v_req_mirror_free_adj_factor := 1.10;
DBMS_OUTPUT.PUT_LINE(‘ASM Version: ‘||v_db_version);
ELSE
v_req_mirror_free_adj_factor := 1.5;
DBMS_OUTPUT.PUT_LINE(‘ASM Version: ‘||v_db_version||’ – WARNING DISK FAILURE COVERAGE ESTIMATES HAVE NOT BEEN VERIFIED ON THIS VERSION!’);
END IF;

DBMS_OUTPUT.PUT_LINE(‘. . .’);
— Set up headings
DBMS_OUTPUT.PUT_LINE(‘—————————————————————————————————————————————————-‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘|Cell Req”d ‘);
DBMS_OUTPUT.PUT(‘|Disk Req”d ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT_Line(‘|’);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘|DG ‘);
DBMS_OUTPUT.PUT(‘|Num ‘);
DBMS_OUTPUT.PUT(‘|Disk Size ‘);
DBMS_OUTPUT.PUT(‘|DG Total ‘);
DBMS_OUTPUT.PUT(‘|DG Used ‘);
DBMS_OUTPUT.PUT(‘|DG Free ‘);
DBMS_OUTPUT.PUT(‘|Mirror Free ‘);
DBMS_OUTPUT.PUT(‘|Mirror Free ‘);
DBMS_OUTPUT.PUT(‘|Disk Usable ‘);
DBMS_OUTPUT.PUT(‘|Cell Usable ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT(‘| ‘);
DBMS_OUTPUT.PUT_LINE(‘|PCT |’);
DBMS_OUTPUT.PUT(‘|DG Name ‘);
DBMS_OUTPUT.PUT(‘|Type ‘);
DBMS_OUTPUT.PUT(‘|Disks’);
DBMS_OUTPUT.PUT(‘|MB ‘);
DBMS_OUTPUT.PUT(‘|MB ‘);
DBMS_OUTPUT.PUT(‘|MB ‘);
DBMS_OUTPUT.PUT(‘|MB ‘);
DBMS_OUTPUT.PUT(‘|MB ‘);
DBMS_OUTPUT.PUT(‘|MB ‘);
DBMS_OUTPUT.PUT(‘|File MB ‘);
DBMS_OUTPUT.PUT(‘|File MB ‘);
DBMS_OUTPUT.PUT(‘|DFC ‘);
DBMS_OUTPUT.PUT(‘|CFC ‘);
DBMS_OUTPUT.PUT_LINE(‘|Util |’);
DBMS_OUTPUT.PUT_LINE(‘—————————————————————————————————————————————————-‘);

FOR dg IN (SELECT name, type, group_number, total_mb, free_mb, required_mirror_free_mb FROM v$asm_diskgroup ORDER BY name) LOOP

v_enuf_free := FALSE;

v_req_mirror_free_adj := dg.required_mirror_free_mb * v_req_mirror_free_adj_factor;

— Find largest amount of space allocated to a cell
SELECT sum(disk_cnt), max(max_total_mb), max(sum_total_mb)*v_req_mirror_free_adj_factor
INTO v_num_disks, v_max_total_mb, v_one_cell_req_mir_free_mb
FROM (SELECT count(1) disk_cnt, max(total_mb) max_total_mb, sum(total_mb) sum_total_mb
FROM v$asm_disk
WHERE group_number = dg.group_number
GROUP BY failgroup);

— Eighth Rack
IF dg.type = ‘NORMAL’ THEN

— Eighth Rack
IF (v_num_disks v_required_free_mb THEN v_enuf_free := TRUE; END IF;
— Quarter Rack
ELSIF (v_num_disks >= 36 AND v_num_disks v_required_free_mb THEN v_enuf_free := TRUE; END IF;
— Half Rack
ELSIF (v_num_disks >= 84 AND v_num_disks v_required_free_mb THEN v_enuf_free := TRUE; END IF;
— Full rack is most conservative, it will be default
ELSE
— Use eqn: y = 1.33333 x+83220.
v_required_free_mb := 1.33333 * v_max_total_mb + 83220;
IF dg.free_mb > v_required_free_mb THEN v_enuf_free := TRUE; END IF;

END IF;

— DISK usable file MB
v_usable_mb := ROUND((dg.free_mb – v_required_free_mb)/2);
v_disk_desc := ‘ONE disk’;

— CELL usable file MB
v_cell_usable_mb := ROUND( (dg.free_mb – v_one_cell_req_mir_free_mb)/2 );
v_one_cell_usable_mb := v_cell_usable_mb;

ELSE
— HIGH redundancy

— Eighth Rack
IF (v_num_disks v_required_free_mb THEN v_enuf_free := TRUE; END IF;
— Quarter Rack
ELSIF (v_num_disks > 18 AND v_num_disks v_required_free_mb THEN v_enuf_free := TRUE; END IF;
— Half Rack
ELSIF (v_num_disks > 36 AND v_num_disks v_required_free_mb THEN v_enuf_free := TRUE; END IF;
— Full rack is most conservative, it will be default
ELSE
— Use eqn: y = 2.14077 x+54276.4
v_required_free_mb := 2.14077 * v_max_total_mb + 54276.4;
IF dg.free_mb > v_required_free_mb THEN v_enuf_free := TRUE; END IF;

END IF;

— DISK usable file MB
v_usable_mb := ROUND((dg.free_mb – v_required_free_mb)/3);
v_disk_desc := ‘TWO disks’;

— CELL usable file MB
v_one_cell_usable_mb := ROUND( (dg.free_mb – v_one_cell_req_mir_free_mb)/3 );

END IF;
DBMS_OUTPUT.PUT(‘|’||RPAD(dg.name,v_offset-40));
DBMS_OUTPUT.PUT(‘|’||RPAD(nvl(dg.type,’ ‘),v_offset-41));
DBMS_OUTPUT.PUT(‘|’||LPAD(TO_CHAR(v_num_disks),v_offset-45));
DBMS_OUTPUT.PUT(‘|’||TO_CHAR(v_max_total_mb,’9,999,999’));
DBMS_OUTPUT.PUT(‘|’||TO_CHAR(dg.total_mb,’999,999,999’));
DBMS_OUTPUT.PUT(‘|’||TO_CHAR(dg.total_mb – dg.free_mb,’999,999,999’));
DBMS_OUTPUT.PUT(‘|’||TO_CHAR(dg.free_mb,’999,999,999’));
DBMS_OUTPUT.PUT(‘|’||TO_CHAR(ROUND(v_one_cell_req_mir_free_mb),’999,999,999’));
DBMS_OUTPUT.PUT(‘|’||TO_CHAR(ROUND(v_required_free_mb),’999,999,999’));
DBMS_OUTPUT.PUT(‘|’||TO_CHAR(ROUND(v_usable_mb),’999,999,999’));
DBMS_OUTPUT.PUT(‘|’||TO_CHAR(ROUND(v_one_cell_usable_mb),’999,999,999’));

IF v_enuf_free THEN
DBMS_OUTPUT.PUT(‘|’||’PASS’);
ELSE
DBMS_OUTPUT.PUT(‘|’||’FAIL’);
END IF;

IF dg.type = ‘NORMAL’ THEN
— Calc Free Space for Rebalance Due to Cell Failure
IF v_req_mirror_free_adj < dg.free_mb THEN
DBMS_OUTPUT.PUT('|'||'PASS');
ELSE
DBMS_OUTPUT.PUT('|'||'FAIL');
v_cfc_fail_msg := 'WARNING: Not enough free space to rebalance after loss of ONE cell (however, cell failure is very rare)';
END IF;
ELSE
— Calc Free Space for Rebalance Due to Single Cell Failure
IF v_one_cell_req_mir_free_mb 0 THEN
DBMS_OUTPUT.PUT_LINE(‘|’||TO_CHAR((((dg.total_mb – dg.free_mb)/dg.total_mb)*100),’999.9′)||CHR(37)||’|’);
ELSE
DBMS_OUTPUT.PUT_LINE(‘| |’);
END IF;

END LOOP;

DBMS_OUTPUT.PUT_LINE(‘—————————————————————————————————————————————————-‘);
<>

IF v_cfc_fail_msg is not null THEN
DBMS_OUTPUT.PUT_LINE(‘Cell Failure Coverage Freespace Failures Detected. Warning Message Follows.’);
DBMS_OUTPUT.PUT_LINE(v_cfc_fail_msg);
END IF;

DBMS_OUTPUT.PUT_LINE(‘. . .’);
DBMS_OUTPUT.PUT_LINE(‘Script completed.’);

END;
/

WHENEVER SQLERROR EXIT FAILURE;

Comment on Loading timestamp with timezone into a table using SQL Developer by Sriram

$
0
0

Thanks for the post…i checked your site and got quick alternative solution

Comment on Flashback database – dont forget the standby by Raj Jamadagni

$
0
0

John, on your last point, it can be done. We do that automatically in db release context. For very release, liquibase is configured to call a procedure as step 1. It Runs a external procedure call to create a guaranteed restore point and once that is created, it creates a schedule job that automatically drop that named restore point after 24 hours. Similar mechanism can be used to achieve your goal. we have sized recovery directory sufficiently large so we don’t need to tidy up flashback logs until RP needs to be dropped.
Additionally,on RP topic, for manual testing, we first create a RP on standby after canceling managed recovery. Then create one on primary (the flashback scn on primary needs to be ahead than flashback scn of standby RP). I forgot for which bug, but it seems to work well in 11gr2 and 12c.

Comment on Flashback database – dont forget the standby by John Hallas

$
0
0

That is very helpful Raj, thanks for commenting. I may spend more time looking into the process and see what we can do.


Comment on The Mother of all ASM scripts by ashwini

$
0
0

very very helpful…..Thanks a lot!!!

Comment on Producing a grid report by Raheem

$
0
0

The GRP script doesn’t work as I tried in the OEM and It doesn’t pull any data ? Any Idea.

Comment on Flashback database – dont forget the standby by Flashback Database Logs can exceed the Retention Target – Conartist's blog

$
0
0

[…] Note : If you have Standby database configured, also see John Hallas’s blog post…. […]

Comment on About by Charan

$
0
0

HI John

the blog is very informative and useful. I have a request to make. Can you increase the font size a bit. it is very small for me to read it.

Cheers
Charandeep

Comment on Security parameters in 11G and 12C by Mohamed Ammin

Comment on Resolving two errors on Datapump export – parameter cluster=N/Y by Ian Greenwood

$
0
0

Hi John,
The reason that you only get two output files when the parallel is set to 8 is not because “Oracle thinks that it is overkill”, it is because you are only exporting one object (extent). If the table that you were exporting was partitioned, or you were exporting multiple tables, then it would assign up to 8 datapump slave processes, each of which would be associated with their own extent.

Good point about the directory objects – for a RAC environment it is good practice to ensure that the referenced filesystem exists on each node, with the correct permissions. In an ideal world, this would be a shared filesystem to make aggregating the o/p files more straightforward.

Regard

Ian

Comment on Preventing standby databases opening in Active DataGuard mode + chopt !!! by Preventing standby database opening and enable Active Data Guard feature | Tomasz Ziss Oracle DBA blog

$
0
0

[…] nice feature helps offloading some work to standby database. Well know is too it is extra paid. Here are presented two methods how to prevent physical standby database to be opened and as the result […]


Comment on Performance problems with OEM AWR warehouse by Frank Gordon

$
0
0

Hello,

Do you have any notions of how big TAB_PART$ and IND_PART$ and when were they last analyzed? Do you have any notion of what the new partition might be called and could you create them in advance so cutting out that part of the process?

Regards,
Frank

Comment on Performance problems with OEM AWR warehouse by John Hallas

$
0
0

Neither table is that big – ~1.5M records and they have been analyzed recently – and that is ongoing. We will look at pre-creating the partitions but it is not something that Oracle have suggested as yet.
Oracle are now trying to force the queries to perform a FTS rather thna an index lookup. We have a performance guty on it now rather than a AWR guy from Oracle who was only interested in the flow of data and not how long it was taking.

Comment on RMAN checksyntax function by NormanDunbar

$
0
0

Morning John.

I’m pretty sure I left some information about debug and trace RMAN command line parameters on the wiki!

Happy New Year.

Cheers,
Norm.

Comment on RMAN checksyntax function by Frank Gordon

$
0
0

Hello,

Its great except it doesn’t catch errors like

BACKUP DATABASE FORMAT ‘C:\NON_EXISTENT_DIRECTORY\%U.BKP’;
BACKUP DATABASE FORMAT ‘/backups/NON_EXISTENT_DIRECTORY/%U.bkp’;

The only time you know these will fail will be when its run for real.
!

Nit-picking I know.

Frank

Comment on RMAN checksyntax function by John Hallas

$
0
0

True Frank, but it is a syntax checker and the syntax is correct.

Viewing all 467 articles
Browse latest View live