He who asks is a fool for five minutes

>> Sunday, 15 March 2015

He who asks is a fool for five minutes, but he who does not ask remains a fool forever.

The older I get, the more I know...how much I don't know.  This stands true for me at work, home, and life in general.

Sometimes I feel so confused with life and its happenings that I'm sure everybody else already must know everything I do and then they have their intelligence on top of that.  I find I think like this quite a lot at work.  But the same seems to apply to baking, gardening, decorating, suduko, crosswords, laundry without total destruction etc.

The nature of work in technology means spending a lot of time searching for information on how to do a lot of technical stuff.  This searching naturally leads to many technical forums. Often I see, what on the face of it seem to be, fairly simple questions.  These questions are usually responded to by someone who considers themselves to be an expert with a RTFM.

I'll accept that as ok, especially if they leave a link to go and have a read.  But what if they still don't understand, what if they need extra guidance, what if the question they asked to begin with wasn't worded well?  Do they deserve to be called a lazy idiot? Should they be told to go away and read it again?

Whilst this is aimed at the technical, it's true anywhere in life.  None of us were born knowing how to do things, we all had to learn but why do some people believe that because they learnt the hard way so must everyone else?

If I say to my friend "my cakes don't rise as well as yours what am I doing wrong?" I know she will say "What recipe are you using? Is the method the same as mine?  I do this".  Why do so many online user groups and forums do the complete opposite?

I believe in freely sharing information and that it is ok to ask others to do the same.  I also know that whilst I like to consider myself a special individual, I am not.  I know if I have a burning question, someone else probably has it too.

Times I have asked questions in halls full of parents like "do they need the packup in a carrier to throw away after lunch or in a backpack" and felt an idiot for asking as 100 burning eyes give me the 'isn't it obvious' look. But on the way out someone always says "I'm sooooo glad you asked that, I had no idea either"

I don't care if I ask a dumb question, I think this is less dumb than never knowing the answer.  And I am happy to be polite and understanding to anyone who asks a question that I know the answer to.

In a forum I think I have 2 choices: be helpful and polite or don't get involved.

The perceived anonymity of the on-line world has turned many people into rude, uncaring individuals.  Trolling, whilst not liked, is seen as part of life.  It doesn't have to be this way.

So just for the record,  I am planning to continue to ask as many questions as I can for the rest of my life.  I may ask how I can find out, I may just ask for a direct answer and I don't mind whether you give me one or tell me how I can find out.

In return I commit to answering as many questions as I can in a polite way and this sometimes might involve a diversionary route to a source of information, yes occasionally that might include a polite 'I don't know but something might popup on Google (other search engines are available) just might'.

For those of you against me in this quest to accept that some people aren't superhuman all knowing beings : 


Read more...

DBSNMP.BSLN_INTERNAL invalid ORA-12012 ORA-04063

>> Wednesday, 14 January 2015

ORA-12012: error on auto execute of job "SYS"."BSLN_MAINTAIN_STATS_JOB"
ORA-04063: package body "DBSNMP.BSLN_INTERNAL" has errors
ORA-06508: PL/SQL: could not find program unit being called: "DBSNMP.BSLN_INTERNAL"
ORA-06512: at line 1

Tested fix on Oracle version  11.2.0.3.7


I've been getting the error in the alert log since the database was built using an rman clone.

I could force the error by running:

As sys:
     exec dbms_scheduler.run_job('BSLN_MAINTAIN_STATS_JOB',false);

     select log_date,status from dba_scheduler_job_run_details
     where job_name='BSLN_MAINTAIN_STATS_JOB' order by log_date;


I tried the recommended work around from Oracle to recreate the dbsnmp user:

@?/rdbms/admin/catnsnmp.sql
@?/rdbms/admin/catsnmp.sql

This did not fix it.

Oracle recommended I apply a patch for bug 13637859

This did not fix it.

I rolled back the patch, restored dbsnmp as it was and started a rethink.  There were 2 distinct problems happening:


The first one is that the package DBSNMP.BSLN_INTERNAL is invalid:

select substr(owner,1,12) owner, substr(object_name,1,30) object, substr(object_type,1,30) type,
 status from dba_objects where object='BSLN_INTERNAL';

DBSNMP BSLN_INTERNAL PACKAGE BODY INVALID
   
alter package DBSNMP.BSLN_INTERNAL compile;

Warning: Package altered with compilation errors.

select * from dba_errors where OWNER='DBSNMP';

DBSNMP   BSLN_INTERNAL    PACKAGE BODY   1       1910          7
PLS-00201: identifier 'DBMS_JOB' must be declared
ERROR                201

DBSNMP  BSLN_INTERNAL PACKAGE BODY   2       1910          7
PL/SQL: Statement ignored
ERROR                  0

So DBMS_JOB has a problem, well execute was revoked from public on DBMS_JOB on this database.

grant execute on sys.dbms_job to dbsnmp;
alter package DBSNMP.BSLN_INTERNAL compile;
revoke execute on sys.dbms_job from dbsnmp;

select substr(owner,1,12) owner, substr(object_name,1,30) object, substr(object_type,1,30) type,
 status from dba_objects where object='BSLN_INTERNAL';

DBSNMP BSLN_INTERNAL PACKAGE BODY VALID
   

     exec dbms_scheduler.run_job('BSLN_MAINTAIN_STATS_JOB',false);

     select log_date,status from dba_scheduler_job_run_details
     where job_name='BSLN_MAINTAIN_STATS_JOB' order by log_date;

Job Failed

So I have a valid package now but my job is still failing.  If your database was not cloned you might find this grant and recompile will fix your problem. (The revoke of the privilege again afterwards was fine, it seemed to only need it to recompile, not to actually run)

My second issue was caused when cloning a new db using rman.

select * from DBSNMP.BSLN_BASELINES;
nnnnnnnn OLDSOURCEDBNAME  0 xxxxxxxxxxxxxxxxxxxx Y ACTIVE dd/mm/yyyy

There was only one row in my table and that had the name of the old database in it, I removed it:

delete from DBSNMP.BSLN_BASELINES WHERE INSTANCE_NAME='OLDSOURCEDBNAME ';
commit;

exec dbms_scheduler.run_job('BSLN_MAINTAIN_STATS_JOB',false);
select log_date,status from dba_scheduler_job_run_details
     where job_name='BSLN_MAINTAIN_STATS_JOB' order by log_date;
succeeded

This removal of one line is going to be how the Oracle recommended work around for this problem fixes it, you should probably use the Oracle way not my hack.  But for me Oracle Enterprise Grid/Cloud/OEM/yet another name change for OEM used DBSNMP and I didn't want to upset it on my production system, which is why I deleted the row rather than doing:

@?/rdbms/admin/catnsnmp.sql
@?/rdbms/admin/catsnmp.sql

I found at least 3 blogs with pieces of all this information in but none with it together that solved my issue.

Remember here we have considered:

  • An invalid package caused by revoking execute on DBMS_JOB fixed by granting execute directly to DBSNMP.
  • An entry in DBSNMP.BSLN_BASELINES table carried over from an old source database on clone build.
  • The Oracle Workaround covered in Oracle Support Doc ID 1413756.1 ORA-12012: error on auto execute of job "SYS"."BSLN_MAINTAIN_STATS_JOB"
  • An Oracle Patch for Bug 13637859

Please speak to Oracle Support if you are in anyway unsure that you have the same issue and always make sure you have a good backup before you change anything.

Read more...

Make a Blogger Bloglist Blog Roll widget NoFollow

>> Saturday, 15 February 2014

Having a blog roll (blog list widget) on a Blogger blog has its pros and cons.

I use mine a lot, I like to see when my favourite reads have updated and it's a habit for me to look there, despite using Bloglovin too. So for me it's about me not the reader experience. There are cons to having it there like you have to keep it up to date, what if a 'bad' site takes over a url on your list and you are inadvertently sending your readers there.  Also, they can look at bit outdated these days too.  But I also like them on other sites as I will follow links to other blogs for a new read.

But in terms of SEO and Page Rank for your own blog it can have problems as it creates a follow link to all the sites on your blog roll.  Follow links aren't always bad, and Google ought to be taking their own code into account with their PR calculations but some places I read are shouting "Bloglist followlinks BAD", so why not just make it nofollow and be done with it.

Step 1: on the left of your main blogger dashboard page for your blog, choose 'TEMPLATE'

Step 2: BACKUP YOUR CURRENT TEMPLATE NOW.  Here's how if you are now sure.  Do not do anything else until you have a backup in the bag.

Step 2.5:  Re-read Step 2 and do it

Step 3: Choose 'EDIT HTML'




Step 4:  Choose JUMP TO WIDGET, then BLOGLIST1



Step 5:  There will be 3 small dots on the line of code for the widget bloglist1, click on them once and the code will expand.



Step 6:  But it only expands to 3 lines, there are now 3 more dots on the centre line, click on those once




Step 7: Now you see the full widget code, there are 3 lines with the entry target='blank', find these


Step 8:  Add the code rel='nofollow' to those 3 lines, just like below


Step 9:  Save the changes













Done.

It's not hard.

You might want to consider removing the list altogether, but if you want to hang onto it, then this is the way to make it NoFollow.

Remember you should make any badges or other sidebar links NoFollow too, unless you have a very specific reason for not doing so.


Read more...

  © Blogger template Simple n' Sweet by Ourblogtemplates.com 2009

Back to TOP