2022年11月

通过nbu进行sqlserver备份的实施过程中的几点思考
1、通过全备+增备的方式进行备份,需要考虑数据量的大小。
2、备份配置异常的原因包括网络防火墙、备份脚本的配置参数、操作系统的认证策略、数据库备份用户的权限等原因。
3、检查备份异常的方式主要是查看数据库的运行日志
4、备份整体实施过程的顺利,主要取决于基础信息的完整,主要靠相关干系人的配合,细节问题的处理,主要依赖备份软件官网上的资料,相关问题的资料也能体现出产品的成熟度,从这一点来说,NBU算是比较成熟的产品,但是因为资源的原因,在目前仅仅作为整库的备份,没有部署方便的恢复环境,帮助实现更多价值。

Oracle 12c ADG备库执行sql报错ORA-22303、ORA-16000、ORA-06508、ORA-06512

2020-03-03 15:34:32.830 [job-81740957] INFO  SingleTableSplitUtil - split pk [sql=SELECT * FROM ( SELECT xxx FROM xxx.xxx SAMPLE (0.1)  WHERE (xxx IS NOT NULL)  ORDER BY DBMS_RANDOM.VALUE) WHERE ROWNUM <= 15 ORDER by xxx ASC] is running...
2020-03-03 15:34:32.969 [job-81740957] ERROR JobContainer - Exception when job run
com.alibaba.datax.common.exception.DataXException: Code:[DBUtilErrorCode-07], Description:[读取数据库数据失败. 请检查您的配置的 column/table/where/querySql或者向 DBA 寻求帮助.].  - 执行的SQL为:SELECT * FROM ( SELECT xxx FROM xxx.xxx SAMPLE (0.1)  WHERE (xxx IS NOT NULL)  ORDER BY DBMS_RANDOM.VALUE) WHERE ROWNUM <= 15 ORDER by xxx ASC 具体错误信息为:ORA-22303: 未找到类型 "SYS"."WRR$_REPLAY_DEP_GRAPH"
ORA-16000: 数据库或可插入数据库是以只读访问方式打开的
ORA-06508: PL/SQL: 无法找到正在调用 : "SYS.DBMS_WORKLOAD_REPLAY" 的程序单元
ORA-06512: 在 "SYS.DBMS_WRR_STATE", line 4
ORA-06512: 在 "SYS.DBMS_RANDOM", line 91
 - java.sql.SQLException: ORA-22303: 未找到类型 "SYS"."WRR$_REPLAY_DEP_GRAPH"
ORA-16000: 数据库或可插入数据库是以只读访问方式打开的
ORA-06508: PL/SQL: 无法找到正在调用 : "SYS.DBMS_WORKLOAD_REPLAY" 的程序单元
ORA-06512: 在 "SYS.DBMS_WRR_STATE", line 4
ORA-06512: 在 "SYS.DBMS_RANDOM", line 91

主库

sqlplus / as sysdba
alter session set container=pdb_name;
grant select on "SYS"."WRR$_REPLAY_DEP_GRAPH" to username;

策划提出需求,能否禁止对表的更新操作,首先想到的就是触发器,实际测试后脚本如下

   1、要求对表的行进行删除和更新的限制:

create or replace trigger noudeleteorupdatefortabla_A
  before update or delete
  on table_a
  for each row
declare
  -- local variables here
begin
 if updating  then
  raise_application_error(-20000,'不能对table_A表进行update操作');
  elsif deleting then
   raise_application_error(-20000,'不能对table_A表进行delete操作'); 
  end if;
end;



2、要求对表的字段进行删除和更新的限制:

create or replace trigger nouDeloUpFortabla_A_object_id
  before update or delete
  on table_a
  for each row
declare
  -- local variables here
begin
 if updating('OBJECT_ID')  then
  raise_application_error(-20000,'不能对table_A表的object_id进行update操作');
 END IF;
 if DELETING then  ----删除操作是对行的,不能指定字段
   raise_application_error(-20000,'不能对table_A表进行delete操作');
 END IF;
end;

  DECLARE
    j     number;
    s_sql varchar2(5000);
  BEGIN
    FOR j IN 1 .. 1000000 LOOP
      s_sql := 'insert into collect_data
    select t.test_start_date,
           t.test_end_date,
           t.test_qq,
           t.test_name,
           DQMP_PROBLEM_DATA_SEQ.NEXTVAL,
           t.dept,
           t.password_old1,
           t.password_old2,
           t.password_modify_date
      from test1 t';
      execute immediate s_sql;
      commit;
    END LOOP;
  END;

————————————————
版权声明:本文为CSDN博主「czmchen」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/czmchen/article/details/6525133

指定数据目录信息,docker环境在容器外备份需要。

vim /soft/mysql.cnf
[mysqld]
datadir=/root/.data/mysql/data
log-bin=/root/.data/mysql/data/mysql-bin
log-bin-index=/root/.data/mysql/data/mysql-bin.index

备份

./xtrabackup --defaults-file=/soft/mysql.cnf --host=10.12.6.229 --user=root --password='MGR_12345678' --port=3308 --backup --target-dir /soft/full-database-20221017

转移

scp -r /soft/full-database-20221017 root@10.12.6.233:/soft/

从库还原

./xtrabackup --prepare --target-dir=/soft/full-database-20221017
docker stop mysql-mgr-m
rm -rf /root/.data/mysql/data/*
rsync -avrP /soft/full-database-20221017/ --exclude='xtrabackup_*' /root/.data/mysql/data/ > /soft/rsync.log
docker start mysql-mgr-m

change master to
master_host='10.12.7.173',
master_user='group',
master_password='group_123456',
master_port=3307,
master_auto_position=1;

start slave;