Tuesday, October 11, 2011

Oracle 11R2 RAC on Windows 2008 server

Hello all,

I'm sharing information about how oracle rac is installed on windows 2008 server enterprise edition R2. A few months ago, i configured it successfully on VMWare server environment with shared disks.
Finally, i tested it on 2 Dell server R810 with E7540 (48 cores, 128gb ram) and Dell Equallogic 6510 storage of 14tb capacity with RAID 10.

While configuration phase of installation, i ended up with windows dead blue screen many times. (DRIVER_IRQL_NOT_LESS_OR_EQUAL) The reason of this error was Oracle Grid infrastructure can not be installed on servers with more 32 cores. So i turned of Turbo HT and oracle grid infrastructure installation completed smoothly. After installation you can patch grid with 10637621 and re-enable turbo to 48 cores. If you see this blue screen, page 7 of the second pdf below can help you.

You can use following document for installation & troubleshooting.
http://www.mits.mn/RACGuides_Rac11gR2OnWindows.pdf
http://www.mits.mn/WTRB_11g.pdf

PS: Take care of database version. If you download oracle by the time you will download 11g 2.0.1 version. When you try to patch 10637621 on it, it will require you to install oracle.rdbms.rsf, 11.2.0.2.0 component. So don't use 11g2.0.1, use version 11g2.0.2. It seems not preferred to patch 11g2.0.2 on 11g2.0.1. It's recommended to install freshly. You can download it from metalink, it's not listed current on public download page. WTRB_11g.pdf is guide to patch 11g2.0.2, not 11g2.0.1.

Sunday, January 2, 2011

Change MaxItemsInObjectGraph value on server and client side

When i was working with WCF + XPO i faced with the following problem.

CommunicationException: The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '20.20:29:58.9889422'.

It was caused by large amount of data retrieved from the server which MaxItemsInObjectGraph configuration value set to default(65535). I googled so much and finally found the solution for this. By changing MaxItemsInObjectGraph to enough value on server and client side, it was solved.

Server side:
SqlConnection conn = new SqlConnection("Initial Catalog=flight; Data Source=NEU\\SQLEXPRESS; Integrated Security=SSPI;Persist Security Info=False");

IDataStore sourceDataStore = XpoDefault.GetConnectionProvider(conn,AutoCreateOption.DatabaseAndSchema);

DataStoreServerProxy publicationObject = new DataStoreServerProxy(sourceDataStore);

Uri baseAddress = new Uri("net.tcp://0.0.0.0:1234/");
serviceHost = new ServiceHost(publicationObject, baseAddress);
NetTcpBinding binding = new NetTcpBinding(SecurityMode.None);
binding.SendTimeout = new TimeSpan(500, 30, 0);
binding.ReceiveTimeout = new TimeSpan(500, 30, 0);
binding.OpenTimeout = new TimeSpan(500, 30, 0);
binding.CloseTimeout = new TimeSpan(500, 30, 0);
binding.MaxReceivedMessageSize = 2147483647;

serviceHost.AddServiceEndpoint(typeof(IDataStoreContract), binding, "XPOService");

serviceHost.Open();
foreach (OperationDescription operation in serviceHost.Description.Endpoints[0].Contract.Operations)
{
var behavior = operation.Behaviors.Find();
if (behavior != null)
behavior.MaxItemsInObjectGraph = 2147483647;
}


Client side:

NetTcpBinding binding = new NetTcpBinding(SecurityMode.None);

binding.MaxReceivedMessageSize = 2147483647;
binding.SendTimeout = new TimeSpan(500, 30, 0);
binding.ReceiveTimeout = new TimeSpan(500, 30, 0);
binding.OpenTimeout = new TimeSpan(500, 30, 0);
binding.CloseTimeout = new TimeSpan(500, 30, 0);


ChannelFactory factory = new ChannelFactory(binding, "net.tcp://localhost:1234/XPOService");
foreach (OperationDescription operation in factory.Endpoint.Contract.Operations)
{
var behavior = operation.Behaviors.Find();
if (behavior != null)
behavior.MaxItemsInObjectGraph = 2147483647;
}


DataStoreClientProxy remoteDataStore = new DataStoreClientProxy(factory.CreateChannel());

// Initialize XPO to use that reference
XpoDefault.DataLayer = new SimpleDataLayer(remoteDataStore);
XPClassInfo[] ClassInfos = { Session.DefaultSession.GetClassInfo(typeof(City)), Session.DefaultSession.GetClassInfo(typeof(CityArea)) };
XpoDefault.DataLayer.UpdateSchema(false, ClassInfos);