KingbaseES V8R6备份恢复案例之---sys_restore实现schema转换

发布时间 2023-09-18 16:16:03作者: KINGBASE研究院

**案例说明:**
sys_restore用于sys_dump备份的数据恢复,在实际的应用中有需求,将从sys_dump备份对象从原schema中转换到到另外的schema,sys_restore支持此需求的实现,但在应用中需要注意参数的使用。
**适用版本:**
 ` KingbaseES V8R6`

**一、sys_restore参数说明**

-g namespace --fromSchema=schema
源模式(默认大小写不敏感),恢复源模式中的对象到 -G 指定的目标模式中去,与 -G 一起使用。可以用多个 -g 开关来指定多个源模式。这可以与 -t 选项组合在一起只恢复一个指定的表。
--from-schema-case-sensitive
设置源模式大小写敏感。

-G namespace --targetSchema=schema
目标模式,恢复 -g 指定的源模式中的对象到目标模式中,与 -g 一起使用。可以用多个 -G 开关来指定多个目标模式。
注意
-g/-G 必须一起使用,不能和 -n 同时使用。和 -n 类似, -g/-G 仅恢复模式下的内容,不恢复模式定义。
注意
-g 指定的源模式和 -G 指定的目标模式一一对应,或者目标模式数量等于一且源模式数量大于一。

-O --no-owner
不要输出将对象的所有权设置为与原始数据库匹配的命令。默认情况下,sys_restore 会发出 ALTER OWNER 或者 SET SESSION AUTHORIZATION 语句来设置已创建的模式对象的所有权。除非到该数据库的初始连接是一个超级用户(或者拥有脚本中所有对象的同一个用户)建立的,这些语句将会失败。通过 -O ,任何用户名都可以用于初始连接,并且这个用户将会拥有所有创建的对象。


**二、应用案例**

**1、只使用-g和-G参数:**
![](https://img2023.cnblogs.com/blog/2420370/202304/2420370-20230421152829205-1527132074.png)

错误日志:
![](https://img2023.cnblogs.com/blog/2420370/202304/2420370-20230421152853270-847071707.png)

---如上所示,在restore过程中,执行了'alter table xxx'的命令,但是普通用户无权限执行此命令,导致restore失败。

**2、增加-O参数**
`[kingbase@localhost ~] $ sys_restore -U xhl -d test -g xhltest -G xhl -O -t xhltest1 /home/kingbase/xhltest1.dmp`

如下图所示:
![](https://img2023.cnblogs.com/blog/2420370/202304/2420370-20230421152911772-1769583284.png)

**三、总结**
sys_restore支持备份导入时,对象的schema的转换,在使用时注意-g、-G、-O三个参数的结合使用。