Change Global database timeout duration in Oracle SQL with query - mysql

I want to change my global timeout duration for all database like global timeout.
How can I do that with query in OracleSQL.
Example for MySQL:
SELECT ##LOCK_TIMEOUT
SET LOCK_TIMEOUT 10000;
SELECT ##LOCK_TIMEOUT

I believe this is what you wanted:
By default, the ddl_lock_timeout parameter is set to zero seconds to
wait, making it equivalent to the earlier NOWAIT behavior. But this
can easily be changed to make DDL run in WAIT mode by setting
ddl_lock_timeout to a non-zero value:
alter session set ddl_lock_timeout= 60
Now, DDL will wait 60 seconds before aborting with a ORA-00054 error.

Related

Can't create a Non-Deterministic functions in MySQL with binlog_format=ROW (or MIXED)

In MySQL 8.0, even with binlog_format set to "ROW" or "MIXED" I seem to be unable to create a non-deterministic function. e.g:
DELIMITER //
CREATE FUNCTION nonDeterministicFunc()
RETURNS CHAR(4)
BEGIN
RETURN LPAD(HEX(FLOOR(RAND() * 0xffff)), 4, '0');
END
//
DELIMITER ;
gives the error:
ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL,
or READS SQL DATA in its declaration and binary logging is enabled
(you might want to use the less safe log_bin_trust_function_creators
variable)
I'm aware that during replication, if binlog_format is set to STATEMENT then the slave DB will re-call the function and get a different result, but I thought when set to "ROW" or "MIXED" it would replicate the row changes not the function calls and so non-deterministic functions were fine?
The comment from MySQL support Margaret Fisher seems to say this is a feature:
https://bugs.mysql.com/bug.php?id=101480#c511192
"This ensures that if the binary logging format changes after the function is created, it will still work."
I understand the danger that someone changes the replication format later.... but surely that is an extreme corner case and that adding non-deterministic functions should to be allowed when replication is currently set to ROW or MIXED?
Or am I completely missing the obvious?
Any session may override the binlog_format, so the MySQL Server cannot rely on the global setting to ensure that the function is safe. If the function's code performs an INSERT/UPDATE/DELETE, and the session has been changed to binlog_format=STATEMENT, it would cause a different change on the replica than on the source.
I recommend you add the NO SQL option to your function definition to satisfy the error check.

Creating Event in MySQL does not work

I am creating an event (like crone job) in MySQL to execute a query every 3 seconds but does not work. I tried my best. Here is my code please see if I am doing anything wrong
CREATE EVENT `croneJob`
ON SCHEDULE EVERY 3 SECOND
STARTS '2014-03-24 13:45:57'
ON COMPLETION PRESERVE ENABLE
DO
insert into ranktable values (1,2,3);
It successfully creates it but does not execute every 3 seconds
You have to start your MySQL server events scheduler:
SET GLOBAL event_scheduler = ON;
Loot at:
https://dev.mysql.com/doc/refman/5.1/en/events-configuration.html
As I know all events are executed by a special event scheduler thread.When we refer to the Event Scheduler, we actually refer to this thread.There is global event_scheduler system variable determines whether the Event Scheduler is enabled and running on the server.
Try to set the event_Scheduler on your command line.
SET GLOBAL event_scheduler = ON;
OR
SET GLOBAL event_scheduler = 1;
Read more about events.
Hope it will help you.
Even setting
SET GLOBAL event_scheduler = ON;
was not working so I put these lines in my.ini
[mysqld]
event_scheduler = ON
and is working great now.

Event not working in MySQL v5.5.30

I have been trying to create an event within a MySQL Database (v5.5.30). I followed the syntax from the MySQL documentation and the event seems to create just fine without errors. However, it does not appear as if the event is actually executing. Here is the syntax ...
CREATE EVENT `Restock_Traders_Test`
ON SCHEDULE EVERY 1 MINUTE
ENDS '2013-07-31 00:00:00'
ON COMPLETION PRESERVE
DO update traders_data set qty = 25 where qty = 0;
Though the event is set to fire every minute I am only doing this for testing. I keep checking the table to see if the quantity is updated but it does not appear to be updated. Does anyone see anything wrong with my syntax? Is there something I missed?
Below is the results of running the SHOW EVENTS command
dayz_epoch Restock_Traders_Test myusername#% SYSTEM RECURRING NULL 1 MINUTE 2013-07-30 14:20:10 2013-07-31 00:00:00 ENABLED 0 latin1 latin1_swedish_ci utf8_general_ci
You need to enable the event scheduler, which is OFF by default:
SET GLOBAL event_scheduler = ON;
You can see if it's running by executing SHOW PROCESSLIST\G and seeing if you have a thread with the user event_scheduler.
Although the default is OFF, it's possible for the configuration to set it to DISABLED, which means you can't set it to ON at runtime. If that's the case, you'll need to change the setting in your configuration file.

mysql can't change a session variable group_concat_max_len

In MySQL help it says that "Setting a session variable requires no special privilege, but a client can change only its own session variables, not those of any other client."
I try to increase the size of group_concat_max_len like this:
SET ##group_concat_max_len = 9999;
In phpmyadmin, the response is positive: 'Your SQL query has been executed successfully'.
Then I check the value like this (in the same window, 2 seconds later):
SHOW SESSION VARIABLES;
And unfortunately, group_concat_max_len = 1024
I am not the admin of this MySQL server, but if changing session variable does not require special privilege, then it should work. On my localhost it works.
Is there any chance to set this variable or at least to know why it can't be changed?
In phpmyadmin it is not guaranteed, that 2 queries (even if they are separated only by a few seconds) go to the same session. So chances are, SET ##group_concat_max_len = 9999; went to one session, but SHOW SESSION VARIABLES; to another.
If you try from the mysql command line client, this will work as expected.

How to schedule a stored procedure in MySQL

I have this stored procedure. How can I run this for example with intervals of 5 seconds? Like a routine for eliminate data with a time-stamp older than one day?
DROP PROCEDURE IF EXISTS `delete_rows_links`
GO
CREATE PROCEDURE delete_rows_links
BEGIN
DELETE activation_link
FROM activation_link_password_reset
WHERE TIMESTAMPDIFF(DAY, `time`, NOW()) < 1 ;
END
GO
You can use mysql scheduler to run it each 5 seconds. You can find samples at http://dev.mysql.com/doc/refman/5.1/en/create-event.html
Never used it but I hope this would work:
CREATE EVENT myevent
ON SCHEDULE EVERY 5 SECOND
DO
CALL delete_rows_links();
I used this query and it worked for me:
CREATE EVENT `exec`
ON SCHEDULE EVERY 5 SECOND
STARTS '2013-02-10 00:00:00'
ENDS '2015-02-28 00:00:00'
ON COMPLETION NOT PRESERVE ENABLE
DO
call delete_rows_links();
In order to create a cronjob, follow these steps:
run this command : SET GLOBAL event_scheduler = ON;
If ERROR 1229 (HY000): Variable 'event_scheduler' is a GLOBAL
variable and should be set with SET GLOBAL:
mportant
It is possible to set the Event Scheduler to DISABLED only at server startup. If event_scheduler is ON or OFF, you cannot set it to DISABLED at runtime. Also, if the Event Scheduler is set to DISABLED at startup, you cannot change the value of event_scheduler at runtime.
To disable the event scheduler, use one of the following two methods:
As a command-line option when starting the server:
--event-scheduler=DISABLED
In the server configuration file (my.cnf, or my.ini on Windows systems):
include the line where it will be read by the server (for example, in a [mysqld] section):
event_scheduler=DISABLED
Read MySQL documentation for more information.
DROP EVENT IF EXISTS EVENT_NAME;
CREATE EVENT EVENT_NAME
ON SCHEDULE EVERY 10 SECOND/minute/hour
DO
CALL PROCEDURE_NAME();
If you're open to out-of-the-DB solution: You could set up a cron job that runs a script that will itself call the procedure.