the most simple option would be to have different tnsnames.ora on your clients. Create one tnsnames.ora with the new scan connect string for the applications with 11g client and another one with the old connect strings.
When you update the client software simply replace the old tnsnames.ora with the new one during the update, without any need to change something in the application.
(ADDRESS = (PROTOCOL = TCP)(HOST = XXX1-vip.manroland-web.com)(PORT = 1234))
(ADDRESS = (PROTOCOL = TCP)(HOST = XXX2-vip.manroland-web.com)(PORT = 1234))
(LOAD_BALANCE = yes)
(SERVER = DEDICATED)
(SERVICE_NAME = XXX_prod)
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 25)
(DELAY = 5)
Your listener config is as 11g expects for scan use and should be good for all client types, except for the missing server load balancing. Load balancing for old clients will happen only on the client side.
If you give your old clients the new scan connect, they will always try to connect to the first scan ip they get from dns. That will result in a much worse load situation.
Thanks for the input Thomas. Unfortunately (or fortunately) we have a single networked tnsnames.ora file used by hundreds of PC clients scattered over the eastern part of the US. We don't support 'local' tnsnames files. I was hoping to keep a single tnsnames alias for each database in the global tnsnames.ora file but code it in such a way that 9i and 10g clients could take advantage of some of the same SCAN features that the 11gR2 clients do.
if you need a single name you can try to make a tnsnames.ora entry like the one i proposed. But instead of holding the vip adresses provide the 3 scan ips directly not the scan name. That way your old clients should be able to use the scan listener in a random fashion without your dns system and load balancing should work.
No leave the remote_listener parameter as it is, the db will use the 3 IPs from the dns entry for the scan-name and all instances should register successfully with the 3 scan listeners.
You should find all 4 instances registered at every scan listener, and only the local instance on the node listener.