PURPOSE
To explain how to change the database or national character set of
an existing Oracle8 database without having to recreate the database.
SCOPE & APPLICATION
The method described here is documented in the Oracle 8.1.x documentation.
It is not documented but it can be used in version 8.0.x.
Before using this method it is essential to do a full backup of the
database.
This method does not work in Oracle7.
Note that changing the database or the national character set as described
in this document does not change the actual character codes, it only
changes the character set declaration. If you want to convert the contents
of the database (character codes) from one character set to another
you must use the Oracle Export and Import utilities. This is needed,
for example, if the source character set is not a binary subset of
the target character set, i.e. if a character exists in the source
and in the target character set but not with the same binary code.
CHANGING THE DATABASE OR NATIONAL CHARACTER SET
================================================
In Oracle8 there is another way of changing the database or national character
set. The method uses two commands, which are documented in the Oracle8i
National Language Support Guide:
ALTER DATABASE [<db_name>] CHARACTER SET <new_character_set>
ALTER DATABASE [<db_name>] NATIONAL CHARACTER SET <new_NCHAR_character_set>
The database name is optional. The character set name should be specified
without quotes, for example:
ALTER DATABASE CHARACTER SET WE8ISO8859P1
To change the database character set perform the following steps.
Note that some of them have been erroneously omitted from the Oracle8i
documentation:
The following steps below you have to follow :
1. Make sure the parallel_server parameter in INIT.ORA is set to false
or it is not set at all.
2. Execute the following commands in Server Manager (svrmgrl):
SVRMGR> SHUTDOWN IMMEDIATE; -- or NORMAL
<do a full database backup>
SVRMGR> STARTUP MOUNT;
SVRMGR> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SVRMGR> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SVRMGR> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SVRMGR> ALTER DATABASE OPEN;
SVRMGR> ALTER DATABASE CHARACTER SET WE8ISO8859P1;
SVRMGR> ALTER DATABASE NATIONAL CHARACTER SET WE8ISO8859P1;
SVRMGR> SHUTDOWN IMMEDIATE; -- OR NORMAL
SVRMGR> STARTUP RESTRICT;
3. Restore the parallel_server parameter in INIT.ORA, if necessary.
4. Execute the following commands in Server Manager:
SVRMGR> SHUTDOWN IMMEDIATE; -- OR NORMAL
SVRMGR> STARTUP;
The double restart is necessary because of a SGA initialization bug,
fixed in Oracle9i.
To change the national character set replace the ALTER DATABASE CHARACTER
SET command with ALTER DATABASE NATIONAL CHARACTER SET. You can issue both
commands together if you wish.
The ALTER DATABASE [NATIONAL] CHARACTER SET command will return:
ORA-01679: database must be mounted EXCLUSIVE and not open to activate
- if you do not enable restricted session
- if you startup the instance in PARALLEL/SHARED mode
- if you do not set the number of queue processes to 0
- if you do not set the number of AQ time manager processes to 0
- if anybody is logged in apart from you.
This error message is misleading. The command requires the database to be
open but only one session, the one executing the command, is allowed.
The above method will only work if the old character set is US7ASCII (or if
you change the character set to itself). If the old character set is neither
US7ASCII nor equal to the new character set, the ALTER DATABASE [NATIONAL]
CHARACTER SET command will return:
- in Oracle 8.1.5 and above:
ORA-12712: new character set must be a superset of old character set
- in Oracle 8.0.5 and 8.0.6:
ORA-12710: new character set must be a superset of old character set
- in Oracle 8.0.3 and 8.0.4:
ORA-24329: invalid character set identifier
.
|