首页
归档
关于
Search
1
C服务器端
9 阅读
2
管道处理模型
9 阅读
3
数据结构与算法
8 阅读
4
EF 贪婪加载 , 延迟加载,显式加载
8 阅读
5
1.数据流图(下午题)
8 阅读
软件设计师笔记
.Net
Java
数据库
PHP
运维
前端
Python
中间件相关
云原生
架构设计
Search
标签搜索
websocket
科技新闻
Bi8bo
有钱终成眷属,没钱亲眼目睹
累计撰写
267
篇文章
累计收到
2
条评论
首页
栏目
软件设计师笔记
.Net
Java
数据库
PHP
运维
前端
Python
中间件相关
云原生
架构设计
页面
归档
关于
搜索到
9
篇与
的结果
2025-04-03
SQL 悲观锁
MySQL的SELECT ...for update悲观锁介绍 悲观锁是对数据被的修改持悲观态度(认为数据在被修改的时候一定会存在并发问题),因此在整个数据处理过程中将数据锁定。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在应用层中实现了加锁机制,也无法保证外部系统不会修改数据)。使用场景举例 商品goods表中有一个字段status,status为1代表商品未被下单,status为2代表商品已经被下单,那么我们对某个商品下单时必须确保该商品status为1。假设商品的id为1。如果不采用锁,那么操作方法如下: 123456//1.查询出商品信息selectstatus fromt\_goods whereid=1;//2.根据商品信息生成订单insert intot\_orders (id,goods\_id) values (null,1);//3.修改商品status为2update t\_goods setstatus=2; 上面这种场景在高并发访问的情况下很可能会出现问题。前面已经提到,只有当goods status为1时才能对该商品下单,上面第一步操作中,查询出来的商品status为1。但是当我们执行第三步Update操作的时候,有可能出现其他人先一步对商品下单把goods status修改为2了,但是我们并不知道数据已经被修改了,这样就可能造成同一个商品被下单2次,使得数据不一致。所以说这种方式是不安全的。使用悲观锁来实现 在上面的场景中,商品信息从查询出来到修改,中间有一个处理订单的过程,使用悲观锁的原理就是,当我们在查询出goods信息后就把当前的数据锁定,直到我们修改完毕后再解锁。那么在这个过程中,因为goods被锁定了,就不会出现有第三者来对其进行修改了。要使用悲观锁,我们必须关闭mysql数据库的自动提交属性。 123456789101112set autocommit=0; //设置完autocommit后,我们就可以执行我们的正常业务了。具体如下://0.开始事务begin;/begin work;/start transaction; (三者选一就可以)//1.查询出商品信息selectstatus fromt\_goods whereid=1 forupdate;//2.根据商品信息生成订单insert intot\_orders (id,goods\_id) values (null,1);//3.修改商品status为2update t\_goods setstatus=2;//4.提交事务commit;/commit work; 注:上面的begin/commit为事务的开始和结束,因为在前一步我们关闭了mysql的autocommit,所以需要手动控制事务的提交,在这里就不细表了。 上面的第一步我们执行了一次查询操作:select status from t_goods where id=1 for update;与普通查询不一样的是,我们使用了select…for update的方式,这样就通过数据库实现了悲观锁。此时在t_goods表中,id为1的那条数据就被我们锁定了,其它的事务必须等本次事务提交之后才能执行。这样我们可以保证当前的数据不会被其它事务修改。 注:需要注意的是,在事务中,只有SELECT ... FOR UPDATE 或LOCK IN SHARE MODE 相同数据时会等待其它事务结束后才执行,一般SELECT ... 则不受此影响。拿上面的实例来说,当我执行select status from t_goods where id=1 for update;后。我在另外的事务中如果再次执行select status from t_goods where id=1 for update;则第二个事务会一直等待第一个事务的提交,此时第二个查询处于阻塞的状态,但是如果我是在第二个事务中执行select status from t_goods where id=1;则能正常查询出数据,不会受第一个事务的影响。补充:MySQL select…for update的Row Lock与Table Lock 上面我们提到,使用select…for update会把数据给锁住,不过我们需要注意一些锁的级别,MySQL InnoDB默认Row-Level Lock,所以只有「明确」地指定主键,MySQL 才会执行Row lock (只锁住被选取的数据) ,否则MySQL 将会执行Table Lock (将整个数据表单给锁住)。举例说明: 数据库表t_goods,包括id,status,name三个字段,id为主键,数据库中记录如下; 注:为了测试数据库锁,我使用两个console来模拟不同的事务操作,分别用console1、console2来表示。例1: (明确指定主键,并且有此数据,row lock) console1:查询出结果,但是把该条数据锁定了 12setautocommit=0;SELECT * fromt\_goods whereid=1 forupdate; console2:查询被阻塞 console2:如果console1长时间未提交,则会报错例2: (明确指定主键,若查无此数据,无lock) console1:查询结果为空 12setautocommit=0;SELECT * fromt\_goods whereid=4 forupdate; console2:查询结果为空,查询无阻塞,说明console1没有对数据执行锁定 12setautocommit=0;SELECT * fromt\_goods whereid=4 forupdate;例3: (无主键,table lock) console1: 12setautocommit=0;SELECT * fromt\_goods wherestatus=1 forupdate; console2: 1select* fromperson wherestate=2 forUPDATE 查询阻塞,说明console1把表给锁住了.若console1长时间未提交,则返回锁超时。例4: (主键不明确,table lock) console1:查询正常 12setautocommit=0;SELECT * fromt\_goods whereid>1 forupdate; console2:查询被阻塞,说明console1把表给锁住了。 1select* fromperson whereid>=2 forUPDATE 以上就是关于数据库主键对MySQL锁级别的影响实例,需要注意的是,除了主键外,使用索引也会影响数据库的锁定级别。 举例:我们修改t_goods表,给status字段创建一个索引。例5: (明确指定索引,并且有此数据,row lock) console1: 12setautocommit=0;SELECT * fromt\_goods wherestatus=1 forupdate; console2:查询status=1的数据时阻塞,超时后返回为空,说明数据被console1锁定了例7: (明确指定索引,若查无此数据,无lock) console1:查询status=3的数据,返回空数据 12setautocommit=0;SELECT * fromt\_goods wherestatus=3 forupdate; console2:查询status=3的数据,返回空数据 1SELECT * fromt\_goods wherestatus=3 forupdate;
2025年04月03日
4 阅读
0 评论
0 点赞
2025-04-03
教程
这个比较详细在进行ISCSI添加时需要再客户机添加多路径IO支持启用ISCSI支持支持2012C:\database\stage\cvu\cvu_prereq <OPERATING_SYSTEM RELEASE="6.2"> <VERSION VALUE="3"/> <ARCHITECTURE VALUE="64-bit"/> <NAME VALUE="Windows server2012"/> <ENV_VAR_LIST> <ENV_VAR NAME="PATH" MAX_LENGTH="1023" /> </ENV_VAR_LIST> </OPERATING_SYSTEM>
2025年04月03日
5 阅读
0 评论
0 点赞
2025-04-03
Oracle DG主从方案
Oracle DG主从备份操作手册2024 年 09 月 23 日版本号修改日期修改人更新内容V1.02024.09.23肖霄 Oracle DG主从备份操作手册1、服务运行环境 51.1、数据库服务环境要求 51.2、应用服务器环境要求 52、Oracle 数据库安装 52.1、Oracle11g 主数据库安装 52.1.1、程序准备 52.1.2、安装步骤 5Oracle11g 从数据库安装 112.2.1、程序准备 112.2.2、安装步骤 113、安装位置 114、配置dataguard主从库 12主库操作检查数据库,开启归档模式,如下图所示: 12为备库添加日志组(在主库mount状态下执行) 133、主备库配置网络监听 144、重启监听服务 195、使用tnsping检查监听及服务命名 206、主备库创建相关目录,详述如下 227、为主备库准备参数文件 228、密码文件配置 259、 控制文件配置 2510、创建备库实例djl,在备库服务器执行创建 2511、主备库的启动 2512、使用rman连接主备库 2813、为备库备份参数文件 2814、将主库数据库复制到备库 2915、将备库设置为接受日志模式 295、 后期维护 306、启动从库,同步因停机未同步的归档日志 311、服务运行环境 1.1、数据库服务环境要求 ◇ Windows Server 2019 Datacenter (2台,一主一从)◇ 内网网络 1.2、应用服务器环境要求 ◇ Oracle11g64Bit 客户端环境 ◇ 网络运行环境(同时内外网网络,根据支付通道要求具 体进行确定) 2、Oracle 数据库安装 2.1、Oracle11g 主数据库安装 2.1.1、程序准备 ◇Oracle11g 64 位安装包 ◇Windows Server 2019 Datacenter 操作系统 2.1.2、安装步骤 (1)、将两个压缩文件解压至同一个文件夹目录中(例如:database)。(2)、解压完毕后,在该目录下打开 setup.exe,执行安装程序后会出现启 动安装的命令提示符,进入安装; (3)、稍等一会儿,就会出现以下安装步骤,取消复选框勾选,点击下 一步继续,并单击“是”继续 、之后出现以下安装框,默认点击“下一步”继续 、选择安装“服务器类”(6)、接下来进入安装配置,密码口令为大小写数字拼成的口令,否则, 就会提示警告(7)、点击下一步,在执行先决条件检查时,我们选择全部忽略即可 (8)、下一步,点击完成按钮即开始安装了 安装画面如下 、进度条到达 100 时则会出现以下对话框,并等待其配置完成主库安装完毕,下面是从库安装2. Oracle11g 从数据库安装 2.2.1、程序准备 ◇Oracle11g 64 位安装包 ◇Windows Server 2019 Datacenter 操作系统 2.2.2、安装步骤 注意:安装步骤基本和主库步骤一致,但是需要注意到,从库安装Oracle时,要选 仅安装数据库软件,其余步骤一致至此,两台机器的Oracle环境配置完成3、安装位置主库: oracle 软件:E:\app\Administrator\product\11.2.0\dbhome_1 数据库 orcl:E:\app\Administrator\oradata\orcl备库: oracle 软件:E:\app\Administrator\product\11.2.0\dbhome_1注:要明了数据库的安装位置以及数据库实例的安装位置,不管是走安装默认位置还是自定义位4、配置dataguard主从库 1. 主库操作检查数据库,开启归档模式如下图所示:连接数据库C:\Users\Administrator>sqlplus / as sysdba查看是否是归档模式SQL> archive log list关闭数据库SQL> shutdown immediate启动到mount状态SQL> startup mount开启归档模式SQL> alter database archivelog;开启强制日志模式SQL> alter database force logging;为备库添加日志组(在主库mount状态下执行)查看当前主库日志组:SQL> select from v$logfile order by group#;*在主库为备库添加日志组,结果如下:(这个路径请和上面语句查询出来的路径改成一样)SQL> alter database add standby logfile group 4 'E:\app\Administrator\oradata\orcl\redo04.log' size 50m;SQL> alter database add standby logfile group 5 'E:\app\Administrator\oradata\orcl\redo05.log' size 50m;SQL> alter database add standby logfile group 6 'E:\app\Administrator\oradata\orcl\redo06.log' size 50m;SQL> alter database add standby logfile group 7 'E:\app\Administrator\oradata\orcl\redo07.log' size 50m; SQL> select from v$logfile order by group#;*3、主备库配置网络监听修改文件listener.ora, tnsnames.ora它们的位置在E:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN目录下(根据实际安装位置)主库:listener.ora文件注意:空格字符也要对齐,否则报语法错误,(注意里面的盘符路径和服务器内网IP根据自己实际改)------------------------------------------------------------------------------------------------------# listener.ora Network Configuration File: E:\app\Administrator\product*11.2.0\dbhome_1\network\admin\listener.ora*# Generated by Oracle configuration tools.SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = E:\app\Administrator\product*11.2.0\dbhome_1)* (PROGRAM = extproc) (ENVS = "EXTPROC_DLLS=ONLY:E:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll") ) (SID_DESC = (GLOBAL_DBNAME = ORCL) (ORACLE_HOME = E:\app\Administrator\product\11.2.0\dbhome_1) (SID_NAME = ORCL) ) )LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.50)(PORT = 1521)) ) )ADR_BASE_LISTENER = E:\app\Administrator----------------------------------------------------------------------------------------------------------tnsnames.ora文件,注意:djl 为备数据库服务的IP地址----------------------------------------------------------------------------------------------------------# tnsnames.ora Network Configuration File: E:\app\Administrator\product*11.2.0\dbhome_1\network\admin\tnsnames.ora*# Generated by Oracle configuration tools.ORACLR_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) (CONNECT_DATA = (SID = CLRExtProc) (PRESENTATION = RO) ) )ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.50)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )djl = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.51)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = djl) ) )-------------------------------------------------------------------------------------------------备库:listener.ora文件# listener.ora Network Configuration File: E:\app\Administrator\product*11.2.0\dbhome_1\network\admin\listener.ora*# Generated by Oracle configuration tools.SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = E:\app\Administrator\product*11.2.0\dbhome_1)* (PROGRAM = extproc) (ENVS = "EXTPROC_DLLS=ONLY:E:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll") ) (SID_DESC = (GLOBAL_DBNAME = djl) (ORACLE_HOME = E:\app\Administrator\product*11.2.0\dbhome_1)* (SID_NAME = djl) ) )LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.51)(PORT = 1521)) ) )ADR_BASE_LISTENER = E:\app\Administratortnsnames.ora文件# tnsnames.ora Network Configuration File: E:\app\Administrator\product*11.2.0\dbhome_1\network\admin\tnsnames.ora*# Generated by Oracle configuration tools.ORACLR_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) (CONNECT_DATA = (SID = CLRExtProc) (PRESENTATION = RO) ) )djl = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.51)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = djl) ) )ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.50)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )4、重启监听服务主库,备库都执行C:\Users\Administrator> lsnrctl stopC:\Users\Administrator> lsnrctl start5、使用tnsping检查监听及服务命名主库C:\Users\Administrator>tnsping orclC:\Users\Administrator>tnsping djl备库C:\Users\Administrator>tnsping orclC:\Users\Administrator>tnsping djl最后提示返回OK即可成功配置连接建立6、主备库创建相关目录,详述如下主库创建目录:F:\oracle_db_arch\arch --归档日志位置F:\oracle_db_arch\arch_std --主库转为备库时,归档日志位置从库创建目录:F:\oracle_db_arch\arch ----归档日志位置F:\oracle_db_arch\arch_std --备库转为主库时,归档日志位置E:\app\Administrator\oradata\djl --数据文件位置E:\app\Administrator\admin\djl\adump --审计文件位置E:\app\Administrator\flash_recovery_area\djl\ONLINELOG --联机重做位置7、为主备库准备参数文件主库select from v$logfile order by group#;*SQL> create pfile from spfile;注:执行create语句之后,在E:\app\Administrator\product\11.2.0\dbhome_1\database目录下会出现文件INITorcl.ORA,用笔记本打开进行编辑主库INITorcl.ORA,根据实际情况修改盘符,文件夹不存在需要建立,否则可能导致无法启动orcl.__db_cache_size=1124073472orcl.__java_pool_size=16777216orcl.__large_pool_size=16777216orcl.__oracle_base='E:\app\Administrator'#ORACLE_BASE set from environmentorcl.__pga_aggregate_target=1040187392orcl.__sga_target=1543503872orcl.__shared_io_pool_size=0orcl.__shared_pool_size=352321536orcl.__streams_pool_size=0*.audit_file_dest='E:\app\Administrator\admin\orcl\adump'*.audit_trail='db'*.compatible='11.2.0.0.0'*.control_files='E:\app\Administrator\oradata\orcl\control01.ctl','E:\app\Administrator\flash_recovery_area\orcl\control02.ctl'*.db_block_size=8192*.db_domain=''*.db_name='orcl'*.db_recovery_file_dest='E:\app\Administrator\flash_recovery_area'*.db_recovery_file_dest_size=4102029312*.diagnostic_dest='E:\app\Administrator'*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'*.memory_target=2577399808*.open_cursors=300*.processes=150*.remote_login_passwordfile='EXCLUSIVE'*.undo_tablespace='UNDOTBS1'*.db_unique_name=orcl*.log_archive_config='dg_config=(orcl,djl)'*.log_archive_dest_1='LOCATION=F:\oracle_db_arch\arch valid_for=(online_logfiles,primary_role) db_unique_name=orcl'*.log_archive_dest_2='SERVICE=djl lgwr async affirm valid_for=(online_logfiles,primary_role) db_unique_name=djl'*.log_archive_dest_3='LOCATION=F:\oracle_db_arch\arch_std valid_for=(standby_logfiles,standby_role) db_unique_name=orcl'*.log_archive_dest_state_1='enable'*.log_archive_dest_state_2='enable'*.log_archive_dest_state_3='enable'*.fal_server=djl*.fal_client=orcl*.standby_file_management=auto*.db_file_name_convert=('E:\app\Administrator\oradata\djl','E:\app\Administrator\oradata\orcl')*.log_file_name_convert=('E:\app\Administrator\oradata\djl','E:\app\Administrator\oradata\orcl')将主库initorcl.ora复制到备库对应目录下并修改内容如下 备库修改文件名使用INITdjl.ORA根据实际情况修改盘符,文件夹不存在需要建立,否则可能导致无法启动orcl.__db_cache_size=1124073472orcl.__java_pool_size=16777216orcl.__large_pool_size=16777216orcl.__oracle_base='E:\app\Administrator'#ORACLE_BASE set from environmentorcl.__pga_aggregate_target=1040187392orcl.__sga_target=1543503872orcl.__shared_io_pool_size=0orcl.__shared_pool_size=352321536orcl.__streams_pool_size=0*.audit_file_dest='E:\app\Administrator\admin\djl\adump'*.audit_trail='db'*.compatible='11.2.0.0.0'*.control_files='E:\app\Administrator\oradata\djl\control01.ctl','E:\app\Administrator\flash_recovery_area\djl\control02.ctl'*.db_block_size=8192*.db_domain=''*.db_name='orcl'*.db_recovery_file_dest='E:\app\Administrator\flash_recovery_area'*.db_recovery_file_dest_size=4102029312*.diagnostic_dest='E:\app\Administrator'*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)','(address=(protocol=tcp)(host=192.168.2.51))(dispatchers=4)','(address=(protocol=ipc)(host=192.168.2.51))(dispatchers=2)'*.memory_target=2577399808*.open_cursors=300*.processes=150*.remote_login_passwordfile='EXCLUSIVE'*.undo_tablespace='UNDOTBS1'*.db_unique_name=djl*.log_archive_config='dg_config=(djl,orcl)'*.log_archive_dest_1='LOCATION=F:\oracle_db_arch\arch valid_for=(online_logfiles,primary_role) db_unique_name=djl'*.log_archive_dest_2='SERVICE=orcl lgwr async affirm valid_for=(online_logfiles,primary_role) db_unique_name=orcl'*.log_archive_dest_3='LOCATION=F:\oracle_db_arch\arch_std valid_for=(standby_logfiles,standby_role) db_unique_name=djl'*.log_archive_dest_state_1='enable'*.log_archive_dest_state_2='enable'*.log_archive_dest_state_3='enable'*.fal_server=orcl*.fal_client=djl*.standby_file_management=auto*.db_file_name_convert=('E:\app\Administrator\oradata\orcl','E:\app\Administrator\oradata\djl')*.log_file_name_convert=('E:\app\Administrator\oradata\orcl','E:\app\Administrator\oradata\djl')8、密码文件配置将主库的参数文件PWDorcl.ora复制到备库对应目录下,并重命名为PWDdjl.ora路径位置:E:\app\Administrator\product\11.2.0\dbhome_1\database控制文件配置使用查询语句SELECT name FROM v$controlfile; 查询到两个控制文件位置将主库的参数文件control01.ctl和control02.ctl复制到备库参数文件中指定位置下*如主库C:\app\Administrator\oradata\orcl\CONTROL01.CTL拷贝到备库C:\app\Administrator\oradata\djl\CONTROL01.CTL*,CONTROL02.CTL同理操作没有就要建文件夹注意备库是djl10、创建备库实例djl,在备库服务器执行创建C:\Users\Administrator>oradim -new -sid djl11、主备库的启动主库:登录sqlplus在showdown状态下创建参数文件查看oracle 启动状态SQL> select status from v$instance;关闭数据库SQL> shutdown immediate创建参数文件SQL> create spfile from pfile;启动数据库SQL> startup备库:登录sqlplus出现如下错误sqlplus / as sysdba使用命令set oracle_sid=djl解决创建参数文件SQL> create spfile from pfile;将数据库启动到nomount(必须是nomount状态)SQL> startup nomount12、使用rman连接主备库在主库执行:C:\Users\Administrator>rman target sys/123456@orcl auxiliary sys/123456@djl注意:连接前使用rman登录主备库做测试13、为备库备份参数文件RMAN> backup current controlfile for standby database;如果这部分执行报错需要修改归档日志的路径,默认路径存储大小为2G或者修改默认路径存储大小为500GSQL> alter system set db_recovery_file_dest_size=500G;系统已更改。参考:https://blog.csdn.net/mengxiang209/article/details/6936096https://www.cnblogs.com/andy6/p/5997410.htmlhttps://blog.csdn.net/weixin_34384557/article/details/89774544https://blog.csdn.net/weixin_34384557/article/details/89774544再重新执行backup current controlfile for standby database;即可14、将主库数据库复制到备库RMAN> duplicate target database for standby from active database;15、将备库设置为接受日志模式说明:此时,主库为open状态,备库为mounted 备库:在备库执行以下语句将备库修改为接收应用主库归档的模式SQL> alter database recover managed standby database disconnect from session;后期维护设置备库SQL> alter database mount standby database;*SQL> select sequence#,applied from V$archived_log where applied='YES';SQL> alter database recover managed standby database cancel*;*设置备库只读SQL> alter database open read only;SQL> alter database recover managed standby database using current logfile disconnect from session;说明:重启数据库后必须执行,这样数据才能*同步。*查看日志应用情况SQL> select sequence#,applied from V$archived_log where applied='IN-MEMORY'*;如果看到IN-MEMORY说明当前正在进行实时同步,如果最后一个是YES,也是正常的,说明当前操作为0SQL> select sequence#,applied from V$archived_log;*查询当前的保护模式SQL> select open_mode,database_role,db_unique_name,PROTECTION_MODE from v$database*;到此,oracle 11g dataguard 配置完毕。启动从库,同步因停机未同步的归档日志*SQL> shutdown immediate;SQL> startup nomount;SQL> alter database mount standby databas*e;*备库启用日志应用SQL> alter database recover managed standby database disconnect from session;SQL> select sequence#,applied from V$archived_log where applied='YES*';以只读方式启动从库*SQL> alter database open read only;SQL> alter database recover managed standby database using current logfile disconnect from session*;更改数据库恢复托管备用数据库取消停止应用日志SQL> alter database recover managed standby database cancel;注意,如果连接显示数据库未打开: 仅允许在固定表/视图中查询.使用 alter database open 命令操作ORA-01113: 文件 5 需要介质恢复ORA-01110: 数据文件 5: 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF'使用如下命令解决再打开SQL> recover datafile 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF'报错解决方案ORA-10456:cannot open standby database;media recovery session may be in progresshttps://blog.csdn.net/dbangelica/article/details/86217958
2025年04月03日
5 阅读
0 评论
0 点赞
2025-04-03
Oracle RAC 高可用集群
Oracle RVC 高可用集群2024 年 09 月 24 日版本号修改日期修改人更新内容V1.02024.09.24肖霄 集群规划(在所有节点执行)一、所有参与集群的机器需要双网卡上网节点名称Public网卡1Private网卡2VIP虚拟IP(分配网卡1 IP段的可用IP)SCAN名称SCAN IP地址(分配网卡1 IP段的可用IP)RACtest1192.168.12.131192.168.245.130192.168.12.132scan-vip192.168.12.134RACtest2192.168.12.130192.168.245.129192.168.12.133 二、系统配置2.1关闭防火墙两台服务器都需要关闭,以保证安装不受防火墙影响,比如两台服务器互相Ping。2.2修改计算机名称两台计算机分别命名为ractest1和ractest2,选择稍后重启.2.3修改计算机登录账号密码安装前,确认两台服务器的管理员密码一致,如果不一致,需要改成一致.设置虚拟内存16G以上3.4配置DEP3.5账户控制设置3.6允许远程连接在计算机-属性-远程设置中设置允许远程连接3.7环境变量配置右键“计算机”-“属性”-“高级系统设置”-“环境变量”中设置“TEMP”、“TMP”值为“%WINDIR%\temp”,本例为:“C:\Windows\temp”3.8修改注册表复制命令:reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "DisableDHCPMediaSense" /t REG_DWORD /d 1 /f reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP6\Parameters" /v "DisabledComponents" /t REG_DWORD /d 4294967295 /freg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "EnableLUA" /t REG_DWORD /d 0 /f执行完后重启一次节点3.9设置共享硬盘首先先把everyone权限给C盘,再进行后面的共享权限右键硬盘>>共享>>高级共享;设置C盘的共享,并设置共享权限为everyone两台服务器都要共享C盘(系统盘),如果Grid安装在c盘之外的其他盘,也要一起共享。确保两台服务器能通过网络相互访问对方的安装盘,设置完成之后可在文件资源管理器中的地址栏中输入(**计算机名,如\ractest1,\ractest2),如果能访问,说明共享成功需要关闭密码共享保护 网络设置在网络连接中,重命名网卡,公网网卡为public(网卡1),私网网卡为private(网卡2);两个节点都进行配置5.2配置网卡解析顺序(如果是低于Window 2016的版本,请配置,其他直接忽略这一步)点击网卡选中后,按快捷键“Alt-N”, 配置解析顺序为公网网卡 Public 在前,私网网卡 Private 在后,并且取消IPV6支持。5.3设置网络接口度量值右击网卡->属性->Internet 协议版本 4(TCP/IPv4)属性->高级,然后按下图设置(私有(private)300,公有(public)100)5.4 取消选中“在 DNS 中注册此连接的地址”1. 选择“公网(public)”网络接口2. 从右键菜单中选择“属性”3. 从“网络”选项卡中选择“Internet 协议版本4(TCP/IPv4)”4. 单击“属性”5. 从“常规”选项卡中单击“高级...”6. 选择“DNS”选项卡7. 取消选中“在 DNS 中注册此连接的地址”的单选按钮5.5修改每台机器的C:\Windows\System32\drivers\etc\hosts在最后面追加写入自己规划的IP,比如我的,自己修改下面的IP,复制进hosts文件#本机环路(这两个不用改) 127.0.0.1 localhost ::1 localhost#(节点1 的public IP)192.168.12.131 RACtest1#(节点2 的public IP)192.168.12.130 RACtest2#(节点1 的private IP)192.168.245.130 RACtest1-PRIV#(节点2 的private IP)192.168.245.129 RACtest2-PRIV#(节点1 的虚拟 IP)192.168.12.132 RACtest1-vip#(节点2 的虚拟 IP)192.168.12.133 RACtest2-vip#(集群IP)192.168.12.134 scan-vip5.6测试两点连通性两台主机RACtest1和RACtest2互相ping 公共主机名和专用节点名,看是否ping 的通,注意这时候的vip和scan-vip是ping 不通的两台机器分别在cmd输入ping RACtest1,ping RACtest25.7同步时间节点在 RACtest1服务器上运行命令:net time \RACtest1(查看 RACtest1的当前时间)然后在 RACtest1服务器上运行命令:net time \RACtest2 /set /y (设置 RACtest2时间与 RACtest1同 步)net time \RACtest1net time \RACtest2 --查看时间 修改操作系统参数,规避一些性能问题必须禁用 DHCP 媒体感知。请以管理员用户身份分别在两台机器运行在命令窗口中执行以下命令:netsh interface ipv4 set global dhcpmediasense=disabled netsh interface ipv6 set global dhcpmediasense=disabled使用以下命令验证更改:netsh interface ipv4 show globalnetsh interface ipv6 show global修改过程如下图所示:关闭默认的 SNP 功能netsh int tcp set global chimney=disablednetsh int tcp set global rss=disabled使用以下命令验证更改:netsh interface tcp show global根据ORACLE官方参考Doc ID 1384337.1,解决 section管理内存问题,该问题会导致WINDOWS数据库的监听无法工作,报错TNS-12531 TNS: Failed to allocate memory导入这个注册表文件(右键另存为到一个地方,再双击导入注册表)用以修复该问题本地安全策略中—“本地策略”—“安全选项”中的用户账户控制内容如下图选中的所示,为“不提示,直接提升”用户帐户控制:管理员批准模式中管理员的提升权限提示的行为 改为 不提示,直接提升由于11g rac没有明确支持IPV6,最好禁用掉操作系统的IPV6iSCSI多路径磁盘配置(这个配置只在存储服务器进行)添加iSCSI服务在iSCSI-Storage上添加iSCSI服务,选择添加角色和功能选择iSCSI目标服务器,然后下一步安装然后选到文件和存储服务-iSCSI,选择中间的新建iSCSI虚拟磁盘向导建立ISCSI磁盘(2块5GB,1块10GB,物理服务器上的硬盘容量远大于这个值,需要因地制宜一下)服务管理器内选择 文件和存储服务 iSCSI选择服务器(默认本机),键入自定义路径(用于存放虚拟磁盘文件),也可以使用按卷选择填写虚拟磁盘名称,路径中可以看到是作为虚拟磁盘文件名的.设置磁盘大小及类型新建iSCSI目标命名下添加通过ip来选择目标(ip填其他集群节点机器的IP,允许它来访问)不验证完成11.创建成功,重复三次新建三块盘Client客户端服务器设置(在两个节点服务器操作)添加多路径I/O功能安装完成后需要重启工具中选择MPIO然后添加对iSCSI设备的支持,然后重启我们在打开MPIO会发现多了这个MSFT的iSCSI设备设置多路径连接选择iSCSI发起程序快速连接,填写ISCSI服务器IP选择连接-启用多路径-高级在这样选一下在换个ip选择自动配置选择设备MPIO这里可以设置策略我们现在多路径已经设置成功后面我们只要去磁盘管理里初始化下硬盘即可。新建简单卷可以看到存储服务器创建的三块盘 不分配驱动器号或驱动器路径 不要格式化这个卷 只要在一台服务器上对三块磁盘进行新建简单卷操作,另外一台刷新即可;三块磁盘如下,RAW表示裸设备(未进行格式化)开始准备集群部署,grid安装部署注意只在节点安装运行安装grid软件,右键setup.exe,以管理员身份运行,如图,另外一台节点会自动安装选择‘高级安装’选择安装语言填写集群名称和 SCAN 名称,必须填写 hosts 文件中 SCAN IP 对应的主机名,确认去掉“配置GNS”复选框,除非你要使用GNS将两个节点的主机名和虚拟IP名添加进来,主机名和虚拟IP名已经在hosts文件中配置添加另外一个节点ip和vip设置public用于“公共”,private用于“专用”。19c请按下面三张图选择此处选择‘自动存储管理(ASM)填写磁盘组名CSR,点击标记磁盘标记磁盘弹出框中,选择Add or change label这里我将两个5G的磁盘标记成了CRS用作OCR和VOTE磁盘,10G的磁盘标记成了DATA用作数据磁盘(供Oracle数据存放数据文件等)标记完成后就能看到相关磁盘,这里只选择两个CRS标记的磁盘,DATA标记的磁盘用于Oracle Database的安装设置ASM账户口令(口令规则是大写字母+数字+小写字母),建议使用计算机密码此处选择‘不使用 IPMI19c选择选择软件安装目录先决条件检查,如果检查通过,则出现概要,如果提示失败,会有相应的提示,请根据提示 检查上一章节中的设置是否存在问题19c直接全部忽略开始安装后,网格基础结构配置处停顿约 20 分钟,此处也是 grid 安装成功与否的关键所在,如果此处出现问题,则需要卸载 grid,并检查之前所有的设置,然后再次尝试安装,直到显示成功为止如果最后一个出错直接跳过安装完成7.3检查grid安装在CMD 运行crsctl check cluster -all显示win1和win2的各种集群服务在线 ping scan-vip这时SCAN IP已经能ping通,说明Grid Infrastructure安装成功八、安装数据库(只需在node1安装即可)*执行database目录下setup.exe程序确认跳过‘指定电子邮件地*址 选择‘仅安装数据库软件’ 网格安装选项选择“Real Application Cluster数据库安装”,并将两个节点都选上 选择安装语言 数据库版本选择企业版,组件都安装 选择安装位置 先决条件检查无问题跳转到概要 安装database数据库软件 根据提示在节点2上运行<Oracle_Home>\bin>selecthome.bat 双击执行它激活产品。 如果执行selecthome报错,将db_home\bin 改成大写BIN,再次执行即可九、建立ASM磁盘组(节点1操作,node1)Cmd 输入asmca命令,等待几分钟在磁盘组选项卡中点击创建 给新创建的磁盘组命名, 冗余选择外部冗余, 如果没有符合的磁盘通过“在磁盘上加标记去添加”冗余 选择 外部 点击确定, asmca去创建磁盘组DATA 提示DATA磁盘组创建成功,同样按照DATA的创建方法创建磁盘组CRS 十、DBCA建立数据库进入数据库安装程序,安装类型选择集群数据库并创建数据库19c请选择高级配置,之后一直点下一步,到达存储管理配置请看第二图选择MGMT分区,11c请到下面蓝色部分开始看下一步后选成这样11c的配置方法在这里 选择数据库模版: “一般用途或事务处理” *在数据库标识页面,设置如下配置类型:管理员管理的全局数据库名: orclSID前缀: orcl并将所有*节点选中 管理选项页面,我们勾选配置企业管理器Enterprise Manager 数据库身份证明界面,对所有账户使用统一管理口令便于记忆和管理 进入数据库文件存储路径设置, 存储类型ASM自动存储管理, 文件存储位置为之前创建的磁盘组DATA外部冗余,下一步之后要输入asm管理的用户密码 根据需要开启归档和快速恢复区。 建议新建一个磁盘FRA做为快速恢复区,需要启动归档。 这里暂时使用CRS盘 勾选示例方案,下一步 初始化参数设置,内存选择典型,字符集设置选择简体中文 数据库存储配置, 以指定用于创建数据库的存储参数。这里的数据文件, 控制文建和重做日志都默认 勾选创建数据库,“完成”进入建库过程 建库完成后,安装程序dbca 会给出提示:数据库的全局名称: orcl标识符sid: orcl这样在Windows server 2012 上创建数据库集群成功,退出。 十一、检查及测试RACtest1服务 RACteest2服务 使用crsctl配置crs自动启动 cmd执行crsctl enable crs
2025年04月03日
5 阅读
0 评论
0 点赞
2025-04-03
RAC基本命令
--1、停启数据库上的所有节点RAC关闭顺序:停止各节点的监听服务->关闭数据库实例->关闭ASM实例->关闭节点集群服务->关闭服务器RAC启动顺序:启动服务器->启动节点集群服务->启动ASM实例->启动数据库实例->启动各节点的监听服务Srvctl stop database -d orcl –o immediateSrvctl start database -d orcl--2、停启某个数据库实例srvctl stop instance -d orcl –i orcl1srvctl start instance -d orcl –i orcl1--3、停启数据库上的所有asm磁盘组Srvctl stop asm –n node_namesrvctl start asm -n node_name--4、停启对应节点上的listenerSrvctl stop listener -n orcl1Srvctl stop listener -n orcl2Srvctl start listener -n orcl1Srvctl start listener -n orcl2--5、停止scan_listener和启动scan_listenerSrvctl stop scan_listenerSrvctl start scan_listener--6、停止scan和启动scanSrvctl stop scanSrvctl start scan--7、停止对应节点上的资源和启动对应节点上的资源Srvctl stop nodeapps -n orcl1Srvctl stop nodeapps -n orcl2Srvctl start nodeapps -n orcl1Srvctl start nodeapps -n orcl2--8、查看状态//查看服务的状态srvctl status database –d orcl//查看实例的状态srvctl status instance -d orcl -i "orcl1, orcl2" -v//查看nodesapps的状态srvctl status nodeapps -n node_name//查看asm的状态srvctl status asm -n node_name使用crs_start--1、使用crs_start启动服务crs_start service_name--2、查看服务的状态$ crs_stat -t集群级别crsctl:CRSCTL命令控制着本地节点的CRS服务(Oracle clusterware processes)CRSD主要进程(1)crsd负责管理ha操作管理crs资源,如listener,vip,ons,gsn等 由root用户管理、启动(2)ocssd管理各节点的关系,用于节点间通信由oracle用户运行管理(3)oprocd集群进程管理 —Process monitor for the cluster.仅在没有使用vendor的集群软件状态下运行(4)evmd事件检测进程,由oracle用户运行管理--1、停启CRS(需要超级用户操作)//停止CRS:需要超级用户操作crsctl stop crs 或者//启动CRS:需要超级用户操作crsctl start crs--2、启动CRS资源,需要超级用户操作crsctl start resources--3、查看CRS服务状态crsctl check crsCSS appears healthyCRS appears healthyEVM appears healthy[oracle@acctdb2 ~]$ crs_stat -t--4、检查ocr设置信息用ocrcheckocrcheck--5、检查表决磁盘信息crsctl query css votedisk--6、使用crsctl配置crs自动启动crsctl enable crs
2025年04月03日
5 阅读
0 评论
0 点赞
1
2