能否将单个表空间排除DataGuard并设置为NOLOGGING?
Oracle DataGuard 单表空间排除相关问题解答
问题1:能否将单个表空间排除在DataGuard之外?
答案:可以
从Oracle 12c版本开始,官方提供了直接的命令来实现这个需求:
ALTER DATABASE EXCLUDE TABLESPACE your_tablespace_name;
执行这个命令后,主库中该表空间的后续redo日志不会被发送到备库,备库上对应的表空间会被自动置为离线状态。如果是12c之前的旧版本,可以通过传输表空间的方式间接实现:先把目标表空间置为只读,传输到其他存储后从主库中移除,备库就不会再同步这个表空间的内容了。
问题2:在同一数据库中,能否将单个表空间设置为NOLOGGING并排除在DataGuard之外?
答案:完全可以
这个方案刚好匹配你想要的场景——把指定schema的对象隔离到单个表空间,既不生成大量redo,又不纳入DataGuard管理。具体操作步骤如下:
- 创建或修改目标表空间为NOLOGGING模式(这样该表空间内的大部分操作不会生成redo,减少日志量):
-- 创建时指定NOLOGGING CREATE TABLESPACE your_ts_name DATAFILE '/path/to/datafile.dbf' SIZE 100M NOLOGGING; -- 修改现有表空间为NOLOGGING ALTER TABLESPACE your_ts_name NOLOGGING;
- 将该表空间排除在DataGuard同步范围之外:
ALTER DATABASE EXCLUDE TABLESPACE your_ts_name;
需要额外注意两点:
- 仅设置NOLOGGING的话,备库虽然不会同步无redo的操作,但备库上的对应表空间会处于不一致状态;搭配排除命令后,备库的该表空间会直接离线,彻底和主库的该表空间解耦。
- 如果后续想要恢复同步,只需要执行
ALTER DATABASE INCLUDE TABLESPACE your_ts_name;,再把主库的表空间备份恢复到备库即可。
内容的提问来源于stack exchange,提问作者SqlWorldWide
相关产品推荐
相关产品推荐

