当我们配置 Data Guard 时,我们会启用强制日志记录。如果我们设置手动复制(通过 rsync 并在目标位置编录档案 + 数据库恢复),我们是否也需要启用强制日志记录?
Harry's questions
我的数据库处于挂载状态,我们执行了数据库备份。
backup database format '/backup/db_full%U.bkp';
所以,当恢复它时,我不能简单地使用:
Restore database;
alter database open;
表明
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '+DATA/orcl/datafile/system.257.1161421855'
为什么我还需要恢复数据库?我知道当数据库打开并且我们执行一些备份时,我们必须恢复,因为备份不一致,但在这种情况下,执行备份时数据库处于挂载状态。我不想恢复,因为我不想在备份后应用所有更改。
编辑: 我在 Oracle 19c 文档中发现备份选项“一致”。
backup consistent database format '/backup/db_full%U.bkp';
但仍然重新查询恢复(并且备份是在挂载状态下执行的)。
我在 postgresql 中设置了 Wal Shipping(备用):
在主服务器中,我已启用archive_mode = on
,archive_command
到主服务器和从服务器之间的共享位置以及archive_timeout
.
在从属设备中,我已配置Restore_command
为从共享位置恢复这些 wal 文件并创建了一个standby.signal
文件。
但是如何通过 SQL 监控从站是否已同步并应用这些日志呢?
我知道在流复制中我们可以:
-- on master
select * from pg_stat_replication;
-- On replica
select * from pg_stat_wal_receiver;
但是使用 wal Shipping 进行手动复制怎么样?
如果我恢复mysqldump备份,然后需要恢复二进制日志中的其他事务,我应该从转储的开始时间(备份开始时)开始恢复还是从转储的结束时间(备份开始时)开始恢复已完成)?
mysqlbinlog --start-datetime=?? /backup/mysql-bin.0*
我已经看到转储的最后一行有完成时间。我应该用它来开始恢复吗?
...
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2023-12-22 12:24:27
但转储没有开始时间。如果我需要从开始时间恢复,如何知道时间?
另外,我们是否可以只恢复单个数据库(因为二进制日志具有所有数据库的更改)?
例如,我需要在datadir
(临时)创建一个名为“backup”的目录来存储备份文件,但我注意到MySQL将此目录解释为MySQL中的数据库。这安全吗?datadir
是否可以在MySQL 不认为它是数据库的情况下创建一个目录?”
我的 MySQL 服务器已正确配置以下参数
mysql> show global variables like '%have_ssl%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_ssl | YES |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show global variables like 'ssl_ca';
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| ssl_ca | ca.pem |
+---------------+--------+
1 row in set (0.00 sec)
mysql> show global variables like 'ssl_cert';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| ssl_cert | server-cert.pem |
+---------------+-----------------+
1 row in set (0.00 sec)
mysql> show global variables like 'ssl_key';
+---------------+----------------+
| Variable_name | Value |
+---------------+----------------+
| ssl_key | server-key.pem |
+---------------+----------------+
1 row in set (0.00 sec)
mysql> show global variables like 'datadir';
+---------------+---------+
| Variable_name | Value |
+---------------+---------+
| datadir | /dados/ |
+---------------+---------+
1 row in set (0.00 sec)
这些文件存在于datadir
[root@mysqlen1 dados]# ls -l ca.pem server-cert.pem server-key.pem
-rw-r--r-- 1 mysql mysql 1112 Nov 3 10:28 ca.pem
-rw-r--r-- 1 mysql mysql 1112 Nov 3 10:28 server-cert.pem
-rw------- 1 mysql mysql 1680 Nov 3 10:28 server-key.pem
然后我创建一个用户:
mysql> create user 'teste'@'%' identified by 'teste123' require ssl;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
我可以使用证书进行连接
[root@TCCPUC-ENGDADOS:~]# mysql -uteste -p'teste123' -h 192.168.0.110 --ssl-ca=ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 30
Server version: 8.0.28 MySQL Community Server - GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
但也没有证书
[root@TCCPUC-ENGDADOS:~]# mysql -uteste -p'teste123' -h 192.168.0.110
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 31
Server version: 8.0.28 MySQL Community Server - GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
它是否正确?我可以强制用户仅使用这些证书登录吗?
从通用二进制文件安装 MySQL 和从源代码安装 MySQL(在内核中编译)有什么区别?生产环境有什么区别吗?
有我可以检查的视图吗?我需要通过(Linux)或(Windows)使用该SUBSTR
函数创建一个脚本。/
\
SUBSTR('anything', 1, INSTR('anything', '/', 1, 1)) -- Linux
SUBSTR('anything', 1, INSTR('anything', '\\', 1, 1)) -- Windows
有没有办法在客户端挂载DBFS,还是只能挂载在数据库服务器端?
我已经dbfs_client
在Oracle Instant Client
zip 中搜索了二进制文件,但似乎这样的二进制文件不存在。DBFS只能挂载在数据库服务器上吗?为什么这么多参考文献说它像一个nfs
?nfs
可以安装在任何客户端机器上。
如何列出MySQL中的非默认参数?
我正在寻找类似的\dconfig+
东西postgresql
我需要--prepare
在备份后立即运行 xtrabackup 以使备份一致,或者我可以仅在恢复数据库时执行此步骤吗?例如,--prepare
在备份后 3 周后、执行还原之前运行。
如果我也使用增量备份,我是否需要另外(一起)运行--prepare
,--apply-log-only
或者我应该先运行--prepare
然后--prepare --apply-log-only
防止回滚阶段?
IE:如果我也有增量备份,我应该这样做吗?
xtrabackup --prepare --apply-log-only --target-dir=/backup/FULL_backup/
xtrabackup --prepare --apply-log-only --target-dir=/backup/FULL_backup/ --incremental-dir=/backup/incremental1_backup/
xtrabackup --prepare --target-dir=/backup/FULL_backup/ --incremental-dir=/backup/incremental2_backup/
或者
xtrabackup --prepare --target-dir=/backup/FULL_backup/
xtrabackup --prepare --apply-log-only --target-dir=/backup/FULL_backup/
xtrabackup --prepare --apply-log-only --target-dir=/backup/FULL_backup/ --incremental-dir=/backup/incremental1_backup/
xtrabackup --prepare --target-dir=/backup/FULL_backup/ --incremental-dir=/backup/incremental2_backup/
我现在无法获得新磁盘,我正在考虑是否可以在两个磁盘组之间共享磁盘。
我有一个 FRA 磁盘组,磁盘为 200gb,我需要在 DATA 磁盘组中添加 100gb。
我将 FRA 磁盘限制为 100g:
alter diskgroup FRA resize all size 100g;
然后,空闲空间将分配到另一个磁盘组 (DATA) 中。有没有办法在 ASM 中做到这一点?我在我的实验室试过,但我得到了错误:
alter diskgroup DATA add disk 'ORCL:DATA_STB3' size 100g;
(ORCL:DATA_STB3 是我现在有 100 GB 空闲空间的磁盘)。
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15029: disk 'ORCL:DATA_STB3' is already mounted by this instance
如果不可能,为什么我们可以限制 ASM 磁盘大小?这个命令在什么情况下有用?
假设我们做了一个完全增量 0 级备份(全数据库备份),然后由于某种原因,我们需要删除一些归档日志(在全数据库备份后生成),然后运行一个增量 1 级备份(增量备份)。如果没有删除的归档日志,这个增量备份可以吗?或者它是否需要那些档案来了解自 0 级(完整)备份以来的差异?(我知道我们必须在增量级别 1 之后拥有归档日志才能进行完全恢复)。
如果不是,Oracle 如何跟踪自增量级别 0 以来的这些差异(没有块更改跟踪)?
我相信 Oracle 审计无法跟踪它,因为用户实际上没有连接到数据库。或者审计有帮助吗?我的意思是,Oracle 可以在没有用户登录数据库的情况下进行审计跟踪吗?
某人或某些应用程序多次尝试在帐户中连接并导致锁定(定时)(太多次尝试使用错误密码连接,在用户配置文件中定义)。我如何找出这些尝试来自哪台机器或 IP 和操作系统用户?
我正在阅读sp_change_users_login文档,它说:
此功能将在 Microsoft SQL Server 的未来版本中删除。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。请改用 ALTER USER。
如何使用 alter user 命令自动修复?
我想知道是否可以转换 LSN 的值。
即:306239000001950100001 到日期/时间戳。
scn_to_timestamp
与 Oracle 中的功能类似的东西。
这是默认/正常行为吗?当我们开始备份时,它会创建一个 316gb 的文件,只有在备份完成后它才会缩小到 131gb。没有意义,因为在这种情况下,我们需要 316gb 或更大的磁盘来启动备份,即使它被压缩到 131gb。
假设我们有以下 tns 本地命名:
CMAN =
(DESCRIPTION=
(SOURCE_ROUTE=YES)
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.16)(PORT=1522)) ###CMAN
(ADDRESS=(PROTOCOL=TCP)(HOST=sat-scan)(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=satdb)
(FAILOVER_MODE=
(TYPE=SELECT)
(METHOD=BASIC)
(RETRIES=10)
(DELAY=1)
)
)
)
SOURCE_ROUTE=YES 是:
当您将此参数设置为 on 或 yes 时,Oracle Net 将按顺序使用每个地址,直到到达目的地。要使用 Oracle Connection Manager,需要从客户端到 Oracle Connection Manager 的初始连接,并且需要从 Oracle Connection Manager 到侦听器的第二个连接。
但是如果我们有两个 cman 呢?如何实现 LOAD_BALANCE 和 FAILOVER 参数?这个对吗?
CMAN =
(DESCRIPTION=
(LOAD_BALANCE=ON)
(FAILOVER=ON)
(SOURCE_ROUTE=YES)
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.16)(PORT=1522)) ###CMAN
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.17)(PORT=1522)) ###CMAN
(ADDRESS=(PROTOCOL=TCP)(HOST=sat-scan)(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=satdb)
(FAILOVER_MODE=
(TYPE=SELECT)
(METHOD=BASIC)
(RETRIES=10)
(DELAY=1)
)
)
)
192.168.0.16:1522
我的意思是,它必须仅在and周围进行平衡和故障转移192.168.0.17:1522
,但我想它也会考虑sat-scan:1521
,也许客户端直接连接scan-scan
而不需要通过 cman 传递。
我知道收缩不是一个好习惯,但如果我只执行 ie: dbcc shrinkfile (filename,1024)
,这是默认的吗?notruncate
还是truncateonly
?我在文档中没有找到任何关于它的信息。
NOTRUNCATE 将分配的页面从数据文件的末尾移动到文件前面的未分配页面,无论是否指定 target_percent。文件末尾的可用空间不会返回给操作系统,文件的物理大小也不会改变。因此,如果指定了 NOTRUNCATE,则文件似乎不会收缩。
NOTRUNCATE 仅适用于数据文件。日志文件不受影响。
FILESTREAM 文件组容器不支持此选项。
……
TRUNCATEONLY 将文件末尾的所有可用空间释放给操作系统,但不执行文件内的任何页面移动。数据文件仅收缩到最后分配的范围。
如果使用 TRUNCATEONLY 指定,则忽略 target_size。
TRUNCATEONLY 选项不会移动日志中的信息,但会从日志文件的末尾删除不活动的 VLF。FILESTREAM 文件组容器不支持此选项。