问题
I am working on Apex 5, want to run bi publihser report with apex. I created instance in Manage Instance>Report Printing of apex Host Address : localhost Port:7001 Print Server: /xmlpserver/convert
Now created report query but when i click "Test Report Query" it shows me error ORA-20001: The printing engine could not be reached because either the URL specified is incorrect or a proxy URL needs to be specified.
My BI configure components are Configure Components
Oracle Enterprise Manager
http://naeemshahzad-PC:7001/em
Business Intelligence Enterprise Edition
naeemshahzad-PC:9704/analytics
Business Intelligence Publisher
naeemshahzad-PC:9704/xmlpserver
Please help me.
回答1:
The reason of this error :
ORA-20001: The printing engine could not be reached because either the URL specified is incorrect or a proxy URL needs to be specified.
is because by default, the ability to interact with network services is disabled in Oracle Database 12c. Therefore, if you are running Oracle Application Express 5.0 with Oracle Database 12c, you must use the new DBMS_NETWORK_ACL_ADMIN package to grant connect privileges to any host for the APEX_050000 database user.
Therefore you should grant connect privilages to APEX_050000
Solution:
Connect to database where Oracle Application Express is installed as SYS specifying the SYSDBA role. (connect to sqlplus by sys as sysdba user)
Then run following plsql:
DECLARE
ACL_PATH VARCHAR2(4000);
BEGIN
-- Look for the ACL currently assigned to '*' and give APEX_050000
-- the "connect" privilege if APEX_050000 does not have the privilege yet.
SELECT ACL INTO ACL_PATH FROM DBA_NETWORK_ACLS
WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL;
IF DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(ACL_PATH, 'APEX_050000',
'connect') IS NULL THEN
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL_PATH,
'APEX_050000', TRUE, 'connect');
END IF;
EXCEPTION
-- When no ACL has been assigned to '*'.
WHEN NO_DATA_FOUND THEN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('power_users.xml',
'ACL that lets power users to connect to everywhere',
'APEX_050000', TRUE, 'connect');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('power_users.xml','*');
END;
/
COMMIT;
after that run:
DECLARE
ACL_PATH VARCHAR2(4000);
BEGIN
-- Look for the ACL currently assigned to 'localhost' and give APEX_050000
-- the "connect" privilege if APEX_040200 does not have the privilege yet.
SELECT ACL INTO ACL_PATH FROM DBA_NETWORK_ACLS
WHERE HOST = 'localhost' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL;
IF DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(ACL_PATH, 'APEX_050000',
'connect') IS NULL THEN
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL_PATH,
'APEX_050000', TRUE, 'connect');
END IF;
EXCEPTION
-- When no ACL has been assigned to 'localhost'.
WHEN NO_DATA_FOUND THEN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('local-access-users.xml',
'ACL that lets users to connect to localhost',
'APEX_050000', TRUE, 'connect');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('local-access-users.xml','localhost');
END;
/
COMMIT;
来源:https://stackoverflow.com/questions/38103875/ora-20001-the-printing-engine-could-not-be-reached-oracle-apex-5-with-bi-publi