大家好,今天在使用Oracle XE数据库的时候遇到了“访问 PRODUCT_USER_PROFILE 时出错,警告: 未加载产品用户概要文件信息!您需要将 PUPBLD.SQL 作为 SYSTEM 运行”的警告。下面为大家分析下,并说明我的解决方法:
在安装了Oracle XE 数据库之后,创建用户test
--创建表空间--extent management local uniform size 256K(制定扩展空间)
create tablespace test_data datafile 'D:\Oracle\app\oracle\oradata\XE\test_data.dbf' size 1G extent management local autoallocate;
--创建临时表空间
create temporary tablespace test_temp tempfile 'D:\Oracle\app\oracle\oradata\XE\test_temp.dbf' size 100m autoextend on next 50m maxsize 20480m extent management local;
--创建用户
create user test identified by test default tablespace test_data temporary tablespace test_temp;
--给用户授权
grant connect, resource, dba to test;
一切执行顺利,可是通过 sqlplus test/[email protected] 命令登录数据库的时候给出警告信息,之前没有遇到过这样的问题,以为数据库安装错误,或者Oracle XE不能创建表空间呢,经上网查询后,得知表PRODUCT_USER_PROFILE 是SYSTEM用户下负责安全策略的表。
根据提示信息,Oracle XE安装后 SYSTEM用户下缺失了该表,需要用SYSTEM登录,并执行D:\Oracle\app\oracle\product\11.2.0\server\sqlplus\admin\pupbld.sql 文件,该路径是我机器上的文件路径,你们的可能不一样的。
这个过程为什么会报错呢?我们打开pupbld.sql文件看下就知道了。
-- If PRODUCT_USER_PROFILE exists, use its values and drop it
DROP SYNONYM PRODUCT_USER_PROFILE;
CREATE TABLE SQLPLUS_PRODUCT_PROFILE AS
SELECT PRODUCT, USERID, ATTRIBUTE, SCOPE, NUMERIC_VALUE, CHAR_VALUE,
DATE_VALUE FROM PRODUCT_USER_PROFILE;
DROP TABLE PRODUCT_USER_PROFILE;
ALTER TABLE SQLPLUS_PRODUCT_PROFILE ADD (LONG_VALUE LONG);
-- Create SQLPLUS_PRODUCT_PROFILE from scratch
CREATE TABLE SQLPLUS_PRODUCT_PROFILE
(
PRODUCT VARCHAR2 (30) NOT NULL,
USERID VARCHAR2 (30),
ATTRIBUTE VARCHAR2 (240),
SCOPE VARCHAR2 (240),
NUMERIC_VALUE DECIMAL (15,2),
CHAR_VALUE VARCHAR2 (240),
DATE_VALUE DATE,
LONG_VALUE LONG
);
-- Remove SQL*Plus V3 name for sqlplus_product_profile
DROP TABLE PRODUCT_PROFILE;
-- Create the view PRODUCT_PRIVS and grant access to that
DROP VIEW PRODUCT_PRIVS;
CREATE VIEW PRODUCT_PRIVS AS
SELECT PRODUCT, USERID, ATTRIBUTE, SCOPE,
NUMERIC_VALUE, CHAR_VALUE, DATE_VALUE, LONG_VALUE
FROM SQLPLUS_PRODUCT_PROFILE
WHERE USERID = 'PUBLIC' OR USER LIKE USERID;
GRANT SELECT ON PRODUCT_PRIVS TO PUBLIC;
DROP PUBLIC SYNONYM PRODUCT_PROFILE;
CREATE PUBLIC SYNONYM PRODUCT_PROFILE FOR SYSTEM.PRODUCT_PRIVS;
DROP SYNONYM PRODUCT_USER_PROFILE;
CREATE SYNONYM PRODUCT_USER_PROFILE FOR SYSTEM.SQLPLUS_PRODUCT_PROFILE;
DROP PUBLIC SYNONYM PRODUCT_USER_PROFILE;
CREATE PUBLIC SYNONYM PRODUCT_USER_PROFILE FOR SYSTEM.PRODUCT_PRIVS;
-- End of pupbld.sql
由于数据库中不存该表或者视图,所有会报错,不用担心。最后给大家展示下效果:
OK 问题解决了,希望对大家用帮助,谢谢~