前言
根据YashanDB官方文档所述,语法上基本兼容Oracle,所以,理论上来讲,当我们在使用YashanDB遇到不确定的语法使用时,可以使用Oracle运维经验去尝试。

当然,如果失败,也别烦恼,请给国产数据库一点时间孕育~
对了,标题为什么跟了P1,是因为鄙人认为,随着遇到的问题持续增加,可能会有P2、P3乃至Pn。问题不大。
以下是一些在使用YashanDB中,常见的问题,仅供参考。
Q1:哪些参数需要重启生效,哪些参数设置不需要重启生效?
在使用YashanDB时,官方不推荐直接修改配置文件yasdb.ini,往往是通过alter system set语句来修改参数的。那么参数这么多,哪些需要重启而哪些又不需要重启呢?
从语法形式上判别:
alter system set parameter_name=parameter_value ; -- 这类参数会立即生效,不需要重启数据库,重启完数据库也会持续生效,等同于scope=both
alter system set parameter_name=parameter_value scope=both; -- 这类参数会立即生效,不需要重启数据库,重启完数据库也会持续生效
alter system set parameter_name=parameter_value scope=memory; -- 这类参数会立即生效,不需要重启数据库,但是重启完数据库又会失效(回到修改前的状态)
alter system set parameter_name=parameter_value scope=spfile; -- 这类参数只写入到配置文件,不会修改当前配置,所以这类参数需要重启生效。

对于某些参数,它可能只支持重启生效,此类参数设置必须指定scope=spfile

对于有些参数,它可能同时支持重启生效,或者立即生效

而对于某些参数,在建库时就得决策好,后面是无法修改的,比如DB_BLOCK_SIZE、字符集等。
建议学习的过程中,请一切以YashanDB官方手册为准!
Q2:用户密码含有特殊字符如何在yasql客户端登录
yasql sys/yasdb_123@127.0.0.1:1688/yasdb
这是一个完整的yasql登录语法,但是我们经常会省略部分信息,比如直接使用yasql sys/yasdb_123登录当前环境的YashanDB。
那么问题来了,如果密码为Code@1234怎么办,直接使用yasql sys/Code@1234能否登录呢?实验室检验真理的唯一标准。
[yashan@yashandb ~]$ yasql sys/yasdb_123
YashanDB SQL Release 22.2.4.0 x86_64
Connected to:
YashanDB Server Release 22.2.4.0 x86_64 - X86 64bit Linux
SQL> alter user sys identified by Code@123; #修改sys用户密码
Succeed.
SQL> exit
[yashan@yashandb ~]$ yasql sys/yasdb_123 #密码已经修改,得使用新密码
YashanDB SQL Release 22.2.4.0 x86_64
YAS-02143 invalid username/password, login denied
please input user name:
YASQL-00007 invalid username/password; logon denied
please input user name:
YASQL-00007 invalid username/password; logon denied
YASQL-00007 unable to CONNECT to Server after 3 attempts
[yashan@yashandb ~]$ yasql sys/Code@123 #直接登录报错
YashanDB SQL Release 22.2.4.0 x86_64
YAS-08003 invalid name or URL of service
please input user name:
YASQL-00007 invalid username/password; logon denied
please input user name:
YASQL-00007 invalid username/password; logon denied
YASQL-00007 unable to CONNECT to Server after 3 attempts
[yashan@yashandb ~]$ yasql sys/\"Code@123\" #需要使用转义符 \"密码\" 包裹密码字符串完成转义
YashanDB SQL Release 22.2.4.0 x86_64
Connected to:
YashanDB Server Release 22.2.4.0 x86_64 - X86 64bit Linux
SQL> exit
完美~
Q3:其他会话看不到另外一个会话的数据修改
这个问题跟事务隔离级别有关。
据了解,YashanDB默认使用读已提交(READ COMMITTED)的隔离级别,因此,在一个会话内,修改数据后,要执行 commit; 语句进行事务提交后,其他会话才可以看到这个会话所做的修改。
当然也可以设置别的隔离级别,不同的隔离级别带来不同的事务现象。
可参考官方说明:隔离等级
Q4:执行sql文件
作为一个运维老手,运维动作能做到越快越准越好。
所以,想批量执行SQL语句,别再一条条,或者多条条复制粘贴了,直接放在文本里,一把梭哈。梭哈也有两种常见方式
Plan A
举个栗子
yasql sys/yasdb_123 -f -e 123.sql
使用yasql直接将123.sql导入执行,意思就是说,我们可以直接在外部使用yasql 通过-e参数,批量执行sql脚本。
[yashan@yashandb ~]$ yasql sys/\"Code@123\" -f -e 123.sql
SQL> select * from v$instance;
STATUS VERSION STARTUP_TIME HOST_NAME DATA_HOME
--------- ------------------------- ------------------------------ -------------- ------------------------------------
OPEN Release 22.2.4.0 x86_64 2023-10-17 16:57:07.186461 yashandb /home/yashan/yashandb/yasdb_data
1 row fetched.
SQL>
[yashan@yashandb ~]$ cat 123.sql
select * from v$instance;
Plan B
再举个栗子
[yashan@yashandb ~]$ yasql sys/\"Code@123\"
YashanDB SQL Release 22.2.4.0 x86_64
Connected to:
YashanDB Server Release 22.2.4.0 x86_64 - X86 64bit Linux
SQL> @/home/yashan/123.sql #绝对路径
STATUS VERSION STARTUP_TIME HOST_NAME DATA_HOME
--------- ------------------------- ------------------------------ -------------- ------------------------------------
OPEN Release 22.2.4.0 x86_64 2023-10-17 16:57:07.186461 yashandb /home/yashan/yashandb/yasdb_data
1 row fetched.
SQL> @123.sql #相对路径
STATUS VERSION STARTUP_TIME HOST_NAME DATA_HOME
--------- ------------------------- ------------------------------ -------------- ------------------------------------
OPEN Release 22.2.4.0 x86_64 2023-10-17 16:57:07.186461 yashandb /home/yashan/yashandb/yasdb_data
1 row fetched.
直接登录到sql命令窗口,通过@sql文件名即可(建议使用绝对路径)
至此,各位同学,学废了吗~




