Tom*_*als 6 oracle parallel-processing file-descriptor oracle12c
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限制.