Oracle客户端安装与配置

1、掌握安装oracle客户端方法

第一步  在Oracle官网搜索“oracle 19c”

第二步 选择第一个并下载

第三步 下载完成之后解压,注意暂时需要关闭腾讯管家和一些安全保护的软件,然后右击setup.exe,“以管理员身份运行”

第四步 稍等一下会出现如下所示界面,选择“创建并配置单实例数据库”单选项,再点击“下一步”按钮

第五步 再选择该界面中的“桌面类”单选项,再点击“下一步”按钮

第六步 再选择“使用Windows内置账户”单选项,点击“下一步”按钮

第七步 在弹出的对话框中选择“是”

第八步 选择“数据库版本”为“标准版”,“全局数据库名”可以任意取,“口令”就是设置密码,(全局数据库名和口令要记住,我自己的全局数据库名是orcl,口令是Sa123456)取消勾选“创建为容器数据库”

第九步 记住“Oracle系统标识符(SID)”,(使用Oracle连接工具的时候需要用到),最后点击安装按钮

 2、掌握配置oracle客户方法

第一步 打开开始菜单,找到“Net Configuration Assistant”并点击

选择“命名方法配置”,然后点击“下一步”

此时确保“选定的命名方法”一栏中包含“本地命名”和“轻松连接命名“,然后点击下一步

第二步 选择“本地Net服务名配置”,点击下一步

选择“添加”选项,点击下一步

设置服务名为sorcl,点击下一步

选择TCP,点击下一步

在主机名处填写需要远程连接的IP地址(老师的是10.6.19.227),选择“使用标准端口号1521”,点击下一步

点击“是,进行测试”,下一步

点击“更改登录”,输入用户名和密码(我的用户名和密码都是s加学号),输入之后,显示“==测试成功==”后,点击下一步

设置网络服务名(可以自己任意取,我的是sorcl,要记住这个服务名,之后使用命令连接服务器的时候要用到),再点击下一步,然后会出现一个“是否配置另一个服务器”的界面,点击“”。最后点击下一步,完成。

3、通过简单操作验证死锁现象

3.1利用sqlplus连接上服务器

输入“sqlplus”后要求输入用户名和口令,用户名是s加学号@之前取的网络服务器名,口令是s加学号,(输入口令时光标不会移动,建议先写在记事本里再复制粘贴过来,粘贴之后口令不会有显示,直接回车即可),显示如下图所示即成功登录。

3.2进行简单查询操作

select table_name from user_tables;

desc emp;

3.3死锁现象

执行导致死锁的语句:

1、用sqlplus连接数据库,执行

UPDATE dept SET loc='LOUDI' WHERE deptno = 40;

2、用SQL DEVELOPER连接数据库,执行

UPDATE emp SET deptno =40 WHERE ename LIKE 'S%';

UPDATE dept SET loc = 'BEIJING' WHRE deptno = 40;

3、返回SQLPLUS ,执行

UPDATE emp SET deptno=10 WHERE ename LIKE 'S%';

分析死锁原因:

两个不同的会话(一个通过sqlplus,另一个通过SQL DEVELOPER)执行了以下操作:

  1. 会话A (sqlplus) 执行了 UPDATE dept SET loc='LOUDI' WHERE deptno = 40; 这将锁定部门编号为40的DEPT记录。

  2. 会话B (SQL DEVELOPER) 首先执行了 UPDATE emp SET deptno=40 WHERE ename LIKE 'S%'; 这将更新ename以'S'开头的员工的deptno字段为40。由于emp表中的deptno字段是外键,引用了dept表的deptno,因此在修改emp表时,Oracle数据库可能会获取dept表上deptno=40的一些行级锁(具体取决于数据库的隔离级别和外键约束设置),以确保参照完整性。

  3. 紧接着,会话B试图执行 UPDATE dept SET loc='BEIJING' WHERE deptno = 40; 这个操作需要对同一个deptno=40的DEPT记录进行更新,但由于会话A已经锁定了这条记录,所以会话B会被阻塞,等待会话A释放锁。

  4. 同样地,当会话A尝试执行 UPDATE emp SET deptno=10 WHERE ename LIKE 'S%'; 时,它需要再次访问已经被会话B修改过的那些emp记录,并可能需要获得与会话B持有的那些emp记录相关的锁。这时,因为会话B未提交事务且持有emp表的部分锁,会话A也会被阻塞,等待会话B释放相关资源锁。

这样就形成了循环等待:会话A等待会话B释放DEPT表的锁以便完成其事务,而会话B又等待会话A释放EMP表的锁以便完成其事务。这就构成了死锁。

避免此类死锁的方法包括:

  • 资源排序策略:确保所有事务按照同一顺序访问资源可以减少死锁的发生。例如,所有事务都首先更新EMP表再更新DEPT表,或者反之亦然。

  • 事务最小化:尽量减小事务的范围和执行时间,尽快提交或回滚事务,减少持有锁的时间。

  • 使用适当的隔离级别:选择较低的隔离级别可能允许更多的并发,但也可能导致更多的锁竞争和数据不一致性;选择较高的隔离级别可能降低死锁的可能性,但可能会增加锁的数量和持续时间。

  • 死锁检测与自动解决:大多数现代数据库管理系统如Oracle都有内置的死锁检测机制,一旦检测到死锁,会选择其中一个事务进行回滚以打破死锁循环。

  • 显式锁定:在某些情况下,通过显式控制锁定模式和范围也可以帮助管理死锁风险,但这种方法通常更复杂,并需要谨慎设计和实现。

  • 预定义事务执行顺序:如果业务逻辑允许,可以通过预定义并发进程的执行顺序来避免特定的死锁情况。

  • 定期检查和超时处理:设置事务超时,在超时时自动回滚事务,这有助于防止长期存在的死锁。

  • 21
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要配置Oracle客户端与服务器进行连接,您需要执行以下步骤: 1. 安装Oracle客户端:下载并安装适用于您操作系统的Oracle客户端软件。确保选择与服务器版本匹配的客户端软件。 2. 配置Oracle网络:在Oracle客户端安装目录中,找到`network/admin`目录。在该目录下创建一个名为`tnsnames.ora`的文件(如果文件已存在,请打开它)。 3. 编辑tnsnames.ora文件:使用文本编辑器打开tnsnames.ora文件,并添加以下内容: ``` <服务名> = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <服务器IP地址>)(PORT = <端口号>)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = <数据库服务名>) ) ) ``` 替换`<服务名>`为您自定义的服务名,`<服务器IP地址>`为您的服务器的IP地址,`<端口号>`为数据库监听的端口号,`<数据库服务名>`为您的数据库的服务名。 4. 测试连接:打开命令提示符(Windows)或终端(Linux/OS X),运行以下命令测试连接: ``` sqlplus <用户名>/<密码>@<服务名> ``` 替换`<用户名>`、`<密码>`和`<服务名>`为您的数据库登录凭据和服务名。 如果成功连接到数据库,则配置完成。如果出现错误,请检查连接字符串和网络配置,并确保服务器上的监听程序正在运行。 请注意,这只是基本的配置步骤。根据您的实际环境和需求,可能需要进行其他配置和调整。建议参考Oracle官方文档或咨询数据库管理员获取更详细的配置信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LUSAIQUN637

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值