标签: sqlplus

从 SQLPLUS 更新包

我正在尝试更新 Oracle 中的一个包,来自 SQL Server 这一直令人困惑。

我编写了一个批处理文件,它首先运行.spec文件,然后运行.body文件,但即使手动运行它也不起作用。

我使用这个语法:

sqlplus username/password@databasename @c:\temp\myfile.spec
sqlplus username/password@databasename @c:\temp\myfile.body
Run Code Online (Sandbox Code Playgroud)

当我回到 Sql Developer 时,我可以查看包中的存储过程,发现它们尚未更新。

为什么我的软件包没有更新?

oracle plsql sqlplus

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

获取已建立的 Oracle 11 连接的 IP 地址

在开发过程中,我发现数据库有大量活动连接:

SELECT username, COUNT(*) FROM v$session GROUP BY username;
Run Code Online (Sandbox Code Playgroud)

为了找到真正保持连接的人,我想获取 IP 地址列表。

在一般网络搜索和阅读官方文档期间,我构建查询:

SELECT username, seconds_in_wait, machine, port, terminal, program, module, service_name
  FROM v$session
  WHERE type = 'USER';
Run Code Online (Sandbox Code Playgroud)

其中machine最重要的部分是select. 但不幸的是,machine字段显示客户端操作系统已知的主机名

互联网上充斥着使用UTL_INADDR.GET_HOST_ADDRESS 的建议,但这不适用于我的情况。首先是因为ORA-24247: 网络访问被访问控制列表 (ACL) 拒绝,其次是因为客户端操作系统主机名通常在/etc/hostname中定义,并且不可用于我们 Intranet 中的 DNS 服务器...

任何其他方式检索 Oracle DB 的打开会话的 IP(数据库实例在任何情况下都保存有关其套接字的信息...)。

更新

我在受信任的 Intranet 下,但网络层次结构未知。

我尝试查找哪些应用程序使用我的表(几个应用程序服务器,我不知道所有这些)。其中一些过度使用连接,需要修复。但首先应该确定它们...

oracle sqlplus ora-24247

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

仅为 SQL*Plus 设置 NLS_LANG

NLS_LANG在注册表中设置了我的本地语言。CMD 无法显示我当地语言的字符,所以我看到了 jibrish。我说的是来自客户端的提示而不是实际数据,例如错误消息。

SQL> conn scott/tiger
???ß°.
Run Code Online (Sandbox Code Playgroud)

我需要将客户端的设置保留在本地 NLS 中,因为其他程序依赖于它。

我已经尝试添加$set NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252glogin,但显然它不起作用,因为脚本仅在 sql*Plus 已经启动后执行。

我的问题是,有没有什么方法NLS_LANG可以AMERICAN_AMERICA.WE8MSWIN1252 为 SQL*Plus设置to ?

oracle sqlplus

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

如何强制 SQLPLUS 在新行上输出每一行

请问这里出了什么问题?

RETVAL=`sqlplus -s user/pass@DB <<EOF
SET TRIMSPOOL ON PAGESIZE 0 COLSEP , FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF              
SELECT process_id, source, destination, type FROM table WHERE process_id IN ('123','456');
EXIT;
EOF`
if [ -z "$RETVAL" ]; then
  echo "No rows returned from database"
  exit 0
else
  echo $RETVAL
fi
Run Code Online (Sandbox Code Playgroud)

输出是:

123,a c,2 456,a c,5
Run Code Online (Sandbox Code Playgroud)

并且应该是:

123, a, c, 2
456, a, c, 5
Run Code Online (Sandbox Code Playgroud)

oracle sqlplus output

4
推荐指数
1
解决办法
5097
查看次数

在 emacs 中使用 sqlplus 时如何断开与数据库的连接?

我正在尝试在 Emacs 中使用 sqlplus。效果很好。但我不知道一旦启动 sqlplus 会话,如何断开与数据库的连接。

我正在使用 sqlplus 模式:http://www.emacswiki.org/emacs/SqlPlusMode

sql oracle emacs sqlplus

4
推荐指数
1
解决办法
9461
查看次数

SQLPlus:在脚本中使用特殊字符作为密码

我有密码中的特殊字符问题 - '@'。我不知道如何将带有这个特殊字符的密码传递给脚本文件并使用 sqlplus 连接的问题。

例如,我有用户“test_user”,密码为“temp123@”。对于通过 sqlplus 登录,我使用以下字符串进行转义:sqlplus test_user/\"temp123@\"@some-db:1521/SID

它运作良好。对于我的情况,我需要将密码作为 sql 脚本的参数传递。例如,我有以下脚本进行连接(实际上是使用几对登录名/密码来一次更新多个用户的脚本):

-- @deploy.sql
connect &&2./&&3.@&&1.
Run Code Online (Sandbox Code Playgroud)

失败是因为 sqlplus 无法正确解释带有“@”的密码。我尝试了许多来自谷歌的转义建议,但其中大部分适用于 sqlplus 调用时的连接字符串。对于我的情况,它需要传递给脚本的参数。

sqlplus

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

在 bash 中,heredoc 内部函数返回语法错误

我有以下功能:

#!/bin/bash

get_instance{
dbname=$(sqlplus -s / as sysdba<<EOF
set pages 0
set feedback off
select name from v\$database;
exit;
EOF)

echo $dbname

}

get_instance
Run Code Online (Sandbox Code Playgroud)

它似乎工作。在错误消息的中间,我得到了我的dbname,但仍然返回一个语法错误。

 oracle@testdb01:db01:/home/oracle/
 > ./test.sh
 ./test.sh: line 3: get_instance{: command not found
 DB01
 ./test.sh: line 11: syntax error near unexpected token `}'
 ./test.sh: line 11: `}'
Run Code Online (Sandbox Code Playgroud)

如果我完全删除函数调用,我会得到没有错误的结果:

dbname=$(sqlplus -s / as sysdba<<EOF
set pages 0
set feedback off
select name from v\$database;
exit;
EOF)
echo $dbname

oracle@testdb01:db01:/home/oracle
> ./test.sh
DB01
Run Code Online (Sandbox Code Playgroud)

我需要做什么才能让它在函数中工作?

编辑:

以下建议在 EOF 标签后放置括号并添加 …

variables bash sqlplus heredoc solaris-10

4
推荐指数
1
解决办法
1990
查看次数

sqlplus 中的 -s 选项是做什么用的?

对 shell 脚本有点陌生,想知道在 shell 脚本中 -s 选项 [sqlplus -s] 的使用。

提前致谢。

shell sqlplus

4
推荐指数
1
解决办法
9646
查看次数

找不到命令- bash : sqlplus:

我正在尝试在 Oracle 数据库 docker 容器(for Windows 10)中使用 sqlplus 。

给出的命令:

"docker run -d -p 8080:8080 -p 1521:1521 --name OracleDB store/oracle/database/enterprise:12.2.0.1"
"docker start OracleDB"
"docker exec -it OracleDB bash"
"sqlplus / as sysdba"
Run Code Online (Sandbox Code Playgroud)

现在我收到错误消息:

"bash: sqlplus: command not found"
Run Code Online (Sandbox Code Playgroud)

图像01

图像02

oracle sqlplus docker

4
推荐指数
1
解决办法
3890
查看次数

Oracle SQLPlus:没有行号的回声?

我正在开发一个解决方案,其中多个 SQL 和 PL/SQL 脚本通过 SQL*Plus 以批处理方式一起运行。

我在脚本中的相关点声明SET ECHO OFF;SET ECHO ON;以输出相关代码。

目前输出看起来像这样:

SQL> DECLARE
  2      ct number := 0;
  3      ctChanges number := 0;
  4  
  5  BEGIN
  6      select count(*) into ct from ...
  7  (...rest of code block...)
"some specific status message"
Commit executed.
Run Code Online (Sandbox Code Playgroud)

我们将此输出作为运行日志保存在我们的构建环境中,但也可以作为纯文本文件访问它。

然而,这种格式的一个缺点是,如果我想复制代码的某个部分并在 IDE(如 Toad 或 SQL Developer)中再次运行它,则很难排除行号。

是否可以告诉 SQL*Plus 输出上述代码,但不包括行号?

sql oracle logging plsql sqlplus

4
推荐指数
1
解决办法
759
查看次数

标签 统计

sqlplus ×10

oracle ×7

plsql ×2

sql ×2

bash ×1

docker ×1

emacs ×1

heredoc ×1

logging ×1

ora-24247 ×1

output ×1

shell ×1

solaris-10 ×1

variables ×1