תשובה
קודם כל, העניין עם הSingleton מתאים גם לג'אווה, C/C++ ועוד שפות. Singleton משמש גם למקרה שרוצים אובייקט אחד שכולם פונים אליו. הדוגמא שאני יכול לתת שהשתמשתי בה בעבר זה מנגנון Cache: יש אובייקט אחד ששומר מידע של Cache בזיכרון, וכל הבקשות מופנות אליו. לאובייקטים כאלה יש נטייה לבעיות כשעובדים עם שרתים מבוזרים. כשיש שרתי ראי שמחלקים את העומס, אז צריך אובייקט אחד בכל שרת וכל אובייקט מתמלא במידע אחר בקיצור - בלאגן רציני. לעניין האוראקל: זה תלוי. אם המשתמשים ניגשים ישירות לשרת, כלומר על כל מחשב של כל משתמש מותקן Oracle client, ועלול להיות מצב שאלפי משתמשים יגשו בו זמנית, יש מקום לתכנן רכיב כזה. אבל אם מדובר במצב הנפוץ, בו הגישה לאוראקל נעשית דרך שרת Web (כמו IIS במקרה של .NET) אז לא צריכה להיות שום בעיה, כי השרת עצמו לא פותח Thread לכל משתמש, אלא יש לו pooling משלו ולא יהיה מצב של אלפי משתמשים על הDB. כך או כך, מומלץ להשתמש כמה שיותר במנגנונים של השרתים ה"מקצועיים" כלומר האוראקל עצמו, ולא לכתוב רכיבים כאלה בעצמך. ברוב המקרים, האופטימיזציה של השרתים יודעים מראש לטפל במצבי עומס עם מקנפגים אותם כראוי, והקוד שלך לעומת זאת עלול להיות פגיע יותר.