Not sure how critical the notifications are in your use case but there have been some massive SMS gateways outages.

An on premise SMS device would also send messages when the connection to the internet down.

As a guess you have more mirrored datasets then expected. I have seen User get mirrored for example.
What does this show on the primary?
d ^MIRROR -> 1) Mirror Status -> 1) List mirrored databases
 

If both TESTTC01 and TESTTC02 existed before starting, your refresh process is also overly complicated.
You should be able to shutdown TESTTC01 & TESTTC02, copy the file from TESTTC01 to TESTTC02, start TESTTC02 and do a Activating and Catching Up Mirrored Databases. If you have a backup or snap of the file you don't even need to shutdown TESTTC01.

d ^MIRROR on the primary shows the data of the target mirrors so the data is available.

The documentation topic is here.

%SYSTEM.Mirror can give you information but only about the instance you run it on.

w $SYSTEM.Mirror.GetMemberStatus()
        Primary

The role is subject to a company's idea of what the role is and their definition is the only one that matters.
Will you support the underlying OS for example?
The person who can give you the best ideas is the person who had the role before or their manager if they are not available.
The application vendor can give you ideas if there is one.
Understanding the what, how and why of the existing install is critical.

Sign up for product alerts from Intersystems here
Consider getting your own instance here
Here is link for IRIS administration documentation
 

Yes there is a way since I have seen it.

The ZLOAD and ZREMOVE commands are combined. Here is a sample I was sent.

zr
zl
showAdmins() n rs1,rs2,rc1,rc2,$NAMESPACE,user,adminrole,roles
  s $NAMESPACE="%SYS"
  s rs1=##class(%ResultSet).%New("Security.Roles:List")
  d rs1.Execute("*","%Admin_Manage:U,%Admin_Operate:U,%Admin_Secure:U")
  f  s rc1=rs1.Next() q:rc1=0  d
  . s adminrole=rs1.Data("Name")
  . s rs2=##class(%ResultSet).%New("Security.Users:List")
  . d rs2.Execute("*",adminrole)
  . f  s rc2=rs2.Next() q:rc2=0  w rs2.Data("Name"),"|",rs2.Data("Roles"),!
  q
d showAdmins

Been a long time since I did this but when I did the performance impact was huge with a massive increase (+20%) in CPU.

There is still a warning on the app developer site to never do that.

This is a pretty severe issue with storage. I would examine why the journals are not getting written.
Are you seeing OS errors?