一些背景:我正在尝试连接到 Oracle 数据库。我有用户名、密码、IP 地址、端口和服务名称。我只能从 AWS 上的 Ubuntu EC2 实例访问此数据库,因为 Oracle 数据库位于另一个组织内部。因此,我无权访问这台机器的 DNS 主机名。
我从 Oracle 的网站下载了“Oracle Instant Client with SQL Plus”客户端包并将其解压缩到一个文件夹中。当我尝试运行它时,我收到以下消息:
ORA-24454: 未设置客户端主机名
如果我在输入“插入”命令时在 SQLPlus 中犯了错误,有没有办法可以将这些信息带回来以进行编辑?
不知何故,似乎 SQL*Plus(至少在 Windows 上)在调用 with@@以及路径以单点或双点开头时无法定位具有相对路径的脚本。
例如,在x:\some\whereI下有以下目录结构:
script.sql
main-dir\main-sub-dir
call-script.sql
script.sql
Run Code Online (Sandbox Code Playgroud)
即:两个script.sql但在不同的位置。
script.sql刚刚下的内容x:\some\where简直了
prompt SCRIPT root
Run Code Online (Sandbox Code Playgroud)
而另一个script.sql的内容是
prompt SCRIPT main-dir/main-subdir
Run Code Online (Sandbox Code Playgroud)
call-script.sql 阅读
@@script.sql
@ script.sql
Run Code Online (Sandbox Code Playgroud)
如果我从 SQL*Plus 启动x:\some\where然后执行
@main-dir/main-sub-dir/call-scripts
Run Code Online (Sandbox Code Playgroud)
输出将是
SCRIPT main-dir/main-subdir
SCRIPT root
Run Code Online (Sandbox Code Playgroud)
这是意料之中的,因为单曲@应该从 SQL*Plus 的启动位置@@搜索路径,并且应该从包含脚本的目录中搜索路径。
现在,如果我call-scripts.sql这样改变:
@@./script.sql
@ ./script.sql
Run Code Online (Sandbox Code Playgroud)
double@@似乎改变了它的行为,因为它从 SQL*Plus 开始的位置搜索路径,现在输出将是
SCRIPT root
SCRIPT root
Run Code Online (Sandbox Code Playgroud)
这不是我所期望的。
这种行为是否记录在某处,更重要的是,我必须如何更改call-scripts.sql才能@@../../other-dir/other-sub-dir/script正确调用相对路径 ( …
我想写一个简单的 tail -f实用程序来“跟踪”数据库中某些数字的进度:
create or replace function tail_f return varchar2_tab pipelined as
n number;
begin
loop
exit when ...
select count(*) into n from ... where ...;
pipe row(sysdate || ' n= ' || n);
dbms_lock.sleep(60);
end loop;
return;
end tail_f;
Run Code Online (Sandbox Code Playgroud)
然后我想select * from table(tail_f)在 SQL*Plus 中。
为了一一获取行,我SET ARRAYSIZE 1. 然而,记录(第一个除外)是成对获取的。
对此是否有解释,以及如何在通过管道传输后立即获取记录?
我在云 Oracle Linux 环境上安装了 Sql*PLUS,以便访问远程数据库。我使用这里提供的安装说明作为答案:https : //stackoverflow.com/questions/23488394/how-to-install-sql-plus-client-in-linux
我的连接字符串是正确的,但出现错误
ERROR: ORA-12154: TNS:could not resolve the connect identifier specified
我试图通过查看 my 来解决这个问题tnsnames.ora,但它不存在,并且连接到我的路径$ORACLE_HOME没有子文件夹“ /network/admin/”。为了解决这个问题,我创建了两个文件夹并tnsnames.ora在 newadmin/中创建了一个包含我的连接字符串的文件。不幸的是,我仍然遇到同样的错误。
我的新tnsnames.ora文件的路径是:
/usr/lib/oracle/11.2/client64/network/admin/tnsnames.ora
作为参考,我的连接字符串的结构如下:
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST= asdasdasd.com)(PORT=1524))
(CONNECT_DATA =
(SID = AARCER1)
)
)
Run Code Online (Sandbox Code Playgroud)
我输入终端的命令是:
sqlplus "userName/myPassword@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=asdasdasd.com)(PORT=1524))(CONNECT_DATA=(SID=AARCER1)))"
我应该怎么做才能解决这个错误?
我想通过 sqlplus 使用文本文件中提供的所有参数向 Oracle 发出参数化。有没有办法做到这一点?该查询包含的参数超出了提示人员的合理范围,我们希望在为此输入参数时消除用户错误。
我们需要发出参数化查询的原因是,我们看到直接 sql 语句和在我们的应用程序中作为参数化查询发出的相同查询之间的性能存在巨大差异。我们希望从链中删除任何应用程序代码,并且仅使用 Oracle 工具就可以明显看出差异。
对于自动化任务,我非常想运行一些 SQL 脚本并确保sqlplus在任何情况下都不会挂起,即:
set define off,因为其中一些脚本需要接受命令行参数解决了&1当脚本exit;末尾不包含 an 时,它不能“挂起” 。
已解决:我认为现在我可以通过将 sql-script 包装在辅助“调用者脚本”中来实现这一点。即,调用者脚本调用另一个脚本,@然后有一个固定的exit;。另一个脚本不需要那样退出。
我怎样才能用 Oracle(和sqlplus或其他东西)做到这一点?
Oracle 安装在一台服务器上,我在sqlplus另一台(应用程序)服务器上运行。我最近遇到了sqlplus做任何事情的问题;它只是旋转,即使被要求打印自己的帮助或版本信息,它也会消耗 99% 的 CPU。
sqlpluscronjob在过去的几年里,每天都在同一个盒子上运行良好。我还在需要时临时在命令行下直接运行它。sqlplus运行的盒子只包含 oracle 客户端文件,它从未安装过完整的数据库。
上周,cron 作业停止工作,ps输出显示几个sqlplus仍在运行的实例,但没有数据库活动。我尝试sqlplus从命令行运行,但它挂了。我杀死了所有旧sqlplus实例并sqlplus再次尝试,它似乎仍然挂起。没有错误信息,没有输出。如果我给它完全编造的参数、TNS 条目或任何东西,它甚至不会抱怨。
这些是我尝试过的命令,它们sqlplus只是挂起并且不会发出错误、故障代码或任何可见的生命迹象:
user@server:~ $ sqlplus
user@server:~ $ sqlplus -V
user@server:~ $ sqlplus -H
user@server:~ $ sqlplus /NOLOG
user@server:~ $ sqlplus -invalidoption
user@server:~ $ sqlplus -invalidoption /NOLOG
Run Code Online (Sandbox Code Playgroud)
而且当然:
user@server:~ $ sqlplus -s dbuser/dbpassword@tnsid /some/script.sql
Run Code Online (Sandbox Code Playgroud)
从下面可以看出,oracle文件已经很长时间没有变化了......
user@server:~ $ ls -ld $(which -a sqlplus)
-rwxr-xr-x 1 oracle oracle 12896 Apr 15 …Run Code Online (Sandbox Code Playgroud) 在这个网络中有与问题中给出的错误消息相关的类似问题的提问和回答,但是这个问题与每个问题都略有不同。
我已经在我的 ubuntu 中安装了 oracle 12c 可以通过命令提示符成功连接到我的hr用户sqlplus hr/hr@pdborcl。
oracle@ubuntu:~$ sqlplus hr/hr@pdborcl
SQL*Plus: Release 12.1.0.2.0 Production on Mon Nov 16 21:57:24 2015
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Last Successful login time: Mon Nov 16 2015 21:24:32 +05:45
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
SQL>show user;
USER is "HR"
Run Code Online (Sandbox Code Playgroud)
然而,我试图轻松地使用 sqldeveloper。当我提供以下凭据时,在 sqldeveloper 中的创建连接选项中
我正在使用 Oracle sqlplus。我有以下查询:
SELECT fooID from foo MINUS
SELECT fooID from bar;
Run Code Online (Sandbox Code Playgroud)
我创建了两个非聚集 B+ 树索引。一个在fooID表的字段中foo,一个在表的字段fooID中bar。之后,我分析了两个表的统计信息:foo并bar使用EXPLAIN PLAN .... 但我明白了:
SELECT STATEMENT
MINUS
SORT UNIQUE
INDEX FAST FULL SCAN FOO_INDEX
SORT UNIQUE
INDEX FAST FULL SCAN BAR_INDEX
Run Code Online (Sandbox Code Playgroud)
这怎么可能呢?做的时候INDEX FAST FULL SCAN,因为索引是 B+ 树,系统不会取回它的元组排序吗?为什么需要这样做SORT UNIQUE(数据已经排序)?
sqlplus ×10
oracle ×9
oracle-10g ×2
oracle-11g ×2
ubuntu ×2
amazon-ec2 ×1
explain ×1
scripting ×1
sorting ×1