Wednesday, April 28, 2021

My thoughts on Rotating Neurons -- RDBMS & AI - memory operations, neural networks

In this blog post,  I want to share my thoughts on a new subject. 
Actually, an article impressed me and I want to share it with you. 
These ideas may be considered for new developments on the Oracle side. 
Well, the article is based on rotating memories. I read it on quantamagazine. This article made me realize that, insiring from the nature is important in computer science. We already see that in the developments done for AI. (not in all of them ofcouse..) 
Getting the information from neuroscience and bringing it to the computer science and supporting the implementation with the engineering brings lots of good things and/or revolutions to our world. 
This understanding brings lots of advantages when we imitiate in certain scales. Or when we take advantage from it to enhance our processes in the functional , in behaviorual levels.. 
The work/article that I mentioned is also made in this context.. 
It is basically done for understanding how the brain works. It is promising..



This rotation that is mentioned in the article seems to be done on a representation.. This representation is pretty low level.. 
So at first glance, I thought about the database world, and the in memory stores that we have in Oracle Database ( Oracle Database In Memory - seperate stores for row and column formats , for OLTP and OLAP...) But then I though that, this memory concepts in Oracle Database is a high level representation, so the thing that is given in the article is directly not applicable to the DB side. 
On the other hand, as the article suggests, with this info ( I mean rotating neurons), a new neural network design can be made. 
As we are going to a target where we have embedded AI in Oracle Database, this is still in the context.. Well, this new neural network may be done by having directions in addition to the weights. (in terms of vectoral directions -- as an extra parameter) -- by designing a proper vector arithmetic and implementing it in a way that makes the directions to be considered for the syncrohizations... 
This may be an interesting idea and it is space efficient. The advantage is having a compact space -- less memory and more efficient multi tasking.. 
As for the high level representation that we have in the database layer, one might think enhancing the block format or having a transformation mechanism while reading the blocks in to the memory pages.. 
I mean a dynamic and intelligent format maybe.. Some new relations in the block level... This may bring lots of good opportunities to us ( in addition to the faster buffer scan and faster buffer access. ) 
This task, I mean getting it to the high level is ofcourse very hard -- no matter how much we abstract the subject.. 
Maybe the solution is to change the low level on which the high level is based. It can use a certain rotation angle at low level for the operations to be done at the high level. 
This ofcourse touches the foundation.. Anyways, interesting subject.. I wanted to share it with you, maybe we may see that in the development of  database, in the new generations...

Sunday, April 18, 2021

OLVM & KVM -- Oracle Premier Support

In this blog post, I will give a crucial info.. Yes, I find it important, although some may say that this is publically available information.. Still, I want to underline this thing, as it may be a support issue in Oracle Linux KVM environments some day.

Oracle Linux KVM is a feature that has been delivered and supported as part of Oracle Linux,as you know.  But! things are a little different for OLVM.(Oracle Linux Virutalization Manager)

If you want to get support for Oracle Linux Virtualization Manager, you must have an Oracle Linux Premier Support subscription. In other words; support for OLVM is not included Oracle Linux Basic Support subscription..

So lets answer this question ->  Do we (on-prem KVM users) need Oracle Linux Premier support?
Well, the answer depends on lots of things.. I mean, if you have Linux premier support, then it means you got the full package -> 
  • Around-the-clock access to enhancements, updates, and errata
  • Oracle Enterprise Manager for Linux Management
  • Oracle Linux Manager (formerly Spacewalk)
  • High availability with Oracle Clusterware
  • Comprehensive tracing with DTrace
  • Oracle Linux load balancer
  • Comprehensive indemnification
  • Oracle Container runtime for Docker
  • Oracle Linux Virtualization Manager
  • Zero-downtime patching with Ksplice
  • Oracle Linux Cloud Native Environment
  • Gluster Storage for Oracle Linux
  • Oracle Linux software collections
  • Oracle Linux high availability services support (Corosync and Pacemaker)
  • Premier backports
  • Lifetime sustaining support
Let's not go away from the context .. Does an Oracle Linux KVM user need a premier support?
Well, my answer is yes.. If you are using Oracle Linux KVM, you should use OLVM as well.. OLVM is a modern interface, that eases things and provides a smooth virtualization management platform.. As you use OLVM for an important process, you need to get Oracle Support for that.. Consider the following scenario;

Your security admin told you that the Http Server of the OLVM host has some security weakness and it must be upgraded to a target httpd release..

Facts : 

Currently, there is no direct document available on MOS for this kind of an upgrade..
There is no OLVM package or patch which is applicable for this kind of a request, as far as I can see.
You may be a HTTP Server and/or Linux expert and you can upgrade the latest httpd version by using your own methods.. (installing a new httpd and copy-pasting the OLVM-related httpd configuration).. However; this httpd in question belongs to OLVM , so you actually get a custom conf there..
You may wait for the new version of OLVM and you hope that, Oracle will be using the latest version of httpd in this new OLVM version.

But what about you don't have that time to wait? What about you don't have that Linux skills to make such an upgrade based on a custom method.
Or let's say you did the upgrade but you can't make OLVM running with the new httpd release..

You see it, right.. Oracle Linux Premier Support even solves these types of problems. 
Even in the cases, where we need it once a year, it provides us a guarantee .. 
Considering you are an Oracle Linux KVM customer, ask yourself the question 'Do I need to have Linux Premier Support?' again and answer the question yourself by reconsidering how vital OLVM is for you.. If you pay attention, I don't even want you to think about the other things supported (zero downtime patching with Ksplice and etc..) with the Oracle Linux Premier Support..

RDBMS -- V$INDEXED_FIXED_COLUMN a useful view

V$INDEXED_FIXED_COLUMN is a useful fixed view.

As we know v$session and similar fixed views get their data through x$tables (or lets say through some special memory structures). Note that, most of the time, v$ views fetch their data from multiple X$ memory structures.

This V$INDEXED_FIXED_COLUMN view shows which columns of these x$ tables have index.

Probably, the indexes in these memory structures are not exactly like the indexes that we know on our database world .. For instance; probably they don't look like b*tree index structures.. I guess these indexes are only based on some offsets, but for us it provides the same benefit (actually I guess they are little les useful) as our traditional indexes.. Besides, they look like traditional indexes in the execution plans. 

Therefore, if we get the data from x$ structures through those indexed columns, we can achieve performance increase especially in queries (on v$ views) , especially in environments with large v$ data.

In this context, if a performance problem appears in a query on some v$ views, it would be useful to look at the execution plan. If we see FIXED TABLE FULL when accessing x$ tables,  we can get the information from V$INDEXED_FIXED_COLUMN which columns of the related x$ table are indexed and then we may change our query to make the optimizer use that index and thus solve the problem. 

The condition we use in our query for the value of an indexed column is also important. For example sid column in v$session .. If we use sid = 5 as a condition, our query uses index to reach x$ data, but if we use sid = userenv ('SID'), optimizer doesn't choose the indexed way.. ( this is seen even in the cases where there is no data type mismatch)

Of course, in such problems that we have long running v$ queries on big sized v$ data, we need to check whether the size of the data in the relevant v$/x$ should be that big or not. Having unexpectedly big sized v$ data should be analyzed.

In addition to that, we need to evaluate the performance bugs and patches, if any, about the related v$ views in the relevant DB release.

This is the tip of the day. Stay tuned :)

Sunday, April 4, 2021

OBIEE 12C -- Implementing a Custom Authentication Provider & Custom Authorization based on Embedded Ldap

In one of my earlier posts, I shared a method for implemeting a Custom SSO Login to the OBIEE instances from 3rd party apps. 
You can have a look at that earlier post using the following url:


Today, I m here to give you the method for implementing a custom authentication provider for OBIEE.. This time we are dealing with a customization on Weblogic authentication providers actually. We have implemented this custom authentication provider configuration and tested it.. I must admit that it is challenging, but it works! 

In our case, the purpose was to bypass Active Directory interaction during the login and make some https calls to a custom login web service hosted by the client.. That custom login service in turn was designed to authenticate the users by communicating with the Active Directory (AD).. So we should be communicating with the webservice host and instead of us, that webservice host should be communicating with AD.. 

This requires a new custom authentication in the first place.. In this context, the same Custom Authentication Provider given in the document pointed by the url below can be used.. However; in that document there is database part .. In our case, we use weblogic embedded ldap to store the user information and mappings (if you want to see it that way, or you call it user store), so except that database part, we follow the "Fusion Middleware Developing Security Providers for Oracle WebLogic Server 12c" document pointed by ; https://docs.oracle.com/middleware/12213/wls/DEVSP/atn.htm 

In our case, we changed the code (given in the example in the document) and made it call our custom web service during the login. However; this is not sufficient to login a user into OBIEE.. That is, the user info should also be available for OBIEE/Weblogic. 

So that's why we changed the example code a little bit more.. We modified it by following the algorithm below; 

-First, create the users and groups in Weblogic. (this is a one time action) You can even delete the users after creating the groups and associating them with the groups.. But authorized groups should be there. 
-Get the user pass from login page 
-Call webservice and try to authenticate the user. 
-If the authentication is successful, check the weblogic embedded ldap.. 
  -If the user is not there in the weblogic embedded ldap, create it. 
  -If the user is already there, don't do anything, just run the rest of the relevant code and exit. 
-If the authentication is not sucessful, run the rest of the relevant code and exit. 


I won't get into the details of the code and the configuration that we needed to make in the Weblogic to deploy this custom authentication provider.. These are already documented and well known. I mean, we put our jar into the $ORACLE_HOME/wlserver/server/lib/mbeantypes and restart Weblogic and then using the Weblogic console; we go to Security Realms > My Realm > Click on Providers tab > Lock and Edit > Click New > Choose Custom authentication Provider > Give it a name :) > Complete adding the new custom auth and restart Weblogic :) 

I said , I just mentioned that I won't get into the details but I couldn't stop myself.. :) Anyways, the thing that I wanted to underline here is not the implementation itself, but the algorithm for implementing such a custom login flow.. 

It is not only the authentication we need to pay our attention to.. But, the authorization is also important and a custom design should be implemented there as well..

So keep this in mind, if you need to implement some custom authentication providers some day.. In our case, we kept up with Weblogic and used the embedded ldap in conjuction with our custom algorithm to solve the authorization problem, but we could also implement an authorization provider in addition the authentication provider... So all these should be considered when making a customization in OBIEE login flow..

That's it. I hope you find it useful..

Saturday, April 3, 2021

Erman Arslan's Oracle Forum -- March 2021 - "Questions and Answers Series"

Question: How much time do you spend/lose?


Answer: Well, how much time I gain? :) 

Remember, you can ask questions and get remote support using my forum.
Just click on the link named "Erman Arslan's Oracle Forum is available now.
Click here to ask a question", which is available on the main page of Erman Arslan's Oracle Blog -- or just use the direct link:




 Come on, let's see what we've been up to in March. (Do not forget to read the blog posts too :)