Oracle XE 訪問 PRODUCT_USER_PROFILE 時出錯 處理

    大家好,今天在使用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 問題解決了,希望對大家用幫助,謝謝~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章