Thursday, June 02, 2005

Teamcenter瘦身运动:合并ORACLE实例

经常参加Teamcenter项目实施的朋友,你是不是遇到跟我一样的烦恼呢?

ORACLE实例多达十几个


磁盘空量占据10+ Gigabytes


一般我们所参与的每个项目,至少都会有一个oracle实例,那么我们是不是有必要为每个项目数据都建一个独立的实例呢?答案是否定的。



实 际上,对于我们实施方来说,每个项目我们只需要一点点示例数据就够用了,如果为了这一点点数据建创建一个几百兆甚至上G的数据库实例,那我们的硬盘就装 不了多少东西了。 为了使我们的Teamcenters能够瘦下来,可以通过合并数据库的方式,将所有的项目所需要的数据都存放于同一个数据库实例中,然后使用不同的数据库 用户 加以区分。

此方法不仅仅适用于Teamcenter Engineering的所有版本, 甚至所有需要oracle数据库支持的应用都可以采用此方法,比如Teamcenter Enterprise, Teamcenter Project 等等。

下面介绍具体的操作方法:

(为描述方便,我们把那些“在数据上独立,但以共享方式使用ORACLE实例”的情形称为“数据实例”)

1. 假设我们的oracle已经安装完毕并正常工作 (oracle 9i / oracle 10g),然后使用warehouse模板创建一个空实例,实例名为 my_sid, 假设system帐号密码为system;

2. 使用数据库导出工具exp将数据库导出,导出前注意服务器端与客户端的字符集要保持一致,命令如下:
c:\exp system/system@my_sid file=c:\my_sid.dmp log=my_sid.log full=y grants=y

3. 为所需要的应用规划数据库。假设使用该数据库同时作为Tceng811, Tceng912, Tceng2005, TcProj6的数据库,接下来确定每个应用所使用的数据库帐号,暂定如下:

Tceng811 : tceng811
Tceng912: tceng912
Tceng2005: tceng2k5
TcProj6: tcprj6

以上用户的时候的创建可以以INFODBA帐户为基础。

4. 使用数据库导入工具,为每个应用创建独立的用户空间、

c:\imp system/system@my_sid file=c:\my_sid.dmp log=my_sid.log fromuser=system touser=tceng811 commit=y ignore=y
c:\imp system/system@my_sid file=c:\my_sid.dmp log=my_sid.log fromuser=system touser=tceng912 commit=y ignore=y
c:\imp system/system@my_sid file=c:\my_sid.dmp log=my_sid.log fromuser=system touser=tceng2k5 commit=y ignore=y
c:\imp system/system@my_sid file=c:\my_sid.dmp log=my_sid.log fromuser=system touser=tcprj6 commit=y ignore=y

5. 为方便记忆,可以将所有用户的密码统一为"infodba",这样加密后的connect string 均为 "tbwiabd"。

6. 接下来,就根据不同应用的需要,创建相应的schema,如安装tceng811时,在configure or new db步骤时,选择用户tceng811进行操作, 安装tceng912时, 则使用tceng912用户, 当配置TcProj6.0的数据库时,使用tcprj6这个用户, 千万不要选错了

7. 接下来就是如何处理PORTAL端连接的问题,包括两个部分的内容,分别要处理 start_my_sid_PortalServer.bat文件与my_sid_PortalServer.imp文件。

我们在配置第一个“数据实例” 的时候,生成了start_my_sid_PortalServer.bat 与 my_sid_PortalServer.imp,如果按传统方法配置后面的“数据实例”就会出问题,因为这两个文件只有一份, 要想处理多个“数据实例”登录的问题,必须将其分开,方法如下:

假设我们现在有两个客户数据,一是aaa, 另一个是bbb,我们需要将以上两个文件复制为以下两份:
start_my_sid_PortalServer_aaa.bat
start_my_sid_PortalServer_bbb.bat
my_sid_PortalServer_aaa.imp
my_sid_PortalServer_bbb.imp
修改前两个文件中iman_data 的路径,再修改后两个文中的IMP文件名,使其与“数据实例”相对应。

8. 将%IPR%下的client_specific.properties复制为client_specific_aaa.properties与 client_specific_bbb.properties,修改文件中的"ServerName ServerMarker", 使其与“数据实例”相对应。

9. 将portal.bat 复制为portal_aaa.bat, portal_bbb.bat, 用于处理有独立的客户化包的问题和数据库的选择问题,然后按如下进行修改:

在portal_aaa.bat的"set IDR=%IPR%"之后添加以下内容:
xcopy %IPR%\client_specific_aaa.properties %IPR%\client_specific.properties /y >NUL 2>&1
在portal_bbb.bat的"set IDR=%IPR%"之后添加以下内容:
xcopy %IPR%\client_specific_bbb.properties %IPR%\client_specific.properties /y >NUL 2>&1

之后,我们就可以分别使用portal_aaa.bat与portal_bbb.bat进入不同的“数据实例”了。

10. 差不多了, 哪个不怕死的有空就试试吧~

( Many thanks to Dr. Frank Feng sharing this solution to me ! )

No comments: