Create The World With Creativity
 
Welcome, Guest:Log in | Register | Information Center | Languages | Search | Tags | FAQs | Lite
There was a problem with the request. Check your permission or contact with administrator.




Your Ad Here

Grade this thread

Quote Favorites Report
Starter:  Topic: : How to Change Character Set to UTF8 for Oracle Database?
R.Wang 
5 Stars
 

Info: Moderator Offline Male
From: Not Specified 
Posts: 332  
Digest 0  
Credits: 59
Money: 1761 $OraclePoint
Registered on 2007-04-20
ProfileProfile BuddyBuddy PMPM Reply Reply QuotesQuotes   1 F 
How to Change Character Set to UTF8 for Oracle Database?



To implement upgrade of one of our applications, our team scheduled a period of downtime to get oracle database (10.2.0.4)ready for it. What the DBA team is required is to create a new oracle database which is identical to the production database. Thanks for the downtime of production database, the steps to create identical database are quite straightforward as below.
[url=http://www.oraclepoint.com]swUAh56pCOraclePointQKADogfJ5[/url]


  • issue “alter database backup controlfile to trace” against production database before downtime
  • extract “create controlfile” command from trace file under folder udump
  • edit command to reflect new location of target database, and change line of “CREATE CONTROLFILE REUSE DATABASE "OLDDB" NORESETLOGS  NOARCHIVELOG” to “CREATE CONTROLFILE SET DATABASE “NEWDB” RESETLOGS  NOARCHIVELOG”
  • Shutdown Production Database
  • create init parameter file, password file and edit listener.ora and tnsnames.ora
  • log on idle instance for target database
  • issue “startup nomount”
  • issue “create controlfile” command to create control file
  • issue “alter database open resetlogs” to open database
Once the target database is up, we are ready to implement character set conversion. The following three oracle metalink documents are what we highly relied on to proceed.
[url=http://www.oraclepoint.com]9o9mPF6jCOraclePointbu2scnDcL[/url]

Here, I would like to list step-by-step solution to finish the character set conversion.

Step 1: Installing and Configuring CSSCAN
[url=http://www.oraclepoint.com]9Y1ApBBspOraclePointiOzcNdbzs[/url]


The first thing to install CSSCAN is to connect database as sysdba and run script csminst.sql ($ORACLE_HOME/rdbms/admin).
[url=http://www.oraclepoint.com]guSiMDa6fOraclePointE99P8WG9B[/url]

If you experience error about no-existence of directory ‘log_file_dir’ and ‘data_file_dir’, please ignore it because granting read privilege to these two directories is removed.

And then, we need to make sure if CSSCAN is installed propermanticsly and ready for use. To check that, simply issue the following OS command.
[url=http://www.oraclepoint.com]H0uxh0nAMOraclePointGbCz8xIg0[/url]


$ csscan \"sys/password@dbtnsname as sysdba\" FULL=Y TOCHAR=UTF8 LOG=TOUTF8FIN CAPTURE=Y ARRAY=1000000 PROCESS=2
[url=http://www.oraclepoint.com]L75qA4pQ1OraclePointBXyDeyySW[/url]

If we have “Scanner terminated successfully.” message, we are ready to use CSSCAN for character set conversion. 

Step 2: Pre-checking for database
[url=http://www.oraclepoint.com]x6WACxC2vOraclePointz0RyKOt2P[/url]


Before starting character set conversion, we need to do following pre-checking against database.
[url=http://www.oraclepoint.com]mggci4QmYOraclePointEaqaNmwNo[/url]

  • Invalid objects
  • Orphaned datqapump master tables (10g and up)
  • Objects in the recyclebin (10g and up)
  • Leftover temporary tables using CHAR semantics
Note that, please log on database with sysdba to proceed the followign steps.

1) Invalid objects
[url=http://www.oraclepoint.com]kQgVFfn5qOraclePoint3niIQFoso[/url]


To check invalid objects in database, we need to Issue the following sql statement   to check invalid objects
[url=http://www.oraclepoint.com]h9Q6Cqmd5OraclePointPQI41ZZMf[/url]

SQL> select distinct owner from dba_objects where status=’INVALID’;

The above sql statement lists all of schemas which contains ‘INVALID’ objects. These invalid objects need to be compiled or dropped if they are unused. The simplest way to compile all of objects within single schema is to use package UTL_RECOMP as following.
[url=http://www.oraclepoint.com]61ZmtDL2TOraclePointQfC6DAL0D[/url]


SQL> exec utl_recomp.recomp_serial(‘SCHEMA’);
[url=http://www.oraclepoint.com]3mgx2x7unOraclePointVK11FqQsa[/url]

2) Orphaned datapump master tables (10g and up)

To check it, Issue the following sql statement:
[url=http://www.oraclepoint.com]U4RnKxpF1OraclePointqR1tKcQ8T[/url]


SQL> [font="Trebuchet]SELECT o.status, o.object_id, o.object_type, 
                    o.owner||'.'||object_name "OWNER.OBJECT"
[url=http://www.oraclepoint.com]D4ErPOhFUOraclePointOVCpp77TG[/url]

          FROM dba_objects o, dba_datapump_jobs j
        WHERE o.owner=j.owner_name AND o.object_name=j.job_name
             AND j.job_name NOT LIKE 'BIN$%' ORDER BY 4,2;
[url=http://www.oraclepoint.com]u0LlqcbamOraclePoint5qkNueSct[/url]


[font="Trebuchet]If  “no rows selected”, please go proceed next step. Otherwise, check [font="Trebuchet]Note: 336014.1 How To Cleanup Orphaned DataPump Jobs In DBA_DATAPUMP_JOBS ?[font="Trebuchet].
[url=http://www.oraclepoint.com]gAz2PL552OraclePoint12K7lKIM1[/url]

3) Objects in the recyclebin (10g and up)

SQL> [font="Trebuchet]SELECT OWNER, ORIGINAL_NAME, OBJECT_NAME, TYPE from dba_recyclebin order by 1,2;
[url=http://www.oraclepoint.com]loQOi8yvsOraclePointSELClM2cb[/url]


If there are objects in the recyclebin then perform
[url=http://www.oraclepoint.com]CWW5NNFJyOraclePointPSBG4pXHN[/url]

[font="Trebuchet]SQL> PURGE DBA_RECYCLEBIN;

This will remove unneeded objects and otherwise during CSALTER an ORA-38301 will be seen.
[url=http://www.oraclepoint.com]V70EPEPRpOraclePointbJH4MePGr[/url]


4) Leftover temporary tables using CHAR semantics
[url=http://www.oraclepoint.com]cL2RbKThDOraclePoint96LMQHMUW[/url]

SQL> [font="Trebuchet]select C.owner ||'.'|| C.table_name ||'.'||      [font="Trebuchet]C.column_name ||' ('||
C.data_type ||' '|| C.char_length ||' CHAR)'
from all_tab_columns C
[url=http://www.oraclepoint.com]Qko6CyD6AOraclePointiKHQnSI6t[/url]

where C.char_used = 'C'
and C.table_name in (select table_name from dba_tables where temporary='Y'
and C.data_type in ('VARCHAR2', 'CHAR'
[url=http://www.oraclepoint.com]SORWNMhadOraclePointpmyC4Zqzb[/url]

order by 1;

[font="Trebuchet]If  “no rows selected”, please go proceed next step. Otherwise, check [font="Trebuchet]Note: 4157602.8 DBMS_STATS "ORA_TEMP_%_DS_%" temporary tables not cleaned up.
[url=http://www.oraclepoint.com]e4XfbimrMOraclePoint6zHpIV7ei[/url]


Step 3. Check the Source database for "Lossy"
[url=http://www.oraclepoint.com]JB9nqlctfOraclePoint2ZUT5Oqap[/url]

Run CSSCAN with the following syntax:

$ csscan \"sys/password@dbtnsname sysdba\" FULL=Y FROMCHAR=WE8ISO8859P1 TOCHAR=WE8ISO8859P1 LOG=dbcheck CAPTURE=N ARRAY=1000000 PROCESS=2
[url=http://www.oraclepoint.com]ODXa9NinVOraclePoint4kzct2bXi[/url]


Where, ‘WE8ISO8859P1’ is the current character set of database. To check current character set of database, please issue the following sql statement.
[url=http://www.oraclepoint.com]DzRiqr40mOraclePointHqCx6FLVE[/url]

SQL> select value from NLS_DATABASE_PARAMETERS where parameter='NLS_CHARACTERSET';

Running above CSSCAN command will create three files:
[url=http://www.oraclepoint.com]Y5ruxRkQBOraclePointcrZAvOST6[/url]


1. dbcheck.out a log of the output of csscan
2. dbcheck.txt a Database Scan Summary Report
[url=http://www.oraclepoint.com]AM5mUlpIgOraclePointuT3yswgdk[/url]

3. dbcheck.err contains the rowid's of the Lossy rows reported in dbcheck.txt (if any).

This is to check if all data is stored correctly in the current character set. Because the TOCHAR and FROMCHAR character sets as the same there cannot be any "Convertible" or "Truncation" data reported in dbcheck.txt. If all the data in the database is stored correctly at the moment then there is only "Changeless" data reported in dbcheck.txt.
[url=http://www.oraclepoint.com]xD1zfiOgTOraclePointdznYz1TcK[/url]


If there is any "Lossy" data then those rows contain code points that are not currently defined correctly and they should be cleared up before you can continue. The most common situation is when having an US7ASCII/WE8ISO8859P1 database and "Lossy", in this case changing your US7ASCII/WE8ISO8859P1 SOURCE database to WE8MSWIN1252 using Alter Database Character Set / Csalter will most likely solve you lossy.
[url=http://www.oraclepoint.com]5HTa3mSqVOraclePointFNypB3g1Y[/url]

To perform character set conversion from WE8ISO8859P1 to WE8MSWIN1252, issue,

SQL> shutdown immediate
[url=http://www.oraclepoint.com]EF6YiuB7kOraclePoint2PCCKJVkB[/url]


SQL> startup restrict
[url=http://www.oraclepoint.com]94sU96Jo8OraclePointBKxZP4Uob[/url]

SQL > alter database character set WE8MSWIN1252;

SQL> alter database open;
[url=http://www.oraclepoint.com]FpYphnskxOraclePoint27Y45SlPQ[/url]


After conversion to WE8MSWIN1252, repeat above CSSCAN command to make sure there is no “lossy” data.
[url=http://www.oraclepoint.com]hY6fZGSzVOraclePointMKAnPpC6N[/url]

Step 4. Check for "Convertible" and "Truncation" data when going to UTF8

$ csscan \"sys/password@dbtnsname as sysdba\" FULL=Y TOCHAR=UTF8 LOG=TOUTF8 CAPTURE=Y ARRAY=1000000 PROCESS=2
[url=http://www.oraclepoint.com]pnxdft3YoOraclePointKA4biRWDr[/url]


This will create 3 files :
toutf8.out a log of the output of csscan
[url=http://www.oraclepoint.com]cWgyiqyM7OraclePointeO2r5ffYA[/url]

toutf8.txt the Database Scan Summary Report
toutf8.err contains the rowid's of the Convertible and Lossy rows reported in toutf8.txt
[url=http://www.oraclepoint.com]PRZ4bax39OraclePointEPCvsYSh8[/url]

There should be NO entries under "Lossy" in toutf8.txt, because they should have been filtered out in step 3, if there is "Lossy" data then please redo step 3.

File toutf8.txt should have the following part of output or similar.
[url=http://www.oraclepoint.com]9VK61YxiTOraclePointSDsTS0tMb[/url]


[Scan Summary]
[url=http://www.oraclepoint.com]J0UHEjK1SOraclePointiIzfHKqDA[/url]

All character type data in the data dictionary are convertible to the new character set
All character type application data remain the same in the new character set
[Data Dictionary Conversion Summary]
Datatype                    Changeless      Convertible       Truncation            Lossy
--------------------- ---------------- ---------------- ---------------- ----------------
[url=http://www.oraclepoint.com]E1iYImHc6OraclePointGLHhVH2dL[/url]

VARCHAR2                     4,225,489                0                0                0
CHAR                             1,116                0                0                0
LONG                           159,629                0                0                0
[url=http://www.oraclepoint.com]bnCtLLirSOraclePointtXVucMS2V[/url]

CLOB                            17,743            4,349                0                0
VARRAY                          23,462                0                0                0
--------------------- ---------------- ---------------- ---------------- ----------------
[url=http://www.oraclepoint.com]69x1F09mUOraclePointGexS7aUpm[/url]

Total                        4,427,439            4,349                0                0
Total in percentage             99.902%           0.098%           0.000%           0.000%
The data dictionary can be safely migrated using the CSALTER script
[Application Data Conversion Summary]
Datatype                    Changeless      Convertible       Truncation            Lossy
--------------------- ---------------- ---------------- ---------------- ----------------
[url=http://www.oraclepoint.com]fOUy8rKrKOraclePointWABr6AfwF[/url]

VARCHAR2                     5,262,627                0                0                0
CHAR                                87                0                0                0
LONG                                 0                0                0                0
[url=http://www.oraclepoint.com]fvsz2NnJJOraclePointEezq0DBxB[/url]

CLOB                               134                0                0                0
VARRAY                           1,587                0                0                0
--------------------- ---------------- ---------------- ---------------- ----------------
[url=http://www.oraclepoint.com]t9s4Us6CoOraclePoint6ibBDNu4E[/url]

Total                        5,264,435                0                0                0
Total in percentage            100.000%           0.000%           0.000%           0.000%
If there is only ‘Changeless’ and ‘Convertible’, we can go continue next step.
[url=http://www.oraclepoint.com]8hOGlt7SsOraclePoint0TgACft7z[/url]

Step 5. Export application objects

In above toutf8.txt, there are detailed list of application objects which we need to use export/import to deal with. The sample list of this looks like:
[url=http://www.oraclepoint.com]c23HxaizeOraclePointvjY1g6Fnh[/url]


[Distribution of Convertible, Truncated and Lossy Data by Table]
[url=http://www.oraclepoint.com]ykzhjJEkMOraclePointjUJZwBR4z[/url]

USER.TABLE                                              Convertible       Truncation            Lossy
-------------------------------------------------- ---------------- ---------------- ----------------
MDSYS.SDO_COORD_OP_PARAM_VALS                                   200                0                0
[url=http://www.oraclepoint.com]scoNONlFuOraclePointgKYE094gi[/url]

MDSYS.SDO_GEOR_XMLSCHEMA_TABLE                                    1                0                0
MDSYS.SDO_STYLES_TABLE                                           78                0                0
MDSYS.SDO_XML_SCHEMAS                                             4                0                0
[url=http://www.oraclepoint.com]DlJQKdZjQOraclePointb2JQjm5x1[/url]

SYS.METASTYLESHEET                                               80                0                0
SYS.RULE$                                                         4                0                0
SYS.SQL$TEXT                                                      1                0                0
[url=http://www.oraclepoint.com]IY636GR0FOraclePointP4mx8N7NY[/url]

SYS.WRH$_SQLTEXT                                              1,420                0                0
SYS.WRH$_SQL_PLAN                                             1,339                0                0
SYS.WRI$_ADV_ACTIONS                                          4,754                0                0
[url=http://www.oraclepoint.com]Zn8pEyzUYOraclePointbPLSXkNQf[/url]

SYS.WRI$_ADV_OBJECTS                                          2,872                0                0
SYS.WRI$_ADV_RATIONALE                                        2,130                0                0
SYS.WRI$_DBU_FEATURE_METADATA                                    99                0                0
[url=http://www.oraclepoint.com]TheZwYCkVOraclePointQgio7MmmQ[/url]

SYS.WRI$_DBU_FEATURE_USAGE                                       10                0                0
SYS.WRI$_DBU_HWM_METADATA                                        19                0                0
WEBCT.AGN_ASSIGNMENT                                          4,130                0                0
[url=http://www.oraclepoint.com]bcl141BMOOraclePointmZeHtBmIy[/url]

WEBCT.AGN_GROUPASSIGNMENT                                       221                0                0
WEBCT.AGN_SUBMISSION                                         12,531                0                0
WEBCT.AGN_SUBMISSION_COMMENT                                    594                0                0
[url=http://www.oraclepoint.com]ALYVb65F3OraclePointGseXJ7901[/url]

WEBCT.ANNOUNCEMENT                                            1,776                0                0
WEBCT.ASSMT_ATTEMPT                                             144                0                0
WEBCT.ASSMT_ATTEMPT_ITEM                                      4,386                0                0
[url=http://www.oraclepoint.com]zBCDnchvLOraclePointjXUYYgxu8[/url]

WEBCT.ASSMT_RESPONSE                                          3,264                0                0
WEBCT.ASSMT_SETTING                                              24                0                0
WEBCT.CALENDAR_ENTRY                                          4,634                0                0
[url=http://www.oraclepoint.com]spDlwvFK5OraclePointCI54967Bj[/url]

WEBCT.CMS_CE_LANGUAGE                                             2                0                0
WEBCT.CMS_CONTENT_ENTRY                                     586,378                0                0
WEBCT.CMS_LINK                                                  653                0                0
[url=http://www.oraclepoint.com]YjUkJs6hHOraclePointbV2ZEhcpT[/url]

WEBCT.CMS_UNIQUE_NAME                                           618                0                0
WEBCT.CMS_UNIQUE_NAME070809133755                               218                0                0
WEBCT.CO_HEADERFOOTER                                        11,479                0                0
[url=http://www.oraclepoint.com]OueJxmDrlOraclePoint0nmiCM4mV[/url]


Please note that only data dictionary and oracle schema could be safely converted to target character set. Other application data, such as objects in schema WEBCT, need to be converted by using export/import mechanism. The basic step is to do object export backup, drop objects and do import these object after the character set conversion is done.
[url=http://www.oraclepoint.com]li4sAOkZSOraclePointI38cHs7Qg[/url]

Export these application objects and then drop them from database. Please note that “Do NOT use Expdp/Impdp when going to (AL32)UTF8 or an other multibyte characterset on ALL 10g versions lower then 10.2.0.4 (including 10.1.0.5).”

Step 6. Perform Character Set conversion with CSALTER package
[url=http://www.oraclepoint.com]jUNKT1x33OraclePoint0vfUWEOFE[/url]


After all of application objects/data are dropped from database, please re-run csscan command in step 4 to check if there is application object/data in toutf8.txt. If not, it’s ready for conversion by using CSALTER package.
[url=http://www.oraclepoint.com]cqevzXtReOraclePointcNv9xFL8Z[/url]

SQL> shutdown immediate
Database closed.
Database dismounted.
[url=http://www.oraclepoint.com]CuR6tCbEZOraclePointfSfkvMFgB[/url]

ORACLE instance shut down.
SQL> startup restrict
ORACLE instance started.
[url=http://www.oraclepoint.com]cPS8rgtqTOraclePointz3QO5Bg1v[/url]


Total System Global Area  884998144 bytes
Fixed Size                  2044616 bytes
[url=http://www.oraclepoint.com]iR19wJdX5OraclePointpcbq6q04Y[/url]

Variable Size             436211000 bytes
Database Buffers          440401920 bytes
Redo Buffers                6340608 bytes
[url=http://www.oraclepoint.com]fmFzb8Fq3OraclePointHMs3v0ttw[/url]

Database mounted.
Database opened.
SQL> $ORACLE_HOME/rdbms/admin/csalter.plb
[url=http://www.oraclepoint.com]3NJw4mNkhOraclePoint5jaTFDY5f[/url]


0 rows created.
[url=http://www.oraclepoint.com]VALNIY7BJOraclePoint6u3smG3Y0[/url]

Function created.

Function created.
[url=http://www.oraclepoint.com]emkBhJc1POraclePointfPJBlKMzS[/url]


Procedure created.
[url=http://www.oraclepoint.com]kvTurDnZqOraclePointtRFtvrTxP[/url]

This script will update the content of the Oracle Data Dictionary.
Please ensure you have a full backup before initiating this procedure.
Would you like to proceed (Y/N)?Y
[url=http://www.oraclepoint.com]dQFswV3x7OraclePointDAvVlhpVO[/url]

old   6:     if (UPPER('&conf'<> 'Y'then
new   6:     if (UPPER('Y'<> 'Y'then
Checking data validility...
[url=http://www.oraclepoint.com]t9nZr6ebqOraclePointMuebNuh7h[/url]

begin converting system objects
15541 rows in table SYS.WRH$_SQL_PLAN are converted
1129 rows in table SYS.WRH$_SQLTEXT are converted
[url=http://www.oraclepoint.com]4yUz2UlN6OraclePointI3RWmPAB8[/url]

80 rows in table SYS.METASTYLESHEET are converted
421 rows in table SYS.WRI$_ADV_ACTIONS are converted
19 rows in table SYS.WRI$_DBU_HWM_METADATA are converted
[url=http://www.oraclepoint.com]6gYmtJGKWOraclePoint2sTZlHtb0[/url]

87 rows in table SYS.WRI$_DBU_FEATURE_METADATA are converted
4 rows in table SYS.RULE$ are converted
978 rows in table SYS.WRI$_ADV_OBJECTS are converted
[url=http://www.oraclepoint.com]ECMAKFRhrOraclePointhhtecQ4E0[/url]

117 rows in table SYS.WRI$_DBU_FEATURE_USAGE are converted
1 row in table SYS.SCHEDULER$_EVENT_LOG is converted
354 rows in table SYS.WRI$_ADV_RATIONALE are converted
[url=http://www.oraclepoint.com]CLJZD3scdOraclePoint1M6zR8CRI[/url]


PL/SQL procedure successfully completed.
[url=http://www.oraclepoint.com]HjpzGNjlpOraclePointzeuyh7970[/url]

Alter the database character set...
CSALTER operation completed, please restart database
[url=http://www.oraclepoint.com]1pcUfoPV6OraclePointNXNVfwBU4[/url]

PL/SQL procedure successfully completed.

0 rows deleted.
[url=http://www.oraclepoint.com]O5f5tAohhOraclePointkgekWJCrp[/url]


Function dropped.
[url=http://www.oraclepoint.com]q8AmKXzg3OraclePointmiNgwHBr2[/url]

Function dropped.

Procedure dropped.
[url=http://www.oraclepoint.com]BVZj76DgSOraclePointNi03P833I[/url]


SQL> SELECT value$ FROM sys.props$ WHERE name = 'NLS_CHARACTERSET' ;
[url=http://www.oraclepoint.com]PspIUNV2AOraclePointd3rV5Cud0[/url]

VALUE$
--------------------------------------------------------------------------------
UTF8
[url=http://www.oraclepoint.com]pgf8uE8mUOraclePoint5eMDt6s3P[/url]


Step 7. Import application object/data with preceding export backup
[url=http://www.oraclepoint.com]6OG6s0mD4OraclePointpxWod4Kan[/url]

 While you start the importing job, you’ll find the screen output as following.

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit
[url=http://www.oraclepoint.com]PYQjTuwWeOraclePointrEW8AkE6T[/url]

Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

[url=http://www.oraclepoint.com]DiW8OKU3nOraclePointODE3ScI3v[/url]

Export file created by EXPORT:V10.02.01 via conventional path
import done in AL32UTF8 character set and AL16UTF16 NCHAR character set
[color="#ff0000"]import server uses UTF8 character set (possible charset conversion)
[/color]
[url=http://www.oraclepoint.com]3pIXWNuUNOraclePointUYJncsAa7[/url]


It’s clear that importing application object/data will automatically finish character set conversion.
[url=http://www.oraclepoint.com]Kuzx9322LOraclePointU0DG3sOPF[/url]

Step 8. Compare related schemas with source database

From my experience, successful importing of application object/data doesn’t mean the conversion is done completely. To be safe, it’s highly recommended to compare all of related schemas between source database and target database to make sure that there is no object is missing in target database.
[url=http://www.oraclepoint.com]b0ZpUyy9ROraclePointh9rdJbS7a[/url]


In completing, this is my approach to complete character set conversion to UTF8 on one of our application database. The above steps may not apply to other database or application. If you find it’s helpful, that’s great. If you have any concern, please refer to related articles in Oracle Metalink.
[url=http://www.oraclepoint.com]LyRWIRaOJOraclePointIcZO5Yokt[/url]




Tags: case share guide 

2010-05-09 23:53
  Grade this thread



Similar Threads Forum Author Replies Views Last Post
Auditing and Reporting Oracle User Activity
Oracle Database Administration myDBA 2 3407  2010-09-07 14:55
Oracle ODBC connection issue of "System.Exception: OCIEnvCreate"
Oracle Case Study R.Wang 0 128  2010-08-19 11:36
Oracle ODBC connection issue of “System.Exception: OCIEnvCreate"
Oracle Database Administration R.Wang 0 124  2010-08-19 11:35
Configuring Wallet Manager to enable HTTPS connect
Oracle Database Administration R.Wang 0 99  2010-08-19 10:44
My Practical Approach to Create Domain Index
Oracle Case Study R.Wang 0 649  2010-05-13 15:45

  Quick Response
Title:
Content:




Upload: Disable
Username:
Password:
  



Recommend to a friend Print Article Mode





 


Powered by BMForum Powered by BMForum 2007 5.6 RSS Feed  
Processed in 0.33522891 second(s),8 queries  
Top