Showing posts with label MySQL. Show all posts
Showing posts with label MySQL. Show all posts

Thursday, May 24, 2007

Covalentia Version 2.3: Powered by Oracle

Covalentia may not be as good as other code generators such as Iron Speed etc to have version compatibility, but at least, it’s FREE of charge (since I’ve consumed a lot of other FREE stuffs from the internet, I’d say it’s time to give back to the community). I realize that this is a big issue - whenever Covalentia gets upgraded, migration from the previous version to the latest one is going to be a pain in the ass. But, worry not – we’ll address this issue later on when we come to that stage ;)

I’ve spent tremendous hours trying to include Oracle Database as one of the databases supported by Covalentia. And it ain’t an easy job. Oracle Database has got some limitations compared to other databases such as Microsoft SQL, MySQL and PostgreSQL. Perhaps, this is the reason why it’s faster? No? I have no experience in using Oracle and so I can’t say much about its real performance compared to others. Now, let’s talk about these limitations, and you’ll soon find out why I had to do the changes that I did in the latest release.
  • Renaming SystemTbl table to ConfigurationTbl
    Oracle doesn’t seem to like that name, anything ‘SYSTEM’ is probably a reserved word. So, we have to rename the table to ConfigurationTbl. And while we’re at it, why not remove and add the following items:
    • Remove SystemPath column – put this variable in the web.config file instead and rename it to ApplicationPath.
    • Add a new column – ErrorLogEmail to store the Error Log E-mail address.

  • Renaming of the following tables (and their corresponding primary keys) and stored procedures because Oracle limits the length of identifiers (table name, column name etc) to only 30 characters.
    • UserGroupSubModuleFunctionTypeTbl table to UserGroupSmftTbl
    • UserSubModuleFunctionTypeTbl table to UserSmftTbl
    • DeleteUserGroupSubModuleFunctionTypesByUserGroup stored procedure to DeleteUgsmftByUg
    • DeleteUserSubModuleFunctionTypesByUser stored procedure to DeleteUsmftByU
    • DeleteUserSubModuleFunctionTypesByUserGroup stored procedure to DeleteUsmftByUg

  • Naming convention
    Covalentia uses the following naming convention for tables and columns respectively: TableName and ColumnName
    Oracle (and PostgreSQL), however, doesn’t allow this. Well, not really, you could preserve the case but this will cause some major problems when coding Covalentia as I have to add “TableName”.“ColumnName” here and there (with “) in the SQL queries. So, we have to stick with TABLENAME and COLUMNNAME (all capital case) for Oracle and tablename and columnname (all lower case) for PostgreSQL. As you may already realize that this may cause problems when generating Business Objects, Component and Control classes and User Controls (classes names, variables names and web controls IDs etc).

    MySQL, on the other hand, strictly sets the table names to be lower cases. This, however, doesn’t hurt much as we can manually change them before we generate the Business Objects. The rest, ie. the column names, are fine and work like a charm. If you’re deploying your database server on a Linux machine, don’t forget to set the lower_case_table_names=1 in the my.cnf file under the [mysqld] section.

    We’re going to come up with a solution to this problem in the next release (Covalentia Version 2.3 Reloaded).

So, stay tuned ;)

Saturday, April 21, 2007

Setting Up a Linux Box

I spent numerous hours last week trying to recuperate my skills on setting up a Linux machine properly to run a dedicated MySQL Database for our Showcase - list of applications powered by Covalentia. The Mirror Site is now running two separate machines - one application (web server) and one MySQL Database server.

Please refer to my previous entry on how to install MySQL on a Fedora Core 4. After doing all that, I had to tweak a few things to make it work:
  • Configuring MySQL database
    • gedit /etc/my.cnf
  • Add the following line under the [mysqld] section:
    • lower_case_table_names = 1
  • Configure the Replication Slave Section, please refer to my previous entry
  • Save the file
  • Restart the MySQL Server
  • Next, configure the VNC Server so that I can access the server remotely
    • gedit /etc/sysconfig/vncservers
    • Uncomment VNCSERVERS:"1:cozta"
    • Uncomment VNCSERVERARGS:"-geometry 1280x800 -depth 16
    • Save the file
    • gedit /home/cozta/.vnc/xstartup
    • Uncomment unset SESSION_MANAGER
    • Uncomment exec /etc/X11/xinit/xinitrc
    • Save the file
  • Restart VNC Server
    • service vncserver restart

I think that's about it ;)

And NO, we don't host gold or moolah on any of our server. So, if you're a hacker, DO NOT try to hack them because you're not gonna get anythin'. Go play someplace else (or with somethin' else or with yourself) :)

Saturday, April 7, 2007

Installing MySQL 5.0 on Fedora Core 4

By default, I’m a Windows user. The last time I used Linux or Unix platform heavily was back then in Cornell, around 10 years or so ago. I have lost my touch and limited skills, and I think it’s time to hone them.

The goal is to run MySQL 5.0 and PostgreSQL on Fedora Core 4 so that I can do various testing and development works, such as replication (I don’t have enough machines to do clustering and so that has to wait) and perhaps start on my Mono project.

The first thing to do was to Google on ‘how to install fedora core 4’ and ‘how to install mysql 5 on fedora core 4’. Well, I didn’t really like what I saw – a lot of people complained about plenty of problems. But, surprisingly, it didn’t take me too long to successfully get the box up and running. Or may be I was just lucky, heh.

  • Pentium 4 1.4GHz
  • 256MB of RAM
  • 40G Hard Drive
  • Boot to Fedora Core 4 DVD and install using the graphical interface
  • Skip the Media Check
  • Select the Server installation
  • Disable the Firewall and SELinux
  • Add the followings in the Packages:
    • Gnome – IMHO Gnome is much better than KDE, but some other people think otherwise. It’s totally up to you
    • Graphical Internet
    • FTP
    • MySQL Database
    • Development Tools
  • Click through to complete the installation
  • Create a default user
  • Login to the box using root
  • Open up Firefox and download the followings:
  • Remove the existing MySQL 4.1:
    • yum remove '*mysql*'
  • Install MySQL 5.0 Server & Client:
    • rpm –i MySQL-server-community-5.0.37-0.rhel4.i386.rpm
    • rpm –i MySQL-client-community-5.0.37-0.rhel4.i386.rpm
  • Start, Stop & Restart MySQL Server, and create a root password:
    • /etc/init.d/mysql start | stop | restart
    • mysqladmin –u root password ‘’
  • Login to MySQL Client:
    • mysql –u root –p
    • Enter your root password
    • mysql> drop database test;
    • mysql> quit;
  • Install MySQL GUI Tools (Administrator & Browser):
    • rpm –i ptt-beta2.i386.rpm
    • rpm –i j2re-1.4.2-11.2.el4.rf.i586.rpm
    • rpm -i MySQL-shared-compat-5.0.37-0.rhel4.i386.rpm
    • tar –zxf mysql-gui-tools-5.0r11-rhel4-i386.tar.gz
    • rpm –ivh mysql-gui-tools-5.0r11-1rhel4.i386.rpm
    • rpm –ivh mysql-administrator-5.0r11-1rhel4.i386.rpm
    • rpm –ivh mysql-query-browser-5.0r11-1rhel4.i386.rpm
  • Finally, run your MySQL Administrator (from Start Menu -> Programming -> MySQL Administrator) and enter your login information:
    • Server hostname: localhost
    • Username: root
    • Password:

And we're DONE!

At the moment, I have this box running as a Slave server (READ only) for the Covalentia.2.2 (Enterprise Edition) Live Demo at our Mirror Site at covalentia.dyndns.org. Feel free to check it out ;)

Thursday, April 5, 2007

Covalentia Version 2.2 Enterprise Edition

One my clients complained the other day that their application using Covalentia with MySQL database has become a lil bit slower than usual as the data grows in size. So, I thought I should come up with a version that supports Master & Slaves (MySQL Replication) servers. The idea is to execute the CREATE, UPDATE and DELETE functions on the Master database server, and READ on one of the Slave machines. In addition, I will have to move the Reporting Service to another machine which will Read from another Slave machine. This way I can minimize the load on the current application and database servers.

And apparently, it didn't take me too long to do this:

  • Changed the web.config file to add the following connection string for the Slave database server:
    <add key="SlaveConnectionString" value="server=localhost; UID=<slave_user>; Password=<slave_password>; Database=covalentia_v22; Max Pool Size=500"/>
  • Opened up the /DataAccess/Objects.cs file
  • Looked for GetObject & GetObjects regions
  • Looked for methods under these two regions that do not have "string connectionString" parameter - these methods load the connection string from the web.config file
  • Added the following codes:
    if (System.Configuration.ConfigurationManager.AppSettings["SlaveConnectionString"] != null)
    {
    return whatever - edited to System.Configuration.ConfigurationManager.AppSettings["SlaveConnectionString"]
    }
    else
    {
    return whatever - no change
    }

    There should be 4 methods in total.
  • Compiled

However, before I could proceed with the testing, I needed a Slave database server. Luckily, I still have my old-and-underutilized iASUS notebook which I primarily use to back-up my files. And so, I installed MySQL Server 5.0 on this machine and set it up as a Slave as follows:

Slave (old notebook - Windows XP Professional):

  • Opened up the my.ini file
  • Added the following:
    log-error
    master-host=
    master-user=
    master-password=
    server-id=2
    replicate-do-db=covalentia_v22
    relay-log=-relay-bin

Master (my current notebook - Windows XP Professional):

  • Opened up the my.ini file
  • Added the following:
    log-error
    log-bin=
    server-id=1
  • Opened up MySQL Command Line, entered and executed the following command:
    mysql>grant all privileges on *.* to ''@'%' identified by '' with grant option;

  • Restarted the MySQL Master database server
  • Restarted the MySQL Slave database server

And that should be it. Done! Oh not quite. I needed to test it to see that this setup's really working. And the simplest test was to logon to Covalentia and browse to Administration Module --> Log Management --> User Log, and hit the Search button. I could see the latest log entry and, thus, the READing from my Slave server was successful.

I shall be a good slave and upload this latest version ASAP ;)

Saturday, February 3, 2007

When a Good Day Turns Ugly

Of late I’m working on two projects – The Great Hunt Community Portal and Danial Portal (www.danial.com.my). Both portals will be running on my latest version of Covalentia Version 2.2 which I haven’t released. The Great Hunt Community Portal, a new Employment and Project Outsourcing Portal, was initially scheduled for a soft-launch today. However, due to the recent upgrade of Covalentia (due to the recent release of ASP.NET 2.0 AJAX 1.0 RTM), I have to postpone the proposed launch date, hopefully before the end of this month. And, I will post the project’s source codes on our Covalentia Community Portal. Yes, you heard me right, I will reveal everything, how it is done etc. So, stay tuned ;)

As for the Danial Portal (www.danial.com.my), if you’re in Malaysia, switch your TV on to channel 1 (RTM Satu - Saluran Info Anda ie. Saluran Propaganda BN), and watch the new local cartoon series, Danial, every Tuesday at 7.00 PM GMT +8. Covalent Technology has been awarded by MediaCal (www.mediacal.com.my) to develop this portal using our Covalentia platform. Everything is going well until today after we signed up for a web-hosting solution from exabytes.com. Well, they claimed that they’re the no. 1 web-hosting company (don’t they all do so?), but still they can’t give me what I need. I need ASP.NET 2.0 with AJAX 1.0 and MySQL Server 5.0 to run Covalentia. If you look at their website, it is stated there that they do support MySQL (without stating which version that they support). And it turns out to be MySQL Server 4.1.22. I could switch to Microsoft SQL 2005 instead (since Covalentia supports both Microsoft SQL 2005 and MySQL 5.0 as well as PostgreSQL 8.1+), but I have to pay extra (which they don't tell on their website too).

I admit that it is partly my mistake. I should’ve asked first before signing up. But, being a customer (in this case I am when usually I’m the vendor), and a customer is always right, I think exabytes should highlight CLEARLY in their website what version of MySQL that they support. And they should put the extra payment that I have to pay to use Microsoft SQL 2005 too. I just hate hidden charges. I mean, what’s wrong with putting all the information up there? It’s not like somebody is gonna get killed if you tell the whole world how much you charge extra or if you use the old MySQL Version 4.1. And you claim you’re the no. 1? Geez.

Thursday, November 2, 2006

Lost Connection when Running MyISAM and InnoDB Databases Silmultaneously

A few weeks ago I posted this error I'm experiencing when running my .NET applications on Windows Server 2000 or XP on MySQL Forum. I’ve totally forgotten about it until today, and realize that someone from MySQL has actually replied to my posting. He suggested that I report a bug which I just did. If you encounter the same problem, perhaps you may want to keep track the bug here.

If you don't believe me, try out some of my previous applications running MyISAM databases. After a while, you'll get the error. And there's nothing wrong with my applications, trust me. It's a MySQL bug :)

Wednesday, June 7, 2006

MySql Stored Procedure & query_cache

I was running some benchmarking and testing on MySql MyISAM and InnoDB database engines when I suddenly realized that the queries executed by MySql weren't cached, ie. the qcache_hits variable wasn't hit or get incremented. Apparently, if a stored procedure has one or more parameters (for example, sp_query_not_cache (int i)), the queries are not cached. Hmm.

So that means, not one of Covalentia's many queries to the database will be cached. Oh well.