plsql怎么连接linux上的oracle19c
时间: 2023-05-01 15:05:14 浏览: 842
可以使用PL/SQL Developer或者Oracle SQL Developer等工具连接linux上的Oracle 19c数据库。需要确认Oracle 19c数据库已经在linux上成功安装和配置。同时也需要确保linux系统和数据库间的网络连接正常,如IP地址和端口等配置正确。
相关问题
plsqldeveloper连接虚拟机oracle19c
### 使用 PL/SQL Developer 连接到运行在虚拟机上的 Oracle 19c 数据库
为了成功配置并使用 PL/SQL Developer 连接至位于虚拟机中的 Oracle 19c 实例,需遵循一系列特定设置。
#### 设置网络连接参数
确保主机与虚拟机之间的网络通信正常工作。通常情况下,在虚拟机软件中采用桥接模式或 NAT 模式可以实现这一点。这一步骤对于建立从开发机器到目标数据库服务器的有效 TCP/IP 连接至关重要[^1]。
#### 安装客户端工具包
如果尚未完成,则应在本地计算机上安装适用于 Windows 的 Oracle Instant Client 或者其他兼容版本。此操作提供必要的驱动程序来支持应用程序层面上的数据交换过程[^2]。
#### 创建 TNSNAMES.ORA 文件条目
编辑 `$ORACLE_HOME/network/admin/tnsnames.ora` 文件以定义一个新的服务名指向远程数据库实例:
```plaintext
MY_ORA_DB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = vm_ip_address)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = my_service_name)
)
)
```
上述模板里的 `vm_ip_address` 和 `my_service_name` 应替换为实际的 IP 地址和服务名称。
#### 配置监听器
确认远端 Linux 上面已经启动了 Listener,并且它正在侦听默认端口(通常是 1521)。可以通过命令行检查状态:
```bash
lsnrctl status
```
该指令会返回当前活动的服务列表以及它们对应的地址信息。
#### 建立新的数据库连接
打开 PL/SQL Developer 后转到 "Tools" -> "New Connection..." ,输入如下详情:
- **Connection Name**: 自定义描述符用于识别此次链接;
- **User name & Password**: 登录凭证;
- **Role**: 如果适用的话可以选择 SYSDBA 权限级别;
- **Connect String**: 利用之前创建好的 TNS 名字或者直接指定 `(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=vm_ip_address)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=my_service_name)))`.
点击 OK 即可保存这些设定以便后续调用。
oracle19c后台执行sql
<think>我们正在讨论Oracle 19c中如何在后台执行SQL语句。根据用户需求,我们需要找到在后台执行SQL的方法,这样用户可以在不保持会话连接的情况下让SQL长时间运行。
在Oracle数据库中,通常我们使用前台会话执行SQL,但如果用户断开连接,会话可能会终止。因此,我们需要一种方法让SQL在后台持续运行,即使客户端断开连接。
常见的解决方案包括:
1. 使用DBMS_SCHEDULER创建作业,让作业在后台运行SQL。
2. 使用nohup(在Linux/Unix环境下)或类似工具在操作系统层面保持进程运行,但这种方法通常用于运行SQL脚本(如通过SQL*Plus执行脚本),而不是直接执行单条SQL。
3. 使用自治事务(Autonomous Transaction)来提交独立事务,但这并不直接解决后台执行的问题。
最符合Oracle数据库管理的方式是使用DBMS_SCHEDULER包来创建作业。作业一旦创建,将由Oracle后台进程执行,不受客户端连接的影响。
步骤:
1. 创建作业(Job)来执行SQL语句。
2. 设置作业属性,如是否立即启用等。
示例:
假设我们要在后台执行一条更新语句:UPDATE employees SET salary = salary * 1.1 WHERE department_id = 10;
我们可以创建一个作业来执行它:
```sql
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'update_salary_job',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN UPDATE employees SET salary = salary * 1.1 WHERE department_id = 10; COMMIT; END;',
start_date => SYSTIMESTAMP,
enabled => TRUE
);
END;
/
```
注意:这里我们使用了PL/SQL块作为作业动作(job_action),并在其中包含了要执行的SQL语句以及一个COMMIT(如果SQL需要提交的话)。作业创建后立即启用(enabled=>TRUE),所以它会立即开始执行。
但是,如果SQL语句执行时间很长,我们希望它能在后台运行而不需要用户等待。使用DBMS_SCHEDULER创建的作业会在后台执行,用户提交作业后可以断开连接。
另外,我们也可以使用DBMS_JOB(旧的方式,但在19c中仍然可用),但Oracle推荐使用DBMS_SCHEDULER。
使用DBMS_JOB的示例:
```sql
DECLARE
job_id NUMBER;
BEGIN
DBMS_JOB.SUBMIT(
job => job_id,
what => 'BEGIN UPDATE employees SET salary = salary * 1.1 WHERE department_id = 10; COMMIT; END;'
);
COMMIT;
END;
/
```
但注意:DBMS_JOB需要设置JOB_QUEUE_PROCESSES参数大于0(默认是0,所以需要修改)。
在Oracle 19c中,DBMS_SCHEDULER是更现代且功能更强大的调度工具,因此建议使用它。
另外,用户可能希望立即执行一条SQL并让它在后台运行,而不需要创建作业对象。但是,在Oracle中,没有直接相当于Unix“后台运行”(&)的命令。因此,创建调度作业是标准做法。
还有一种方法:使用异步提交(但异步提交并不保证SQL在后台运行,它只是不等待提交完成)。所以不是解决后台执行的方法。
因此,总结:使用DBMS_SCHEDULER创建一次性作业来执行SQL语句是推荐的方法。
引用说明:
在之前的引用[1]和[2]中,并没有直接关于后台执行SQL的内容,所以我们不直接引用它们。但根据Oracle数据库的一般知识,我们可以给出上述方案。
相关问题:
§§相关问题§§
1. 如何查看在Oracle后台作业的执行状态?
2. 如何终止一个正在后台运行的作业?
3. 在Oracle中,除了DBMS_SCHEDULER,还有哪些方式可以执行后台任务?</think>### 在 Oracle 19c 后台执行 SQL 语句的方法
在 Oracle 19c 中,要在后台执行 SQL 语句(即不阻塞当前会话且允许断开连接),主要有以下两种标准方法:
---
#### 方法 1:使用 `DBMS_SCHEDULER` 创建作业(推荐)
这是 Oracle 官方推荐的后台任务执行方式,适用于计划任务或一次性后台任务。
```sql
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'background_sql_job', -- 作业名称
job_type => 'PLSQL_BLOCK', -- 作业类型
job_action => 'BEGIN
UPDATE employees SET salary = salary*1.1;
COMMIT;
END;', -- 要执行的SQL/PLSQL
enabled => TRUE, -- 立即启用
auto_drop => TRUE -- 完成后自动删除作业
);
END;
/
```
**特点**:
- 作业由后台进程 `cjq0` 和 `jnnn` 执行
- 可通过 `DBA_SCHEDULER_JOBS` 视图监控状态
- 支持日志记录和错误处理
- 执行完成后自动清理(`auto_drop=TRUE`)
---
#### 方法 2:使用 `DBMS_JOB`(传统方式)
适用于简单任务,语法更简洁:
```sql
DECLARE
job_id NUMBER;
BEGIN
DBMS_JOB.SUBMIT(
job => job_id, -- 作业ID
what => 'BEGIN
INSERT INTO audit_table VALUES(SYSDATE);
COMMIT;
END;', -- 要执行的SQL
next_date => SYSDATE, -- 立即执行
interval => NULL -- 仅执行一次
);
COMMIT;
END;
/
```
**注意事项**:
1. 需确保 `JOB_QUEUE_PROCESSES` 参数 > 0:
```sql
ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 10; -- 启用后台作业进程
```
2. 通过 `DBA_JOBS` 视图监控作业状态
---
#### ⚠️ 重要补充说明
1. **会话保持**:两种方法均不需要用户会话保持连接
2. **权限要求**:
```sql
GRANT CREATE JOB TO your_user; -- 必须授予作业创建权限
```
3. **日志查看**:
```sql
SELECT job_name, status, error#
FROM DBA_SCHEDULER_JOB_RUN_DETAILS
WHERE job_name = 'BACKGROUND_SQL_JOB';
```
4. **终止作业**:
```sql
EXEC DBMS_SCHEDULER.STOP_JOB('background_sql_job');
```
---
### 其他替代方案(特定场景)
- **脚本层后台执行**:在操作系统层使用 `nohup` 启动 SQL*Plus
```bash
nohup sqlplus user/pass@db @your_script.sql &
```
- **自治事务**:仅适用于独立事务(不解决会话断开问题)
```sql
PROCEDURE background_proc IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
UPDATE sales SET status='PROCESSED';
COMMIT;
END;
```
> 📌 **建议**:对于生产环境,优先选择 `DBMS_SCHEDULER` 方案,它提供完整的监控、重试机制和错误处理能力[^1][^2]。
---
阅读全文
相关推荐
















