Norman Powell added 22 points for Portland, which snapped a two-game skid.
DeMar DeRozan had 24 points and Dejounte Murray had 13 points, 11 rebounds and 10 assists for San Antonio.
Portland was without Damian Lillard, who strained his right hamstring during practice on Thursday.
Seven players scored at least eight points for the Trail Blazers, including a combined 39 points from reserves Carmelo Anthony, Anfernee Simons and Enes Kanter.
Powell’s driving layup with 22.8 seconds remaining gave Portland a 107-106 lead. DeRozan missed a jumper from the wing with 9.2 seconds left, but Jakob Poeltl tipped the rebound out to Rudy Gay, who missed a 3-pointer. Poeltl got the rebound but missed a 17-footer as time expired.
DeRozan and San Antonio coach Gregg Popovich vehemently argued that a foul should have been called during the final possession, without success.
The Spurs fell to 2-7 in April after blowing another lead in the final minutes.
Portland trailed by 16 points in the second half but closed the third quarter with a 24-10 run and scored the opening basket of the final period to tie the game at 85.
The run included technical fouls on DeRozan and Kanter. The two had to be separated after the Spurs guard fouled the Blazers center while trying to strip him of possession in the paint. Kanter made both free throws to pull the Blazers within 81-77 with 2:26 remaining in the third.
The Trail Blazers went ahead 97-95 with 4:43 remaining on Jusuf Nurkic’s layup. DeRozan scored eight points in the final 4 1/2 minutes and Derrick White drained a 3-pointer for a 104-101 lead with 2:03 remaining.
San Antonio had two turnovers and missed three shots in the final 2 minutes.
WISHING ALDRIDGE WELL
Popovich said he was ”really worried” when he first heard former Spurs forward LaMarcus Aldridge was retiring due to an irregular heartbeat. Popovich mentioned the heart arrhythmia Aldridge experienced in March 2017 while with the Spurs.
”It was serious,” Popovich said. ”It scared the hell out of him and us. Obviously, it’s popped up again. So, I was just worried about it. He’s had a long, great career. He’s going to be fine financially, and he’s got a lot of good memories, but your health is what makes everything tick. So, we just hope for the best.”
During his 15th season, Aldridge announced Thursday he is retiring immediately after dealing with an irregular heartbeat in what became his final game April 10 against the Los Angeles Lakers.
Aldridge spent 5 1/2 seasons with San Antonio before signing with Brooklyn on March 29 following a buyout with the Spurs.
Blazers: Coach Terry Stotts said Lillard sat as a precaution after he reported no improvement in his right hamstring Friday. Stotts was unsure if Lillard would play Sunday at Charlotte. … Portland is 87-88 against San Antonio. The Spurs have a winning record against every existing franchise in the league, but their narrowest margin is against the Blazers. … Derrick Jones has started a career-high 41 games this season. He started a combined 46 games in his prior four seasons, including his previous high of 16 starts last season for Miami.
Spurs: Patty Mills became the seventh player to appear in 650 games for the franchise. Mills joined David Robinson, George Gervin, Sean Elliott and former teammates Tim Duncan, Tony Parker and Manu Ginobili. … San Antonio will play three games in four days, concluding Monday at Indiana.
Trail Blazers: At Charlotte on Sunday.
Spurs: At Phoenix on Saturday.
More AP NBA: https://apnews.com/hub/nba and https://twitter.com/AP-Sports