ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 解析oracle 10g示例方案创建过程

解析oracle 10g示例方案创建过程

原创 Linux操作系统 作者:jcq0 时间:2009-01-14 08:37:11 0 删除 编辑

解析oracle 10g示例方案创建过程

1.问题起因:

在oracle 10g版本中,运行dbca,如果选择 一般用途/事务处理/数据仓库选项时 再进一步建库都会提示是否创建示例方案
唯独选择定制数据库时该选项不可用,而且也无法添加该示例方案

2.新的想法

我的库正好是使用定制数据库创建的,没有办法添加示例方案
既然其它的三个选项可以创建示例方案,那么是否可以通过保存生成的数据库脚本进一步研究示例方案建立的过程呢

3.马上动手

于是选择一般用途的数据库,选择示例方案选项并生成脚本

4.找到差异

通过对脚本不断比对,将问题的焦点定位在cloneDBCreation.sql中的一个语句上面

@d:\oracle10\product\10.2.0\db_1\demo\schema\mkplug.sql
&&sysPassword change_on_install change_on_install
change_on_install change_on_install change_on_install
change_on_install
d:\oracle10\product\10.2.0\db_1\assistants\dbca\templates\example.dmp
d:\oracle10\product\10.2.0\db_1\assistants\dbca\templates\example01.dfb
E:\test10\oradataexample01.dbf D:\oracle\admin\test10\admin\test10\scripts\
"'SYS/&&sysPassword as SYSDBA'";

5.大致过程

通过对该脚本的研究发现创建示例方案大概由一下几个步骤完成

5.1创建相关的用户,目录

CREATE USER hr IDENTIFIED BY &&password_hr ;
CREATE USER oe IDENTIFIED BY &&password_oe ;
CREATE USER ix IDENTIFIED BY &&password_ix ;
CREATE USER sh IDENTIFIED BY &&password_sh ;
CREATE USER pm IDENTIFIED BY &&password_pm ;
CREATE USER bi IDENTIFIED BY &&password_bi ;

@?/demo/schema/mk_dir

5.2赋予相关权限

GRANT CREATE SESSION   TO hr;
GRANT ALTER SESSION   TO hr;
GRANT CREATE DATABASE LINK  TO hr;
GRANT CREATE SEQUENCE   TO hr;
GRANT CREATE SYNONYM   TO hr;
GRANT CREATE VIEW   TO hr;
GRANT RESOURCE     TO hr;
GRANT execute ON sys.dbms_stats  TO hr;

......

5.3从备份中restore示例方案的数据文件

dbms_backup_restore.restoreSetDataFile;
dbms_backup_restore.restoreDataFileTo(data_file_id,'&data_file_name');
dbms_backup_restore.restoreBackupPiece('&data_file_backup', done);

5.4导入example表空间元数据

host imp "'sys/&&password_sys AS SYSDBA'" transport_tablespace=y
file=&imp_file log=&imp_logfile datafiles='&datafile'
tablespaces=EXAMPLE tts_owners=hr,oe,pm,ix,sh

ALTER TABLESPACE example READ WRITE;

5.5创建序列,视图,授予对象权限等后继操作

CREATE SEQUENCE locations_seq
 START WITH     3300
 INCREMENT BY   100
 MAXVALUE       9900
 NOCACHE
 NOCYCLE;

CREATE OR REPLACE VIEW emp_details_view
  (employee_id,
   job_id,
   manager_id,
   department_id,
   ......

GRANT REFERENCES, SELECT ON employees  TO oe;
GRANT REFERENCES, SELECT ON countries  TO oe;
GRANT REFERENCES, SELECT ON locations  TO oe;
GRANT SELECT ON jobs    TO oe;
GRANT SELECT ON job_history   TO oe;
GRANT SELECT ON departments   TO oe;

......

6.注意事项

6.1 example表空间不能预先建立

因为5.3步要做example数据文件的restore
5.4步要导入example表空间的元数据

如果已经存在这个表空间 那么脚本执行时会报错

6.2 必须先将数据库字符集置为US7ASCII

由于oracle 10g提供的example表空间的元数据是从字符集为US7ASCII的库中导出来的
如果数据库当前的字符集不为US7ASCII,那么导入元数据时会报错

Export file created by EXPORT:V10.02.01 via conventional path
About to import transportable tablespace(s) metadata...
import done in US7ASCII character set and AL16UTF16 NCHAR character set
import server uses ZHS16GBK character set (possible charset conversion)
. importing SYS's objects into SYS
. importing SYS's objects into SYS
IMP-00017: following statement failed with ORACLE error 29345:
 "BEGIN   sys.dbms_plugts.beginImport ('10.2.0.1.0',1,'2000',7,'Microsoft Win"
 "dows IA (32-bit)',51896,43851,1,1,1,0); END;"
IMP-00003: ORACLE error 29345 encountered
ORA-29345: cannot plug a tablespace into a database using an incompatible character set
ORA-06512: at "SYS.DBMS_PLUGTS", line 2386
ORA-06512: at "SYS.DBMS_PLUGTS", line 1946
ORA-06512: at line 1
IMP-00000: Import terminated unsuccessfully

修改字符集的步骤如下(当然这步是有风险的)
而且在example表空间创建好之后还要修改回原来的字符集

jcq0> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
jcq0> startup mount
ORACLE 例程已经启动。

Total System Global Area  289406976 bytes
Fixed Size                  1248600 bytes
Variable Size             121635496 bytes
Database Buffers          163577856 bytes
Redo Buffers                2945024 bytes
数据库装载完毕。
jcq0> ALTER SYSTEM ENABLE RESTRICTED SESSION;

系统已更改。

jcq0> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

系统已更改。

jcq0> ALTER SYSTEM SET AQ_TM_PROCESSES=0;

系统已更改。

jcq0> alter database open;

数据库已更改。

jcq0> alter database character set INTERNAL_USE US7ASCII;

数据库已更改。

jcq0> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
jcq0> startup
ORACLE 例程已经启动。

Total System Global Area  289406976 bytes
Fixed Size                  1248600 bytes
Variable Size             121635496 bytes
Database Buffers          163577856 bytes
Redo Buffers                2945024 bytes
数据库装载完毕。
数据库已经打开。

7.手动创建

你需要做什么?

7.1确认没有example表空间和对应的数据文件

7.2将数据库字符集强制转换为US7ASCII

7.3执行脚本

@d:\oracle10\product\10.2.0\db_1\demo\schema\mkplug.sql test10 test10 test10 test10 test10 test10 test10 d:\oracle10\product\10.2.0\db_1\assistants\dbca\templates\example.dmp d:\oracle10\product\10.2.0\db_1\assistants\dbca\templates\example01.dfb D:\oracle10\oradata\orcl10\example01.dbf D:\oracle\admin\orcl10\scripts\ "'SYS/&&sysPassword as SYSDBA'";

各参数的意义分别为

SYS HR OE PM IX SH BI 密码
元数据位置及名称 备份片的位置及名称 restore的数据文件的名称和位置 日志输出的位置

7.4将数据库修改回原来的字符集

8.简单总结

oracle 10g提供了跨平台的表空间透明传输特性,而且它自己在安装过程中也充分利用了这一特性,
为我们做了一个示范,同时也为我们跨平台迁移数据提供了另一种方式.

(需要引用, 请注明出处:痴情甲骨文http://space.itpub.net/14130873)

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14130873/viewspace-538142/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-11-25

  • 博文量
    93
  • 访问量
    347103