Recently, I was working on setting up a redis cluster along with separate users for readwrite and readonly. I setup the readonly user using the below privileges (ACLs): user redisreadonly on >mySuperSecretPassword ~* resetchannels -@all +@read +ping +asking Once this is setup, I wrote a simple program in python to connect to the redis cluster using the readonly credentials and print the number of keys. #!/usr/bin/env python3 """ pip3 install redis """ from redis.cluster import RedisCluster, ClusterNode # ─────── Cluster connection ─────── startup_nodes = [ ClusterNode("redis_host_1", 6379), ClusterNode("redis_host_2", 6379), ClusterNode("redis_host_3", 6379) ] rc = RedisCluster(startup_nodes=startup_nodes,decode_responses=True,username='redisreadonly',password='mySuperSecretPassw...
Build a Reporting Database using standby and flashback
- Get link
- X
- Other Apps
It's been a long time since I posted something. So, here's something worthwhile. Thanks to my colleague Kevin who devised this method!
Requirement
A reporting database to be refreshed daily from the UAT instance. The reporting database should be available during the daytime and the refresh can happen during the night.
Solution
1. Initially, build the reporting database as a standby database.
2. Once the Managed Recovery process (MRP) is initiated and the standby is in sync with the primary database, cancel the MRP.
A reporting database to be refreshed daily from the UAT instance. The reporting database should be available during the daytime and the refresh can happen during the night.
Solution
1. Initially, build the reporting database as a standby database.
2. Once the Managed Recovery process (MRP) is initiated and the standby is in sync with the primary database, cancel the MRP.
SQL> alter database recover managed standby database cancel;
3. Enable flashback in the standby database. Note that the DB should be in mount state for this.
SQL> startup mount force;
SQL> alter database flashback on;4. create guaranteed restore point.
SQL> drop restore point before_open;
SQL> create restore point before_open guarantee flashback database;
5. Activate the standby database.
SQL> alter database activate standby database;
SQL> startup force;
6. In the evening/night, flashback the database to the guaranteed restore point i.e., standby database and resync it with the primary.
SQL> startup mount force;
SQL> flashback database to before_open;
SQL> alter database convert to physical standby;
SQL> startup mount force;
SQL> alter database recover managed standby database disconnect from session;
7. The next day monring, verify that the recovery has indeed completed, by using the following sql:
SQL> set pages 1000
SQL> SELECT ARCH.THREAD# "Thread", ARCH.SEQUENCE# "Last Sequence Received",
APPL.SEQUENCE# "Last Sequence Applied",
(ARCH.SEQUENCE# - APPL.SEQUENCE#) "Difference"
FROM
(SELECT THREAD# ,SEQUENCE# FROM V$ARCHIVED_LOG WHERE (THREAD#,FIRST_TIME ) IN
(SELECT THREAD#,MAX(FIRST_TIME) FROM V$ARCHIVED_LOG GROUP BY THREAD#)) ARCH,
(SELECT THREAD# ,SEQUENCE# FROM V$LOG_HISTORY WHERE (THREAD#,FIRST_TIME ) IN
(SELECT THREAD#,MAX(FIRST_TIME) FROM V$LOG_HISTORY GROUP BY THREAD#)) APPL
WHERE
ARCH.THREAD# = APPL.THREAD#
ORDER BY 1;
SQL> select max(sequence#) from v$archived_log; -- execute on both primary and standby.
8. Repeat the Steps 4 & 5 - to open the reporting database to the users.
9. In the evening/night, repeat Step 6. - to resync the reporting database.
References
1. Introduction to Restore points/flashback databases.
2. Introduction to data guard.
3. Business Continuity for Oracle Applications Release 11i, Database Releases 9i and 10g - Note: 216212.1
- Get link
- X
- Other Apps
Popular posts from this blog
Elasticsearch: Get output in CSV format using curl and jq
If you've used elasticsearch , you'll know that each call to it has to be through REST APIs, either using Kibana , curl, postman or similar tools. If you are like me, then curl is the way to go! However, that does pose one problem - how does one select specific fields, akin to select statements of SQL/RDBMS DBs? The answer is using jq , the lightweight and flexible command-line JSON processor. This is my use-case: I have an elasticsearch cluster in which daily snapshots are scheduled and I would like to get the output of snapshot name, snapshot repo, name of the SLM policy etc., in a comma separated row format so that I can directly use it to push that data to my backup catalog in PostgreSQL. So, I query "_snapshot/<snapshot_repo>/backup_name_start_string*" and the output is quite long and convoluted (the more the backups, the longer the output)! Here, I present the way to shorten the output as well as to fetch it in row based CSV format, easier to understa...
EXCEPTION_ACCESS_VIOLATION in Jinitiator and IE crashes
The Environment Apps Version : 11.5.10.2 Jinitiator Version : 1.3.1.26 Internet Explorer Version : 6 The Issue One of our end users was receiving a very strange error while using jinitiator. The Internet explorer window would crash (close by itself) after creating a file HS_ERR_PID .log on the desktop, where #### stands for the Process ID of the f60webmx session. This error is intermittent and not easily reproducible. Moreover, the user would have to redo his/her work and hence this issue was turning out to be very vexing indeed. The error log is as below: An unexpected exception has been detected in native code outside the VM. Unexpected Signal : EXCEPTION_ACCESS_VIOLATION occurred at PC=0x6D043D1AFunction name=Java_sun_java2d_loops_DefaultComponent_IntIsomorphicCopy Library=C:\Program Files\Oracle\JInitiator 1.3.1.26\bin\awt.dll Current Java thread: at sun.java2d.loops.DefaultComponent.IntIsomorphicCopy(Native Method) at sun.java2d.loops.IntRgbToIntRgb.OpaqueBlit(Unknown Source) at ...
Redis user permissions (ACL) and python connection
Recently, I was working on setting up a redis cluster along with separate users for readwrite and readonly. I setup the readonly user using the below privileges (ACLs): user redisreadonly on >mySuperSecretPassword ~* resetchannels -@all +@read +ping +asking Once this is setup, I wrote a simple program in python to connect to the redis cluster using the readonly credentials and print the number of keys. #!/usr/bin/env python3 """ pip3 install redis """ from redis.cluster import RedisCluster, ClusterNode # ─────── Cluster connection ─────── startup_nodes = [ ClusterNode("redis_host_1", 6379), ClusterNode("redis_host_2", 6379), ClusterNode("redis_host_3", 6379) ] rc = RedisCluster(startup_nodes=startup_nodes,decode_responses=True,username='redisreadonly',password='mySuperSecretPassw...
Comments