大家好,今天在使用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/test@XE 命令登錄數據庫的時候給出警告信息,之前沒有遇到過這樣的問題,以爲數據庫安裝錯誤,或者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 問題解決了,希望對大家用幫助,謝謝~