标签: oracle12c

Oracle 12c 扩展以支持 varchar2 > 4000 字节对不是 sysdba 的用户不起作用

在 oracle 12c 兼容的 12.0.0 上,更改为使用 sysdba 权限扩展。我现在可以用 varchar2(16000) 作为列创建一个表并插入一个 > 4000 字节的字符串;但仅当作为 sysdba 连接时。当作为普通用户而不是 sysdba 连接时,我无法使用大于 4000 字节的 varchar2,抛出错误 ORA-60019。谁能解释为什么?当以非 sysdba 用户身份登录时,参数 max_string_size= extended 和 compatible=12.0.0。

oracle oracle12c

6
推荐指数
1
解决办法
1825
查看次数

使用 Oracle PL/SQL XMLQUERY 和 XQuery 代替“EXTRACT(XML)”有什么优势

我注意到 Oracle EXTRACT(XML) 函数在 Oracle 11g 中已弃用。

我曾经通过以下方法进行 XML 处理:

DECLARE
  TYPE xmltype_table IS TABLE OF xmltype INDEX BY PLS_INTEGER;
  vt_xml_tab xmltype_table;
  v_xml      xmltype;
BEGIN
  --Generate simple XML document to pretend we received it by some interface
  SELECT xmltype(dbms_xmlgen.getxml('select level, dbms_random.random rnd from dual connect by level<1000')) INTO v_xml FROM dual;

  --Get nodes
  SELECT VALUE(xm) xmlt BULK COLLECT INTO vt_xml_tab FROM TABLE(xmlsequence(v_xml.extract('/ROWSET/ROW/LEVEL'))) xm;

  --Do whatever processing I like
  FOR i IN 1..vt_xml_tab.count LOOP
    dbms_output.put_line(vt_xml_tab(i).extract('LEVEL/text()').getstringval());
  END LOOP;
END;
/
Run Code Online (Sandbox Code Playgroud)

由于 EXTRACT …

xml oracle oracle11g oracle12c

6
推荐指数
1
解决办法
1068
查看次数

Wildfly 无法加载 Oracle 驱动程序的模块

我正在尝试将 Oracle DB 数据源添加到 Wildfly 10。这是我所拥有的:

<wildfly-home>\modules\com\oracle\ojdbc6\main\
                                              module.xml
                                              ojdbc6.jar
Run Code Online (Sandbox Code Playgroud)

模块.xml

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:Wildfly:module:1.0" name="com.oracle.ojdbc6">
    <resources>
        <resource-root path="ojdbc6.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.resource.api"/>
        <module name="javax.transaction.api"/> <!-- See * below -->
   </dependencies>
</module>
Run Code Online (Sandbox Code Playgroud)

* 我试过有线和没有线<module name="javax.transaction.api/>。我在网上找到的一些例子包括它。有些没有。似乎与是否发生错误没有区别。

ojdbc6.jar是从<oracle-home>\jdbc\lib\ojdbc6.jar.

我已修改<wildfly-home>\standalone\configuration\standalone.xml以将其包含在<drivers>标签中:

<driver name="oraclethin" module="com.oracle.ojdbc6">
    <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
</driver>
Run Code Online (Sandbox Code Playgroud)

当我cd进入<wildfly-home>\bin并运行时,会吐出此错误消息.\standalone.bat

15:17:13,415 ERROR [org.jboss.as.controller.management-operation] (ServerService Thread Pool -- 33) WFLYCTL0013: Operation ("add") failed - address: ([
    ("subsystem" => "datasources"),
    ("jdbc-driver" => …
Run Code Online (Sandbox Code Playgroud)

oracle jdbc oracle12c wildfly wildfly-10

6
推荐指数
1
解决办法
2万
查看次数

PL/SQL 中的 Oracle DBMS_LDAP.open_ssl 显示错误:ORA-31202:SSL 握手失败

我们已经切换到新的 Microsoft ADFS 服务器,现在我们必须使用 LDAPS(端口 636 上的 LDAP over SSL)。但是在 PL/SQL 包中通过添加 DBMS_LDAP.open_ssl(基于这里)我得到:

ORA-31202: DBMS_LDAP: LDAP client/server error: SSL handshake failed

我的故障排除指导我对连接进行 tcpdump 调试,我发现 Oracle (12.1.0.2) DBMS_LDAP 在 SSL 握手中仅使用以下三个密码套件,这些套件都非常旧且不安全,并且不受最新的 Microsoft AD 支持。甚至我用 ldap.google.com:636 尝试了另一个 12c db (12.1.0.2.0) 并收到相同的错误和相同的密码套件。

Version: TLS 1.2 (0x0303)
Cipher Suite: TLS_DH_anon_WITH_3DES_EDE_CBC_SHA (0x001b)
Cipher Suite: TLS_DH_anon_WITH_RC4_128_MD5 (0x0018)
Cipher Suite: TLS_EMPTY_RENEGOTIATION_INFO_SCSV (0x00ff)
Run Code Online (Sandbox Code Playgroud)

Oracle 知识表明很多人都遇到过这个问题(Doc ID 19285025.8,Doc ID 1561121.1),唯一的建议是补丁“19285025”。我们已经完成了这个补丁,但仍然没有进展。我们找到了 Oracle 文档(这里)来展示如何在“netmagr”的帮助下配置安全套接字层和添加密码套件,但最终我知道这仅适用于 oracle DB 连接,但它没有影响。现在的问题是?1.如何解决DBMS_LDAP.open_ssl的“SSL握手失败”?我们如何为 DBMS_LDAP.open_ssl 设置不同的密码套件?2. 任何使用 LDAPS 的替代 PL/SQL 包?或者我们必须使用Java包并将其加载到数据库中?

oracle openssl plsql ldap oracle12c

6
推荐指数
1
解决办法
8226
查看次数

通过 wget 在 Linux 上下载 Oracle 数据库 12c 第 1 版 (12.1.0.2.0)

如何在 CentOS 6.9 版(最终版)上使用 wget 或 curl 下载 oracle 数据库?

command-line centos6 oracle12c

6
推荐指数
2
解决办法
1万
查看次数

oracle中的文件ORA_DUMMY_FILE.f是什么?

oracle版本:12.2.0.1

如您所知,这些是oracle中并行服务器的unix进程:

ora_p000_ora12c
ora_p001_ora12c
....
ora_p???_ora12c
Run Code Online (Sandbox Code Playgroud)

它们也可以在视图中看到:gv $ px_process.可以从那里获得每个并行服务器的spid.

然后我在这里寻找与te并行服务器相关的打开文件:

ls -l /proc/<spid>/fd
Run Code Online (Sandbox Code Playgroud)

我正在为几个与此相同的并行服务器获取大约500-10000个文件描述符:

991 -> /u01/app/oracle/admin/ora12c/dpdump/676185682F2D4EA0E0530100007FFF5E/ORA_DUMMY_FILE.f (deleted)
Run Code Online (Sandbox Code Playgroud)

我已经删除了它们:(实际上我已经创建了一个小脚本,因为它有数千个)

gdb -p <spid>
    gdb> p close(<fd_id>)
Run Code Online (Sandbox Code Playgroud)

但几个小时后,文件描述符又开始被创建(每天数百个)

如果它们没有被删除,那么最终达到linux限制并且任何并行查询都会抛出这样的错误:

ORA-12801: error signaled in parallel query server P001
ORA-01116: error in opening database file 132
ORA-01110: data file 132: '/u02/oradata/ora12c/pdbname/tablespacenaname_ts_1.dbf'
ORA-27077: too many files open
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何以及为什么要创建这个文件描述符,以及如何避免它?

编辑:添加了一些可能有用的信息.我已经测试过,当创建一个新的PDB时,会在其中创建一个目录DATA_PUMP_DIR(select*from all_directories),该目录指向:

/u01/app/oracle/admin/ora12c/dpdump/<xxxxxxxxxxxxx>
Run Code Online (Sandbox Code Playgroud)

linux目录也是创建的.还会创建一个文件描述符,指向新dpdump子目录中的ORA_DUMMY_FILE.f,就像最初描述的那样

lsof | grep "ORA_DUMMY_FILE.f (deleted)"

/u01/app/oracle/admin/ora12c/dpdump/<xxxxxxxxxxxxx>/ORA_DUMMY_FILE.f (deleted)
Run Code Online (Sandbox Code Playgroud)

这可能没问题,我面临的问题是指向ORA_DUMMY_FILE的文件描述符的持续增长达到linux限制.

oracle parallel-processing file-descriptor oracle12c

6
推荐指数
0
解决办法
413
查看次数

Oracle 12.2 - 替换 NOPARTITION 功能

我有 Oracle 版本 12.2.0.1.0

我们有通用脚本,它创建需要为不同对象重用的序列(通过重命名序列名称):

CREATE SEQUENCE NAME_SEQ MINVALUE 1 MAXVALUE 999999999
INCREMENT BY 1 START WITH 100 CACHE 200 NOORDER  NOCYCLE  NOPARTITION ;
Run Code Online (Sandbox Code Playgroud)

在我删除之前,此脚本无法处理以下错误NOPARTITION

   ORA-00933: SQL command not properly ended
Run Code Online (Sandbox Code Playgroud)

我在AskTom中发现12.2不支持NOPARTITION

以前版本的数据库中有很多内容不再相关/支持

为什么不支持它和/或此功能的替代品是什么?

如果没有替代品,您能否说明为什么不应使用此功能?

oracle database-partitioning ora-00933 oracle12c database-sequence

6
推荐指数
1
解决办法
4214
查看次数

Oracle:即使没有约束或索引,重命名列也会出现“ORA-00903:无效的表名”错误

RENAME COLUMN table-Name.simple-Column-Name TO simple-Column-Name
Run Code Online (Sandbox Code Playgroud)

当我尝试重命名列时,我在所有列上收到以下错误消息:

RENAME COLUMN EMP_NEW.EMPLOYEE_ID TO EMPLOYEEID
Error report -
ORA-00903: invalid table name
00903. 00000 -  "invalid table name"
*Cause:    
*Action:
Run Code Online (Sandbox Code Playgroud)

以下是版本

Oracle Database 12c Release 12.1.0.1.0 - 64bit Production
PL/SQL Release 12.1.0.1.0 - Production
"CORE   12.1.0.1.0  Production"
TNS for IBM/AIX RISC System/6000: Version 12.1.0.1.0 - Production
NLSRTL Version 12.1.0.1.0 - Production
Run Code Online (Sandbox Code Playgroud)

有什么建议如何解决这个问题吗?(注意我已经从一些现有表创建了结构,并且没有复制任何内容,即没有索引,没有任何约束,所以创建很简单)

sql oracle table-rename oracle12c

6
推荐指数
1
解决办法
2977
查看次数

为什么我们在 Oracle SQL 中需要 SELECT FOR UPDATE?

数据库将通过克服读写冲突(使用锁定)自动找出如何并行处理两个或多个事务(作为可序列化的计划)。默认情况下,它们之间是隔离的。

那么为什么我们仍然需要使用类似这样的语句来锁定数据库中的任何数据呢SELECT FOR UPDATE?为什么我们不能在交易块中进行我们想要的任何操作?

Begin transaction
//queries
//commit
End transaction
Run Code Online (Sandbox Code Playgroud)

sql oracle relational-database oracle12c

6
推荐指数
1
解决办法
3万
查看次数

来自 Cursor Oracle 的确定性函数调用不起作用

我创建了一个简单的确定性函数,并使用游标中的选择查询调用它,如下所示

CREATE TABLE TEMP
(dt DATE); 

INSERT INTO   TEMP
SELECT SYSDATE FROM DUAL CONNECT BY LEVEL<=3;   
INSERT INTO   TEMP
SELECT SYSDATE+1 FROM DUAL CONNECT BY LEVEL<=3;     

COMMIT;

--2 distinct values
SELECT DISTINCT dt from TEMP;
Run Code Online (Sandbox Code Playgroud)

包装功能

CREATE OR REPLACE PACKAGE dummy_fun
AUTHID CURRENT_USER
IS
    FUNCTION get_data(
                  p_date  IN DATE)
    RETURN DATE
    DETERMINISTIC;

END dummy_fun;
/


CREATE OR REPLACE PACKAGE BODY dummy_fun
IS
     FUNCTION get_data(
                  p_date IN DATE)
    RETURN DATE
    DETERMINISTIC
    IS
        
    BEGIN
         DBMS_OUTPUT.PUT_LINE('get_data with input (p_date=>'||p_date||' called)');
        
        RETURN p_date+1;

    END …
Run Code Online (Sandbox Code Playgroud)

oracle deterministic function oracle12c

6
推荐指数
1
解决办法
67
查看次数